xref: /plan9/sys/src/libc/port/mktemp.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier char*
mktemp(char * as)53e12c5d1SDavid du Colombier mktemp(char *as)
63e12c5d1SDavid du Colombier {
73e12c5d1SDavid du Colombier 	char *s;
83e12c5d1SDavid du Colombier 	unsigned pid;
93e12c5d1SDavid du Colombier 	int i;
10*9a747e4fSDavid du Colombier 	char err[ERRMAX];
113e12c5d1SDavid du Colombier 
123e12c5d1SDavid du Colombier 	pid = getpid();
133e12c5d1SDavid du Colombier 	s = as;
143e12c5d1SDavid du Colombier 	while(*s++)
153e12c5d1SDavid du Colombier 		;
163e12c5d1SDavid du Colombier 	s--;
173e12c5d1SDavid du Colombier 	while(*--s == 'X') {
183e12c5d1SDavid du Colombier 		*s = pid % 10 + '0';
193e12c5d1SDavid du Colombier 		pid = pid/10;
203e12c5d1SDavid du Colombier 	}
213e12c5d1SDavid du Colombier 	s++;
223e12c5d1SDavid du Colombier 	i = 'a';
233e12c5d1SDavid du Colombier 	while(access(as, 0) != -1) {
243e12c5d1SDavid du Colombier 		if (i == 'z')
253e12c5d1SDavid du Colombier 			return "/";
263e12c5d1SDavid du Colombier 		*s = i++;
273e12c5d1SDavid du Colombier 	}
28*9a747e4fSDavid du Colombier 	err[0] = '\0';
29*9a747e4fSDavid du Colombier 	errstr(err, sizeof err);	/* clear the error */
303e12c5d1SDavid du Colombier 	return as;
313e12c5d1SDavid du Colombier }
32