1*219b2ee8SDavid du Colombier #include <stdlib.h> 2*219b2ee8SDavid du Colombier #include <sys/types.h> 3*219b2ee8SDavid du Colombier #include <sys/stat.h> 4*219b2ee8SDavid du Colombier #include <unistd.h> 5*219b2ee8SDavid du Colombier #include <string.h> 6*219b2ee8SDavid du Colombier #include <stdio.h> 7*219b2ee8SDavid du Colombier 8*219b2ee8SDavid du Colombier char* mktemp(char * template)9*219b2ee8SDavid du Colombiermktemp(char *template) 10*219b2ee8SDavid du Colombier { 11*219b2ee8SDavid du Colombier int n; 12*219b2ee8SDavid du Colombier long x; 13*219b2ee8SDavid du Colombier char *p; 14*219b2ee8SDavid du Colombier int c; 15*219b2ee8SDavid du Colombier struct stat stbuf; 16*219b2ee8SDavid du Colombier 17*219b2ee8SDavid du Colombier n = strlen(template); 18*219b2ee8SDavid du Colombier p = template+n-6; 19*219b2ee8SDavid du Colombier if (n < 6 || strcmp(p, "XXXXXX") != 0) { 20*219b2ee8SDavid du Colombier *template = 0; 21*219b2ee8SDavid du Colombier } else { 22*219b2ee8SDavid du Colombier x = getpid() % 100000; 23*219b2ee8SDavid du Colombier sprintf(p, "%05d", x); 24*219b2ee8SDavid du Colombier p += 5; 25*219b2ee8SDavid du Colombier for(c = 'a'; c <= 'z'; c++) { 26*219b2ee8SDavid du Colombier *p = c; 27*219b2ee8SDavid du Colombier if (stat(template, &stbuf) < 0) 28*219b2ee8SDavid du Colombier return template; 29*219b2ee8SDavid du Colombier } 30*219b2ee8SDavid du Colombier *template = 0; 31*219b2ee8SDavid du Colombier } 32*219b2ee8SDavid du Colombier return template; 33*219b2ee8SDavid du Colombier } 34