xref: /minix3/lib/libc/stdio/tmpnam.c (revision b706112487045bc1efd01e3d4d53d9a6b04a0bca)
1 /*
2  * tmpnam.c - create a unique filename
3  */
4 /* $Header$ */
5 
6 #if	defined(_POSIX_SOURCE)
7 #include	<sys/types.h>
8 #endif
9 #include	<stdio.h>
10 #include	<string.h>
11 #include	"loc_incl.h"
12 
13 pid_t _getpid(void);
14 
15 char *
16 tmpnam(char *s) {
17 	static char name_buffer[L_tmpnam] = "/tmp/tmp.";
18 	static unsigned long count = 0;
19 	static char *name = NULL;
20 
21 	if (!name) {
22 		name = name_buffer + strlen(name_buffer);
23 		name = _i_compute((unsigned long)_getpid(), 10, name, 5);
24 		*name++ = '.';
25 		*name = '\0';
26 	}
27 	if (++count > TMP_MAX) count = 1;	/* wrap-around */
28 	*_i_compute(count, 10, name, 3) = '\0';
29 	if (s) return strcpy(s, name_buffer);
30 	else return name_buffer;
31 }
32