in printf, use ferror macro rather than directly inspecting flags bit
[musl] / src / stdio / tmpfile.c
index a7d0000..2fa8803 100644 (file)
@@ -1,11 +1,10 @@
 #include <stdio.h>
 #include <fcntl.h>
+#include <stdlib.h>
 #include "stdio_impl.h"
 
 #define MAXTRIES 100
 
-char *__randname(char *);
-
 FILE *tmpfile(void)
 {
        char s[] = "/tmp/tmpfile_XXXXXX";
@@ -16,16 +15,15 @@ FILE *tmpfile(void)
                __randname(s+13);
                fd = sys_open(s, O_RDWR|O_CREAT|O_EXCL, 0600);
                if (fd >= 0) {
-                       f = __fdopen(fd, "w+");
 #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);