X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/1f2f436a38f7ae2d39a943ad2898d8fed4ed2e58..refs/heads/master:/stdio/FreeBSD/tempnam.c diff --git a/stdio/FreeBSD/tempnam.c b/stdio/FreeBSD/tempnam.c index 72a5e60..adc2adf 100644 --- a/stdio/FreeBSD/tempnam.c +++ b/stdio/FreeBSD/tempnam.c @@ -53,35 +53,60 @@ 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; (void)snprintf(name, MAXPATHLEN, "%s%sXXXXXX", f, pfx); - if ((f = _mktemp(name))) + if ((f = _mktemp(name))) { return(f); + } sverrno = errno; free(name);