From 1ff22a8fc392f9f01aca5cc3a9add09309e903c5 Mon Sep 17 00:00:00 2001 From: Cyril Plisko Date: Sun, 8 Nov 2020 13:45:02 +0200 Subject: utils cleanup --- src/utils.rs | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/utils.rs b/src/utils.rs index 493ab47..4ef90c4 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,3 +1,4 @@ +use std::env; use std::ffi::{CString, OsString}; use std::os::unix::ffi::OsStringExt; use std::ptr; @@ -23,8 +24,11 @@ pub(crate) fn execvp(cmd: &OsString) { .into_iter() .map(osstring2cstring) .collect::>(); - let mut args = cstrings.iter().map(|c| c.as_ptr()).collect::>(); - args.push(ptr::null()); + let args = cstrings + .iter() + .map(|c| c.as_ptr()) + .chain(Some(ptr::null())) + .collect::>(); errno::set_errno(errno::Errno(0)); unsafe { libc::execvp(args[0], args.as_ptr()) }; } @@ -34,23 +38,36 @@ pub(crate) fn execvpe(cmd: &OsString, envs: &[OsString]) { .into_iter() .map(osstring2cstring) .collect::>(); - let mut args = cstrings.iter().map(|c| c.as_ptr()).collect::>(); - args.push(ptr::null()); + let args = cstrings + .iter() + .map(|c| c.as_ptr()) + .chain(Some(ptr::null())) + .collect::>(); - let mut cstrings_envs = envs - .into_iter() + let mut envs = envs + .iter() .map(|s| osstring2cstring(s.clone())) .collect::>(); - for (mut k, v) in std::env::vars_os() { + for (mut k, v) in env::vars_os() { k.push("="); k.push(v); - cstrings_envs.push(osstring2cstring(k)); + envs.push(osstring2cstring(k)); } - let mut envs = cstrings_envs.iter().map(|c| c.as_ptr()).collect::>(); - envs.push(ptr::null()); + let envs = envs + .iter() + .map(|c| c.as_ptr()) + .chain(Some(ptr::null())) + .collect::>(); errno::set_errno(errno::Errno(0)); - unsafe { libc::execvpe(args[0], args.as_ptr(), envs.as_ptr()) }; + #[cfg(target_os = "macos")] + unsafe { + libc::execve(args[0], args.as_ptr(), envs.as_ptr()) + }; + #[cfg(not(target_os = "macos"))] + unsafe { + libc::execvpe(args[0], args.as_ptr(), envs.as_ptr()) + }; } pub(crate) fn dup2(fd1: i32, fd2: i32) { -- cgit v1.2.3