major improvements to temp file name generator
[musl] / src / temp / mkdtemp.c
1 #include <string.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <fcntl.h>
5 #include <unistd.h>
6 #include <limits.h>
7 #include <errno.h>
8 #include <sys/stat.h>
9 #include "libc.h"
10
11 char *__mktemp(char *);
12
13 char *mkdtemp(char *template)
14 {
15         int retries = 100;
16         while (retries--) {
17                 if (!__mktemp(template)) return 0;
18                 if (!mkdir(template, 0700)) return template;
19                 if (errno != EEXIST) return 0;
20                 /* this is safe because mktemp verified
21                  * that we have a valid template string */
22                 strcpy(template+strlen(template)-6, "XXXXXX");
23         }
24         return 0;
25 }