|
|
1.1 root 1: /*
2: * Produce a unique filename by replacing
3: * the trailing 6 X's on the user's input string
4: * with process id and a unique letter.
5: * (It is assumed, but not checked, that the X's are present.)
6: * Revised by Michael Griffin, 7-5-84. Avoids control characters in
7: * generator. Repeats after 91 invocations by the same process.
8: */
9:
10: static char generator = 'a';
11:
12: char *
13: mktemp(template)
14: char *template;
15: {
16: register char *p;
17: register i, pid;
18:
19: for (p = template; *p; p++)
20: ;
21: switch (generator) {
22: case '~':
23: *--p = generator;
24: generator = 'A';
25: break;
26: case '_':
27: *--p = generator;
28: generator = '!';
29: break;
30: case '*':
31: *--p = ++generator;
32: generator++;
33: break;
34: case '?':
35: *--p = (generator = '@');
36: break;
37: case '@':
38: generator = 'a';
39: *--p = generator++;
40: break;
41: default:
42: *--p = generator++;
43: }
44: pid = getpid();
45: i = 5; do {
46: *--p = pid%10 + '0';
47: pid /= 10;
48: } while (--i);
49: return (template);
50: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.