nix_user_chroot/
mkdtemp.rs1use nix::errno::Errno;
2use std::env;
3use std::ffi::OsString;
4use std::os::unix::ffi::OsStringExt;
5use std::path::PathBuf;
6
7mod ffi {
8 extern "C" {
9 pub fn mkdtemp(template: *mut libc::c_char) -> *mut libc::c_char;
10 }
11}
12
13pub fn mkdtemp(template: &str) -> nix::Result<PathBuf> {
14 let mut tmpdir = env::temp_dir();
15 tmpdir.push(template);
16 let mut buf = tmpdir.into_os_string().into_vec();
17 buf.push(b'\0'); let res = unsafe { ffi::mkdtemp(buf.as_mut_ptr() as *mut libc::c_char) };
20 if res.is_null() {
21 Err(nix::Error::Sys(Errno::last()))
22 } else {
23 buf.pop(); Ok(PathBuf::from(OsString::from_vec(buf)))
25 }
26}