Rollup merge of #128433 - hermit-os:hermit-unsafe_op_in_unsafe_fn, r=… · model-checking/verify-rust-std@ab00ae6 (original) (raw)

`@@ -68,21 +68,21 @@ pub fn current_exe() -> io::Result {

`

68

68

`unsupported()

`

69

69

`}

`

70

70

``

71

``

`-

static mut ENV: Option<Mutex<HashMap<OsString, OsString>>> = None;

`

``

71

`+

static ENV: Mutex<Option<HashMap<OsString, OsString>>> = Mutex::new(None);

`

72

72

``

73

73

`pub fn init_environment(env: *const *const i8) {

`

74

``

`-

unsafe {

`

75

``

`-

ENV = Some(Mutex::new(HashMap::new()));

`

``

74

`+

let mut guard = ENV.lock().unwrap();

`

``

75

`+

let map = guard.insert(HashMap::new());

`

76

76

``

77

``

`-

if env.is_null() {

`

78

``

`-

return;

`

79

``

`-

}

`

``

77

`+

if env.is_null() {

`

``

78

`+

return;

`

``

79

`+

}

`

80

80

``

81

``

`-

let mut guard = ENV.as_ref().unwrap().lock().unwrap();

`

``

81

`+

unsafe {

`

82

82

`let mut environ = env;

`

83

83

`while !(*environ).is_null() {

`

84

84

`if let Some((key, value)) = parse(CStr::from_ptr(*environ).to_bytes()) {

`

85

``

`-

guard.insert(key, value);

`

``

85

`+

map.insert(key, value);

`

86

86

`}

`

87

87

` environ = environ.add(1);

`

88

88

`}

`

`@@ -154,30 +154,26 @@ impl Iterator for Env {

`

154

154

`/// Returns a vector of (variable, value) byte-vector pairs for all the

`

155

155

`/// environment variables of the current process.

`

156

156

`pub fn env() -> Env {

`

157

``

`-

unsafe {

`

158

``

`-

let guard = ENV.as_ref().unwrap().lock().unwrap();

`

159

``

`-

let mut result = Vec::new();

`

``

157

`+

let guard = ENV.lock().unwrap();

`

``

158

`+

let env = guard.as_ref().unwrap();

`

160

159

``

161

``

`-

for (key, value) in guard.iter() {

`

162

``

`-

result.push((key.clone(), value.clone()));

`

163

``

`-

}

`

``

160

`+

let result = env.iter().map(|(key, value)| (key.clone(), value.clone())).collect::<Vec<_>>();

`

164

161

``

165

``

`-

return Env { iter: result.into_iter() };

`

166

``

`-

}

`

``

162

`+

Env { iter: result.into_iter() }

`

167

163

`}

`

168

164

``

169

165

`pub fn getenv(k: &OsStr) -> Option {

`

170

``

`-

unsafe { ENV.as_ref().unwrap().lock().unwrap().get_mut(k).cloned() }

`

``

166

`+

ENV.lock().unwrap().as_ref().unwrap().get(k).cloned()

`

171

167

`}

`

172

168

``

173

169

`pub unsafe fn setenv(k: &OsStr, v: &OsStr) -> io::Result<()> {

`

174

170

`let (k, v) = (k.to_owned(), v.to_owned());

`

175

``

`-

ENV.as_ref().unwrap().lock().unwrap().insert(k, v);

`

``

171

`+

ENV.lock().unwrap().as_mut().unwrap().insert(k, v);

`

176

172

`Ok(())

`

177

173

`}

`

178

174

``

179

175

`pub unsafe fn unsetenv(k: &OsStr) -> io::Result<()> {

`

180

``

`-

ENV.as_ref().unwrap().lock().unwrap().remove(k);

`

``

176

`+

ENV.lock().unwrap().as_mut().unwrap().remove(k);

`

181

177

`Ok(())

`

182

178

`}

`

183

179

``

`@@ -190,9 +186,7 @@ pub fn home_dir() -> Option {

`

190

186

`}

`

191

187

``

192

188

`pub fn exit(code: i32) -> ! {

`

193

``

`-

unsafe {

`

194

``

`-

hermit_abi::exit(code);

`

195

``

`-

}

`

``

189

`+

unsafe { hermit_abi::exit(code) }

`

196

190

`}

`

197

191

``

198

192

`pub fn getpid() -> u32 {

`