all printf variants: fix argument type handling for %c and %lc
[musl] / src / stdio / tmpfile.c
index 18c232f..2fa8803 100644 (file)
@@ -1,27 +1,29 @@
 #include <stdio.h>
 #include <fcntl.h>
-#include <unistd.h>
+#include <stdlib.h>
 #include "stdio_impl.h"
 
 #define MAXTRIES 100
 
 FILE *tmpfile(void)
 {
-       char buf[L_tmpnam], *s;
+       char s[] = "/tmp/tmpfile_XXXXXX";
        int fd;
        FILE *f;
        int try;
        for (try=0; try<MAXTRIES; try++) {
-               s = tmpnam(buf);
-               if (!s) return 0;
-               fd = syscall(SYS_open, s, O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0600);
+               __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+");
-                       syscall(SYS_unlink, s);
+                       if (!f) __syscall(SYS_close, fd);
                        return f;
                }
        }
        return 0;
 }
-
-LFS64(tmpfile);