Index: fusl/src/stdio/tmpnam.c |
diff --git a/fusl/src/stdio/tmpnam.c b/fusl/src/stdio/tmpnam.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..449eb9b0708c2a5d295db76f1e944059f6789f9b |
--- /dev/null |
+++ b/fusl/src/stdio/tmpnam.c |
@@ -0,0 +1,29 @@ |
+#include <stdio.h> |
+#include <fcntl.h> |
+#include <errno.h> |
+#include <sys/stat.h> |
+#include <string.h> |
+#include "syscall.h" |
+ |
+#define MAXTRIES 100 |
+ |
+char *__randname(char *); |
+ |
+char *tmpnam(char *buf) |
+{ |
+ static char internal[L_tmpnam]; |
+ char s[] = "/tmp/tmpnam_XXXXXX"; |
+ int try; |
+ int r; |
+ for (try=0; try<MAXTRIES; try++) { |
+ __randname(s+12); |
+#ifdef SYS_lstat |
+ r = __syscall(SYS_lstat, s, &(struct stat){0}); |
+#else |
+ r = __syscall(SYS_fstatat, AT_FDCWD, s, |
+ &(struct stat){0}, AT_SYMLINK_NOFOLLOW); |
+#endif |
+ if (r == -ENOENT) return strcpy(buf ? buf : internal, s); |
+ } |
+ return 0; |
+} |