| #include <string.h> | |
| #include <stdlib.h> | |
| #include <errno.h> | |
| #include <sys/stat.h> | |
| char *__randname(char *); | |
| char *mkdtemp(char *template) | |
| { | |
| size_t l = strlen(template); | |
| int retries = 100; | |
| if (l<6 || memcmp(template+l-6, "XXXXXX", 6)) { | |
| errno = EINVAL; | |
| return 0; | |
| } | |
| do { | |
| __randname(template+l-6); | |
| if (!mkdir(template, 0700)) return template; | |
| } while (--retries && errno == EEXIST); | |
| memcpy(template+l-6, "XXXXXX", 6); | |
| return 0; | |
| } |