67130e1677e65b92fe13d4da3314eb4e8e864aa3
[musl] / src / temp / mktemp.c
1 #include <string.h>
2 #include <fcntl.h>
3 #include <unistd.h>
4 #include <errno.h>
5 #include <sys/stat.h>
6
7 char *__randname(char *);
8
9 char *mktemp(char *template)
10 {
11         size_t l = strlen(template);
12         int retries = 100;
13         struct stat st;
14
15         if (l < 6 || memcmp(template+l-6, "XXXXXX", 6)) {
16                 errno = EINVAL;
17                 *template = 0;
18                 return template;
19         }
20
21         do {
22                 __randname(template+l-6);
23                 if (stat(template, &st)) {
24                         if (errno != ENOENT) *template = 0;
25                         return template;
26                 }
27         } while (--retries);
28
29         *template = 0;
30         errno = EEXIST;
31         return template;
32 }