From 5f6309d87c448443176a893c9f80bd54929c1715 Mon Sep 17 00:00:00 2001 From: stratact Date: Tue, 24 Jul 2018 23:13:49 -0700 Subject: [PATCH 1/2] 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 664d4e1e32..e02833ec4e 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] From 42811717dad9ce0faa6d88416cc90712f584f985 Mon Sep 17 00:00:00 2001 From: stratact Date: Tue, 24 Jul 2018 23:22:00 -0700 Subject: [PATCH 2/2] Remove unneeded reference --- src/stdio/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stdio/src/lib.rs b/src/stdio/src/lib.rs index e02833ec4e..c2af6d3b61 100644 --- a/src/stdio/src/lib.rs +++ b/src/stdio/src/lib.rs @@ -862,7 +862,7 @@ pub extern "C" fn tmpfile() -> *mut FILE { } let mut file_name = *b"/tmp/tmpfileXXXXXX"; - let file_name = (&mut file_name).as_mut_ptr() as *mut c_char; + let file_name = file_name.as_mut_ptr() as *mut c_char; let fd = unsafe { mkstemp(file_name) }; if fd < 0 {