|
|
1.1 root 1: /*
2: * Standard I/O Library.
3: * Create a unique name for a temporary file ala SYS V.
4: * Note: this differs from the real SYS V in that we don't limit the
5: * length of the prefix to be five characters for portability reasons.
6: */
7:
8: #include <stdio.h>
9:
10: #ifdef GEMDOS
11: #define FSPATHSEP '\\'
12: #ifndef P_tmpdir
13: #define P_tmpdir "\\tmp"
14: #endif
15: #endif
16: #ifdef DOS
17: #define FSPATHSEP '\\'
18: #ifndef P_tmpdir
19: #define P_tmpdir "\\tmp"
20: #endif
21: #endif
22: #ifndef FSPATHSEP
23: #define FSPATHSEP '/'
24: #endif
25: #ifndef P_tmpdir
26: #define P_tmpdir "/tmp"
27: #endif
28: #ifndef L_tmpnam
29: #define L_tmpnam 64
30: #endif
31: #define TEMPLATE "XXXXXX"
32: #define PREFIX "t"
33:
34: char *
35: tempnam(dir, pfx)
36: char *dir, *pfx;
37: {
38: register char *tbp, *stbp;
39: extern char *mktemp(), *strcpy();
40: extern char *malloc(), *getenv();
41:
42: if ((stbp = malloc(L_tmpnam)) != NULL) {
43: if (dir == NULL && (dir = getenv("TMPDIR")) == NULL)
44: dir = P_tmpdir;
45: if (pfx == NULL)
46: pfx = PREFIX;
47: for (;;) {
48: tbp = stbp;
49: strcpy(tbp, dir);
50: while (*tbp != 0)
51: ++tbp;
52: if (tbp > stbp && tbp[-1] != FSPATHSEP)
53: *tbp++ = FSPATHSEP;
54: strcpy(tbp, pfx);
55: while (*tbp != 0)
56: ++tbp;
57: strcpy(tbp, TEMPLATE);
58: mktemp(stbp);
59: if (access(stbp, 0) == -1)
60: break;
61: }
62: }
63: return (stbp);
64: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.