xref: /csrg-svn/lib/libc/stdio/tempnam.c (revision 42635)
1 /*
2  * Copyright (c) 1988 Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  */
7 
8 #if defined(LIBC_SCCS) && !defined(lint)
9 static char sccsid[] = "@(#)tempnam.c	4.7 (Berkeley) 06/01/90";
10 #endif /* LIBC_SCCS and not lint */
11 
12 #include <sys/param.h>
13 #include <stdio.h>
14 
15 #define	P_tmpdir	"/usr/tmp"
16 
17 FILE *
18 tmpfile()
19 {
20 	FILE *fp;
21 	char *f, *tmpnam();
22 
23 	if (!(f = tmpnam((char *)NULL)) || !(fp = fopen(f, "w+"))) {
24 		fprintf(stderr, "tmpfile: cannot open %s.\n", f);
25 		return(NULL);
26 	}
27 	(void)unlink(f);
28 	return(fp);
29 }
30 
31 char *
32 tmpnam(s)
33 	char *s;
34 {
35 	char *malloc(), *mktemp();
36 
37 	if (!s && !(s = malloc((u_int)MAXPATHLEN)))
38 		return(NULL);
39 	(void)sprintf(s, "%s/XXXXXX", P_tmpdir);
40 	return(mktemp(s));
41 }
42 
43 char *
44 tempnam(dir, pfx)
45 	char *dir, *pfx;
46 {
47 	char *f, *name, *getenv(), *malloc(), *mktemp();
48 
49 	if (!(name = malloc((u_int)MAXPATHLEN)))
50 		return(NULL);
51 
52 	if (f = getenv("TMPDIR")) {
53 		(void)sprintf(name, "%s/%sXXXXXX", f, pfx ? "" : pfx);
54 		if (f = mktemp(name))
55 			return(f);
56 	}
57 	if (dir) {
58 		(void)sprintf(name, "%s/%sXXXXXX", dir, pfx ? "" : pfx);
59 		if (f = mktemp(name))
60 			return(f);
61 	}
62 	(void)sprintf(name, "%s/%sXXXXXX", P_tmpdir, pfx ? "" : pfx);
63 	if (f = mktemp(name))
64 		return(f);
65 	(void)sprintf(name, "/tmp/%sXXXXXX", pfx ? "" : pfx);
66 	return(mktemp(name));
67 }
68