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,
}
}
}