From b5286af703e33bd36744fe4cd5bb24f71dbb524e Mon Sep 17 00:00:00 2001 From: Barosl Lee Date: Wed, 12 Nov 2014 02:50:44 +0900 Subject: [PATCH] Make os::setenv() and os::unsetenv() panic if an error occurs These functions can fail if: - EINVAL: The name is empty, or contains an '=' character - ENOMEM: Insufficient memory --- src/libstd/os.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/libstd/os.rs b/src/libstd/os.rs index cf22b8014ca..b898b9a2df4 100644 --- a/src/libstd/os.rs +++ b/src/libstd/os.rs @@ -422,7 +422,9 @@ fn _setenv(n: &str, v: &[u8]) { with_env_lock(|| { n.with_c_str(|nbuf| { v.with_c_str(|vbuf| { - libc::funcs::posix01::unistd::setenv(nbuf, vbuf, 1); + if libc::funcs::posix01::unistd::setenv(nbuf, vbuf, 1) != 0 { + panic!(IoError::last_error()); + } }) }) }) @@ -438,7 +440,9 @@ fn _setenv(n: &str, v: &[u8]) { unsafe { with_env_lock(|| { - libc::SetEnvironmentVariableW(n.as_ptr(), v.as_ptr()); + if libc::SetEnvironmentVariableW(n.as_ptr(), v.as_ptr()) == 0 { + panic!(IoError::last_error()); + } }) } } @@ -453,7 +457,9 @@ fn _unsetenv(n: &str) { unsafe { with_env_lock(|| { n.with_c_str(|nbuf| { - libc::funcs::posix01::unistd::unsetenv(nbuf); + if libc::funcs::posix01::unistd::unsetenv(nbuf) != 0 { + panic!(IoError::last_error()); + } }) }) } @@ -465,11 +471,14 @@ fn _unsetenv(n: &str) { n.push(0); unsafe { with_env_lock(|| { - libc::SetEnvironmentVariableW(n.as_ptr(), ptr::null()); + if libc::SetEnvironmentVariableW(n.as_ptr(), ptr::null()) == 0 { + panic!(IoError::last_error()); + } }) } } - _unsetenv(n); + + _unsetenv(n) } /// Parses input according to platform conventions for the `PATH` -- 2.44.0