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