Loading...
--- /dev/null
+++ Libc/Libc-594.9.1/stdio/FreeBSD/tempnam.c.patch
@@ -0,0 +1,77 @@
+--- tempnam.c.orig 2008-11-12 17:08:45.000000000 -0800
++++ tempnam.c 2008-11-12 17:41:23.000000000 -0800
+@@ -57,35 +57,68 @@ tempnam(dir, pfx)
+ int sverrno;
+ char *f, *name;
+
+- if (!(name = malloc(MAXPATHLEN)))
++ 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) == 0) {
++#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 (access(f, W_OK) == 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
++ }
++ if (issetugid() == 0 && (f = getenv("TMPDIR")) && access(f, W_OK) == 0) {
++ (void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXX", f,
++ *(f + strlen(f) - 1) == '/'? "": "/", pfx);
++ if ((f = _mktemp(name))) {
++ return(f);
++ }
++ }
++#endif /* __DARWIN_UNIX03 */
+ f = _PATH_TMP;
++#if __DARWIN_UNIX03
++ if (access(f, W_OK) < 0) {
++ f = "./"; /* directory inaccessible */
++ if (access(f, W_OK) < 0) {
++ return(NULL);
++ }
++ }
++#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);