From 5f6309d87c448443176a893c9f80bd54929c1715 Mon Sep 17 00:00:00 2001
From: stratact <stratact1@gmail.com>
Date: Tue, 24 Jul 2018 23:13:49 -0700
Subject: [PATCH] Implement tmpfile (squashed)

---
 src/stdio/src/lib.rs | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/stdio/src/lib.rs b/src/stdio/src/lib.rs
index 664d4e1e..e02833ec 100644
--- a/src/stdio/src/lib.rs
+++ b/src/stdio/src/lib.rs
@@ -855,9 +855,28 @@ pub extern "C" fn tempnam(_dir: *const c_char, _pfx: *const c_char) -> *mut c_ch
     unimplemented!();
 }
 
-// #[no_mangle]
+#[no_mangle]
 pub extern "C" fn tmpfile() -> *mut FILE {
-    unimplemented!();
+    extern "C" {
+        fn mkstemp(name: *mut c_char) -> c_int;
+    }
+
+    let mut file_name = *b"/tmp/tmpfileXXXXXX";
+    let file_name = (&mut file_name).as_mut_ptr() as *mut c_char;
+    let fd = unsafe { mkstemp(file_name) };
+
+    if fd < 0 {
+        return ptr::null_mut();
+    }
+
+    let fp = fdopen(fd, b"w+".as_ptr() as *const i8);
+    platform::unlink(file_name);
+
+    if fp == ptr::null_mut() {
+        platform::close(fd);
+    }
+
+    fp
 }
 
 // #[no_mangle]
-- 
GitLab