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