Make getenv
return an Option instead of a Result
This commit is contained in:
parent
d26e01e9df
commit
a12107afaa
7 changed files with 20 additions and 36 deletions
|
@ -244,7 +244,7 @@ pub fn var_os<K: AsRef<OsStr>>(key: K) -> Option<OsString> {
|
|||
}
|
||||
|
||||
fn _var_os(key: &OsStr) -> Option<OsString> {
|
||||
os_imp::getenv(key).ok()?
|
||||
os_imp::getenv(key)
|
||||
}
|
||||
|
||||
/// The error type for operations interacting with environment variables.
|
||||
|
|
|
@ -140,13 +140,8 @@ pub fn env() -> Env {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn getenv(k: &OsStr) -> io::Result<Option<OsString>> {
|
||||
unsafe {
|
||||
match ENV.as_ref().unwrap().lock().unwrap().get_mut(k) {
|
||||
Some(value) => Ok(Some(value.clone())),
|
||||
None => Ok(None),
|
||||
}
|
||||
}
|
||||
pub fn getenv(k: &OsStr) -> Option<OsString> {
|
||||
unsafe { ENV.as_ref().unwrap().lock().unwrap().get_mut(k).cloned() }
|
||||
}
|
||||
|
||||
pub fn setenv(k: &OsStr, v: &OsStr) -> io::Result<()> {
|
||||
|
|
|
@ -106,8 +106,8 @@ pub fn env() -> Env {
|
|||
get_env_store().map(|env| clone_to_vec(&env.lock().unwrap())).unwrap_or_default().into_iter()
|
||||
}
|
||||
|
||||
pub fn getenv(k: &OsStr) -> io::Result<Option<OsString>> {
|
||||
Ok(get_env_store().and_then(|s| s.lock().unwrap().get(k).cloned()))
|
||||
pub fn getenv(k: &OsStr) -> Option<OsString> {
|
||||
get_env_store().and_then(|s| s.lock().unwrap().get(k).cloned())
|
||||
}
|
||||
|
||||
pub fn setenv(k: &OsStr, v: &OsStr) -> io::Result<()> {
|
||||
|
|
|
@ -532,19 +532,18 @@ pub fn env() -> Env {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn getenv(k: &OsStr) -> io::Result<Option<OsString>> {
|
||||
pub fn getenv(k: &OsStr) -> Option<OsString> {
|
||||
// environment variables with a nul byte can't be set, so their value is
|
||||
// always None as well
|
||||
let k = CString::new(k.as_bytes())?;
|
||||
let k = CString::new(k.as_bytes()).ok()?;
|
||||
unsafe {
|
||||
let _guard = env_read_lock();
|
||||
let s = libc::getenv(k.as_ptr()) as *const libc::c_char;
|
||||
let ret = if s.is_null() {
|
||||
if s.is_null() {
|
||||
None
|
||||
} else {
|
||||
Some(OsStringExt::from_vec(CStr::from_ptr(s).to_bytes().to_vec()))
|
||||
};
|
||||
Ok(ret)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -76,8 +76,8 @@ pub fn env() -> Env {
|
|||
panic!("not supported on this platform")
|
||||
}
|
||||
|
||||
pub fn getenv(_: &OsStr) -> io::Result<Option<OsString>> {
|
||||
Ok(None)
|
||||
pub fn getenv(_: &OsStr) -> Option<OsString> {
|
||||
None
|
||||
}
|
||||
|
||||
pub fn setenv(_: &OsStr, _: &OsStr) -> io::Result<()> {
|
||||
|
|
|
@ -175,17 +175,16 @@ pub fn env() -> Env {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn getenv(k: &OsStr) -> io::Result<Option<OsString>> {
|
||||
let k = CString::new(k.as_bytes())?;
|
||||
pub fn getenv(k: &OsStr) -> Option<OsString> {
|
||||
let k = CString::new(k.as_bytes()).ok()?;
|
||||
unsafe {
|
||||
let _guard = env_lock();
|
||||
let s = libc::getenv(k.as_ptr()) as *const libc::c_char;
|
||||
let ret = if s.is_null() {
|
||||
if s.is_null() {
|
||||
None
|
||||
} else {
|
||||
Some(OsStringExt::from_vec(CStr::from_ptr(s).to_bytes().to_vec()))
|
||||
};
|
||||
Ok(ret)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -253,22 +253,13 @@ pub fn chdir(p: &path::Path) -> io::Result<()> {
|
|||
cvt(unsafe { c::SetCurrentDirectoryW(p.as_ptr()) }).map(drop)
|
||||
}
|
||||
|
||||
pub fn getenv(k: &OsStr) -> io::Result<Option<OsString>> {
|
||||
let k = to_u16s(k)?;
|
||||
let res = super::fill_utf16_buf(
|
||||
pub fn getenv(k: &OsStr) -> Option<OsString> {
|
||||
let k = to_u16s(k).ok()?;
|
||||
super::fill_utf16_buf(
|
||||
|buf, sz| unsafe { c::GetEnvironmentVariableW(k.as_ptr(), buf, sz) },
|
||||
|buf| OsStringExt::from_wide(buf),
|
||||
);
|
||||
match res {
|
||||
Ok(value) => Ok(Some(value)),
|
||||
Err(e) => {
|
||||
if e.raw_os_error() == Some(c::ERROR_ENVVAR_NOT_FOUND as i32) {
|
||||
Ok(None)
|
||||
} else {
|
||||
Err(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
.ok()
|
||||
}
|
||||
|
||||
pub fn setenv(k: &OsStr, v: &OsStr) -> io::Result<()> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue