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