1#include <errno.h> 2#include <fcntl.h> 3#include <stdio.h> 4#include <string.h> 5#include <sys/stat.h> 6 7#define MAXTRIES 100 8 9char* __randname(char*); 10 11char* tmpnam(char* buf) { 12 static char internal[L_tmpnam]; 13 char s[] = "/tmp/tmpnam_XXXXXX"; 14 int try 15 ; 16 int r; 17 for (try = 0; try < MAXTRIES; try ++) { 18 __randname(s + 12); 19 r = lstat(s, &(struct stat){}); 20 if (r == 0) 21 return strcpy(buf ? buf : internal, s); 22 } 23 return 0; 24} 25