#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; }