BSD 4_3_Reno release
[unix-history] / usr / src / lib / libc / gen / tmpnam.c
CommitLineData
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 21static 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
29FILE *
30tmpfile()
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
43char *
44tmpnam(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
55char *
56tempnam(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}