Commit | Line | Data |
---|---|---|
503553be | 1 | /* |
2267ab9a KB |
2 | * Copyright (c) 1988 Regents of the University of California. |
3 | * All rights reserved. | |
4 | * | |
1c15e888 C |
5 | * Redistribution and use in source and binary forms are permitted provided |
6 | * that: (1) source distributions retain this entire copyright notice and | |
7 | * comment, and (2) distributions including binaries display the following | |
8 | * acknowledgement: ``This product includes software developed by the | |
9 | * University of California, Berkeley and its contributors'' in the | |
10 | * documentation or other materials provided with the distribution and in | |
11 | * all advertising materials mentioning features or use of this software. | |
12 | * Neither the name of the University nor the names of its contributors may | |
13 | * be used to endorse or promote products derived from this software without | |
14 | * specific prior written permission. | |
15 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED | |
16 | * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF | |
17 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | |
503553be KM |
18 | */ |
19 | ||
2ce81398 | 20 | #if defined(LIBC_SCCS) && !defined(lint) |
1c15e888 | 21 | static char sccsid[] = "@(#)tmpnam.c 4.8 (Berkeley) 6/22/90"; |
2267ab9a | 22 | #endif /* LIBC_SCCS and not lint */ |
503553be | 23 | |
2267ab9a | 24 | #include <sys/param.h> |
2267ab9a KB |
25 | #include <stdio.h> |
26 | ||
27 | #define P_tmpdir "/usr/tmp" | |
28 | ||
29 | FILE * | |
30 | tmpfile() | |
31 | { | |
32 | FILE *fp; | |
49b91625 | 33 | char *f, *tmpnam(); |
2267ab9a | 34 | |
49b91625 KB |
35 | if (!(f = tmpnam((char *)NULL)) || !(fp = fopen(f, "w+"))) { |
36 | fprintf(stderr, "tmpfile: cannot open %s.\n", f); | |
2267ab9a KB |
37 | return(NULL); |
38 | } | |
39 | (void)unlink(f); | |
40 | return(fp); | |
41 | } | |
42 | ||
43 | char * | |
44 | tmpnam(s) | |
45 | char *s; | |
46 | { | |
49b91625 | 47 | char *malloc(), *mktemp(); |
2267ab9a | 48 | |
49b91625 KB |
49 | if (!s && !(s = malloc((u_int)MAXPATHLEN))) |
50 | return(NULL); | |
2267ab9a KB |
51 | (void)sprintf(s, "%s/XXXXXX", P_tmpdir); |
52 | return(mktemp(s)); | |
53 | } | |
54 | ||
55 | char * | |
56 | tempnam(dir, pfx) | |
57 | char *dir, *pfx; | |
93ced3e8 | 58 | { |
49b91625 | 59 | char *f, *name, *getenv(), *malloc(), *mktemp(); |
93ced3e8 | 60 | |
2267ab9a KB |
61 | if (!(name = malloc((u_int)MAXPATHLEN))) |
62 | return(NULL); | |
49b91625 KB |
63 | |
64 | if (f = getenv("TMPDIR")) { | |
65 | (void)sprintf(name, "%s/%sXXXXXX", f, pfx ? "" : pfx); | |
66 | if (f = mktemp(name)) | |
67 | return(f); | |
2267ab9a | 68 | } |
49b91625 KB |
69 | if (dir) { |
70 | (void)sprintf(name, "%s/%sXXXXXX", dir, pfx ? "" : pfx); | |
71 | if (f = mktemp(name)) | |
72 | return(f); | |
2267ab9a | 73 | } |
49b91625 KB |
74 | (void)sprintf(name, "%s/%sXXXXXX", P_tmpdir, pfx ? "" : pfx); |
75 | if (f = mktemp(name)) | |
76 | return(f); | |
77 | (void)sprintf(name, "/tmp/%sXXXXXX", pfx ? "" : pfx); | |
a304db7f KB |
78 | if (!(f = mktemp(name))) |
79 | (void)free(name); | |
80 | return(f); | |
93ced3e8 | 81 | } |