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