simplify home_dir by removing unnecessary getpwuid_r wrapper
This commit is contained in:
parent
ebf70a9a20
commit
5789539311
@ -483,30 +483,21 @@ pub fn home_dir() -> Option<PathBuf> {
|
||||
target_os = "nacl",
|
||||
target_os = "emscripten")))]
|
||||
unsafe fn fallback() -> Option<OsString> {
|
||||
unsafe fn getpwduid_r(me: libc::uid_t, passwd: &mut libc::passwd,
|
||||
buf: &mut Vec<c_char>) -> Option<()> {
|
||||
let mut result = ptr::null_mut();
|
||||
match libc::getpwuid_r(me, passwd, buf.as_mut_ptr(),
|
||||
buf.capacity(),
|
||||
&mut result) {
|
||||
0 if !result.is_null() => Some(()),
|
||||
_ => None
|
||||
}
|
||||
}
|
||||
|
||||
let amt = match libc::sysconf(libc::_SC_GETPW_R_SIZE_MAX) {
|
||||
n if n < 0 => 512 as usize,
|
||||
n => n as usize,
|
||||
};
|
||||
let mut buf = Vec::with_capacity(amt);
|
||||
let mut passwd: libc::passwd = mem::zeroed();
|
||||
|
||||
if getpwduid_r(libc::getuid(), &mut passwd, &mut buf).is_some() {
|
||||
let ptr = passwd.pw_dir as *const _;
|
||||
let bytes = CStr::from_ptr(ptr).to_bytes().to_vec();
|
||||
Some(OsStringExt::from_vec(bytes))
|
||||
} else {
|
||||
None
|
||||
let mut result = ptr::null_mut();
|
||||
match libc::getpwuid_r(libc::getuid(), &mut passwd, buf.as_mut_ptr(),
|
||||
buf.capacity(), &mut result) {
|
||||
0 if !result.is_null() => {
|
||||
let ptr = passwd.pw_dir as *const _;
|
||||
let bytes = CStr::from_ptr(ptr).to_bytes().to_vec();
|
||||
Some(OsStringExt::from_vec(bytes))
|
||||
},
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user