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