Loading...
stdio/FreeBSD/tempnam.c.patch /dev/null Libc-498.1.5
--- /dev/null
+++ Libc/Libc-498.1.5/stdio/FreeBSD/tempnam.c.patch
@@ -0,0 +1,78 @@
+--- tempnam.c.orig	2006-09-15 00:33:51.000000000 -0700
++++ tempnam.c	2006-09-15 01:19:22.000000000 -0700
+@@ -38,6 +38,7 @@
+ __FBSDID("$FreeBSD: src/lib/libc/stdio/tempnam.c,v 1.10 2002/03/22 21:53:04 obrien Exp $");
+ 
+ #include <sys/param.h>
++#include <sys/stat.h>
+ #include <errno.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -57,35 +58,61 @@
+ 	int sverrno;
+ 	char *f, *name;
+ 
+-	if (!(name = malloc(MAXPATHLEN)))
++#if __DARWIN_UNIX03
++	struct stat sb;
++#endif /* __DARWIN_UNIX03 */
++	if (!(name = malloc(MAXPATHLEN))) {
+ 		return(NULL);
++	}
+ 
+ 	if (!pfx)
+ 		pfx = "tmp.";
+ 
++#if !__DARWIN_UNIX03
+ 	if (issetugid() == 0 && (f = getenv("TMPDIR"))) {
+ 		(void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXX", f,
+ 		    *(f + strlen(f) - 1) == '/'? "": "/", pfx);
+-		if ((f = _mktemp(name)))
++		if ((f = _mktemp(name))) {
+ 			return(f);
++		}
+ 	}
+-
++#endif /* !__DARWIN_UNIX03 */
+ 	if ((f = (char *)dir)) {
++#if __DARWIN_UNIX03
++		if (!access(dir, W_OK)) {
++#endif /* __DARWIN_UNIX03 */
+ 		(void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXX", f,
+ 		    *(f + strlen(f) - 1) == '/'? "": "/", pfx);
+-		if ((f = _mktemp(name)))
++		if ((f = _mktemp(name))) {
+ 			return(f);
++		}
++#if __DARWIN_UNIX03
++	}
++#endif /* __DARWIN_UNIX03 */
+ 	}
+ 
+ 	f = P_tmpdir;
++#if __DARWIN_UNIX03
++	if (stat(f, &sb) == 0) {	/* directory accessible? */
++#endif /* __DARWIN_UNIX03 */
+ 	(void)snprintf(name, MAXPATHLEN, "%s%sXXXXXX", f, pfx);
+-	if ((f = _mktemp(name)))
++	if ((f = _mktemp(name))) {
+ 		return(f);
++	}
+ 
++#if __DARWIN_UNIX03
++	}
++#endif /* __DARWIN_UNIX03 */
+ 	f = _PATH_TMP;
++#if __DARWIN_UNIX03
++	if (stat(f, &sb) < 0) {	
++		f = "./";	/* directory inaccessible */
++	}
++#endif /* __DARWIN_UNIX03 */
+ 	(void)snprintf(name, MAXPATHLEN, "%s%sXXXXXX", f, pfx);
+-	if ((f = _mktemp(name)))
++	if ((f = _mktemp(name))) {
+ 		return(f);
++	}
+ 
+ 	sverrno = errno;
+ 	free(name);