]> git.saurik.com Git - apple/libc.git/blob - stdio/FreeBSD/tempnam.c.patch
Libc-763.13.tar.gz
[apple/libc.git] / stdio / FreeBSD / tempnam.c.patch
1 --- tempnam.c.orig 2010-10-25 19:45:24.000000000 -0700
2 +++ tempnam.c 2010-10-25 22:01:51.000000000 -0700
3 @@ -53,35 +53,60 @@ tempnam(dir, pfx)
4 int sverrno;
5 char *f, *name;
6
7 - if (!(name = malloc(MAXPATHLEN)))
8 + if (!(name = malloc(MAXPATHLEN))) {
9 return(NULL);
10 + }
11
12 if (!pfx)
13 pfx = "tmp.";
14
15 +#if !__DARWIN_UNIX03
16 if (issetugid() == 0 && (f = getenv("TMPDIR"))) {
17 (void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXX", f,
18 *(f + strlen(f) - 1) == '/'? "": "/", pfx);
19 - if ((f = _mktemp(name)))
20 + if ((f = _mktemp(name))) {
21 return(f);
22 + }
23 }
24 -
25 +#endif /* !__DARWIN_UNIX03 */
26 if ((f = (char *)dir)) {
27 +#if __DARWIN_UNIX03
28 + if (access(dir, W_OK) == 0) {
29 +#endif /* __DARWIN_UNIX03 */
30 (void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXX", f,
31 *(f + strlen(f) - 1) == '/'? "": "/", pfx);
32 - if ((f = _mktemp(name)))
33 + if ((f = _mktemp(name))) {
34 return(f);
35 + }
36 +#if __DARWIN_UNIX03
37 + }
38 +#endif /* __DARWIN_UNIX03 */
39 }
40
41 f = P_tmpdir;
42 +#if __DARWIN_UNIX03
43 + if (access(f, W_OK) == 0) { /* directory accessible? */
44 +#endif /* __DARWIN_UNIX03 */
45 (void)snprintf(name, MAXPATHLEN, "%s%sXXXXXX", f, pfx);
46 - if ((f = _mktemp(name)))
47 + if ((f = _mktemp(name))) {
48 return(f);
49 + }
50
51 +#if __DARWIN_UNIX03
52 + }
53 + if (issetugid() == 0 && (f = getenv("TMPDIR")) && access(f, W_OK) == 0) {
54 + (void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXX", f,
55 + *(f + strlen(f) - 1) == '/'? "": "/", pfx);
56 + if ((f = _mktemp(name))) {
57 + return(f);
58 + }
59 + }
60 +#endif /* __DARWIN_UNIX03 */
61 f = _PATH_TMP;
62 (void)snprintf(name, MAXPATHLEN, "%s%sXXXXXX", f, pfx);
63 - if ((f = _mktemp(name)))
64 + if ((f = _mktemp(name))) {
65 return(f);
66 + }
67
68 sverrno = errno;
69 free(name);