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