]> git.saurik.com Git - apple/libc.git/blobdiff - stdio/FreeBSD/tempnam.c.patch
Libc-763.13.tar.gz
[apple/libc.git] / stdio / FreeBSD / tempnam.c.patch
index 6ae185d0d0b4122f0b3cd522f4e3e15ccb5be76d..7e1c8be636eeba44b5531cfab84f41db9bd8a565 100644 (file)
@@ -1,21 +1,10 @@
---- 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 @@
+--- tempnam.c.orig     2010-10-25 19:45:24.000000000 -0700
++++ tempnam.c  2010-10-25 22:01:51.000000000 -0700
+@@ -53,35 +53,60 @@ tempnam(dir, pfx)
        int sverrno;
        char *f, *name;
  
 -      if (!(name = malloc(MAXPATHLEN)))
-+#if __DARWIN_UNIX03
-+      struct stat sb;
-+#endif /* __DARWIN_UNIX03 */
 +      if (!(name = malloc(MAXPATHLEN))) {
                return(NULL);
 +      }
@@ -36,7 +25,7 @@
 +#endif /* !__DARWIN_UNIX03 */
        if ((f = (char *)dir)) {
 +#if __DARWIN_UNIX03
-+              if (!access(dir, W_OK)) {
++          if (access(dir, W_OK) == 0) {
 +#endif /* __DARWIN_UNIX03 */
                (void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXX", f,
                    *(f + strlen(f) - 1) == '/'? "": "/", pfx);
                        return(f);
 +              }
 +#if __DARWIN_UNIX03
-+      }
++          }
 +#endif /* __DARWIN_UNIX03 */
        }
  
        f = P_tmpdir;
 +#if __DARWIN_UNIX03
-+      if (stat(f, &sb) == 0) {        /* directory accessible? */
++      if (access(f, W_OK) == 0) {     /* directory accessible? */
 +#endif /* __DARWIN_UNIX03 */
        (void)snprintf(name, MAXPATHLEN, "%s%sXXXXXX", f, pfx);
 -      if ((f = _mktemp(name)))
  
 +#if __DARWIN_UNIX03
 +      }
-+#endif /* __DARWIN_UNIX03 */
-       f = _PATH_TMP;
-+#if __DARWIN_UNIX03
-+      if (stat(f, &sb) < 0) { 
-+              f = "./";       /* directory inaccessible */
++      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;
        (void)snprintf(name, MAXPATHLEN, "%s%sXXXXXX", f, pfx);
 -      if ((f = _mktemp(name)))
 +      if ((f = _mktemp(name))) {