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