6c2c16ef2e8027e4f30a3d90be1c79f3502c73f9
[musl] / src / temp / mkdtemp.c
1 #include <string.h>
2 #include <stdlib.h>
3 #include <errno.h>
4 #include <sys/stat.h>
5
6 char *__randname(char *);
7
8 char *mkdtemp(char *template)
9 {
10         size_t l = strlen(template);
11         int retries = 100;
12
13         if (l<6 || memcmp(template+l-6, "XXXXXX", 6)) {
14                 errno = EINVAL;
15                 return 0;
16         }
17
18         do {
19                 __randname(template+l-6);
20                 if (!mkdir(template, 0700)) return template;
21         } while (--retries && errno == EEXIST);
22
23         memcpy(template+l-6, "XXXXXX", 6);
24         return 0;
25 }