Index: fusl/src/stdio/tmpfile.c |
diff --git a/fusl/src/stdio/tmpfile.c b/fusl/src/stdio/tmpfile.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..525090aa066d49cc20a4a762b17a4d54a3ec1b4f |
--- /dev/null |
+++ b/fusl/src/stdio/tmpfile.c |
@@ -0,0 +1,32 @@ |
+#include <stdio.h> |
+#include <fcntl.h> |
+#include "stdio_impl.h" |
+ |
+#define MAXTRIES 100 |
+ |
+char *__randname(char *); |
+ |
+FILE *tmpfile(void) |
+{ |
+ char s[] = "/tmp/tmpfile_XXXXXX"; |
+ int fd; |
+ FILE *f; |
+ int try; |
+ for (try=0; try<MAXTRIES; try++) { |
+ __randname(s+13); |
+ fd = sys_open(s, O_RDWR|O_CREAT|O_EXCL, 0600); |
+ if (fd >= 0) { |
+#ifdef SYS_unlink |
+ __syscall(SYS_unlink, s); |
+#else |
+ __syscall(SYS_unlinkat, AT_FDCWD, s, 0); |
+#endif |
+ f = __fdopen(fd, "w+"); |
+ if (!f) __syscall(SYS_close, fd); |
+ return f; |
+ } |
+ } |
+ return 0; |
+} |
+ |
+LFS64(tmpfile); |