From e1b752b2a1bea9c05e89e52632f2f87ee9777062 Mon Sep 17 00:00:00 2001 From: Theodore DeRego Date: Thu, 1 Dec 2016 12:01:07 -0800 Subject: [PATCH] std::process fuchsia support cleanup --- src/libstd/sys/unix/mod.rs | 20 ------------------- src/libstd/sys/unix/{ => process}/magenta.rs | 15 +++++++++++++- src/libstd/sys/unix/process/mod.rs | 2 ++ src/libstd/sys/unix/process/process_common.rs | 6 +++--- .../sys/unix/process/process_fuchsia.rs | 17 +++++++--------- 5 files changed, 26 insertions(+), 34 deletions(-) rename src/libstd/sys/unix/{ => process}/magenta.rs (93%) diff --git a/src/libstd/sys/unix/mod.rs b/src/libstd/sys/unix/mod.rs index 8fe55af51d54..fd7dc17cccd8 100644 --- a/src/libstd/sys/unix/mod.rs +++ b/src/libstd/sys/unix/mod.rs @@ -13,11 +13,6 @@ use io::{self, ErrorKind}; use libc; -#[cfg(target_os = "fuchsia")] -use convert::TryInto; -#[cfg(target_os = "fuchsia")] -pub use self::magenta::mx_status_t; - #[cfg(target_os = "android")] pub use os::android as platform; #[cfg(target_os = "bitrig")] pub use os::bitrig as platform; #[cfg(target_os = "dragonfly")] pub use os::dragonfly as platform; @@ -46,8 +41,6 @@ pub mod ext; pub mod fast_thread_local; pub mod fd; pub mod fs; -#[cfg(target_os = "fuchsia")] -pub mod magenta; pub mod memchr; pub mod mutex; pub mod net; @@ -171,19 +164,6 @@ pub fn cvt_r(mut f: F) -> io::Result } } -#[cfg(target_os = "fuchsia")] -pub fn mx_cvt(t: T) -> io::Result where T: TryInto+Copy { - if let Ok(status) = TryInto::try_into(t) { - if status < 0 { - Err(io::Error::from_raw_os_error(status)) - } else { - Ok(t) - } - } else { - Err(io::Error::last_os_error()) - } -} - // On Unix-like platforms, libc::abort will unregister signal handlers // including the SIGABRT handler, preventing the abort from being blocked, and // fclose streams, with the side effect of flushing them so libc bufferred diff --git a/src/libstd/sys/unix/magenta.rs b/src/libstd/sys/unix/process/magenta.rs similarity index 93% rename from src/libstd/sys/unix/magenta.rs rename to src/libstd/sys/unix/process/magenta.rs index 20e077ccaca8..319fbce35cd7 100644 --- a/src/libstd/sys/unix/magenta.rs +++ b/src/libstd/sys/unix/process/magenta.rs @@ -10,6 +10,8 @@ #![allow(non_camel_case_types)] +use convert::TryInto; +use io; use os::raw::c_char; use u64; @@ -42,6 +44,18 @@ pub const MX_INFO_PROCESS : mx_object_info_topic_t = 3; pub const MX_HND_TYPE_JOB: u32 = 6; +pub fn mx_cvt(t: T) -> io::Result where T: TryInto+Copy { + if let Ok(status) = TryInto::try_into(t) { + if status < 0 { + Err(io::Error::from_raw_os_error(status)) + } else { + Ok(t) + } + } else { + Err(io::Error::last_os_error()) + } +} + // Safe wrapper around mx_handle_t pub struct Handle { raw: mx_handle_t, @@ -61,7 +75,6 @@ impl Handle { impl Drop for Handle { fn drop(&mut self) { - use sys::mx_cvt; unsafe { mx_cvt(mx_handle_close(self.raw)).expect("Failed to close mx_handle_t"); } } } diff --git a/src/libstd/sys/unix/process/mod.rs b/src/libstd/sys/unix/process/mod.rs index 82c3971ee406..b50384d8eee3 100644 --- a/src/libstd/sys/unix/process/mod.rs +++ b/src/libstd/sys/unix/process/mod.rs @@ -18,3 +18,5 @@ mod process_inner; #[cfg(target_os = "fuchsia")] #[path = "process_fuchsia.rs"] mod process_inner; +#[cfg(target_os = "fuchsia")] +mod magenta; diff --git a/src/libstd/sys/unix/process/process_common.rs b/src/libstd/sys/unix/process/process_common.rs index 24b8b61edea2..3497b266340e 100644 --- a/src/libstd/sys/unix/process/process_common.rs +++ b/src/libstd/sys/unix/process/process_common.rs @@ -203,15 +203,15 @@ impl Command { &self.argv } - #[cfg(not(target_os="fuchsia"))] + #[allow(dead_code)] pub fn get_cwd(&self) -> &Option { &self.cwd } - #[cfg(not(target_os="fuchsia"))] + #[allow(dead_code)] pub fn get_uid(&self) -> Option { self.uid } - #[cfg(not(target_os="fuchsia"))] + #[allow(dead_code)] pub fn get_gid(&self) -> Option { self.gid } diff --git a/src/libstd/sys/unix/process/process_fuchsia.rs b/src/libstd/sys/unix/process/process_fuchsia.rs index 77340664b6a1..f0a42b127998 100644 --- a/src/libstd/sys/unix/process/process_fuchsia.rs +++ b/src/libstd/sys/unix/process/process_fuchsia.rs @@ -13,8 +13,7 @@ use libc; use mem; use ptr; -use sys::mx_cvt; -use sys::magenta::{Handle, launchpad_t, mx_handle_t}; +use sys::process::magenta::{Handle, launchpad_t, mx_handle_t}; use sys::process::process_common::*; //////////////////////////////////////////////////////////////////////////////// @@ -53,7 +52,7 @@ impl Command { unsafe fn do_exec(&mut self, stdio: ChildPipes) -> io::Result<(*mut launchpad_t, mx_handle_t)> { - use sys::magenta::*; + use sys::process::magenta::*; let job_handle = mxio_get_startup_handle(mx_hnd_info(MX_HND_TYPE_JOB, 0)); let envp = match *self.get_envp() { @@ -72,11 +71,9 @@ impl Command { // Duplicate the job handle let mut job_copy: mx_handle_t = MX_HANDLE_INVALID; - mx_cvt(mx_handle_duplicate(job_handle, MX_RIGHT_SAME_RIGHTS, - &mut job_copy as *mut mx_handle_t))?; + mx_cvt(mx_handle_duplicate(job_handle, MX_RIGHT_SAME_RIGHTS, &mut job_copy))?; // Create a launchpad - mx_cvt(launchpad_create(job_copy, self.get_argv()[0], - &mut launchpad as *mut *mut launchpad_t))?; + mx_cvt(launchpad_create(job_copy, self.get_argv()[0], &mut launchpad))?; // Set the process argv mx_cvt(launchpad_arguments(launchpad, self.get_argv().len() as i32 - 1, self.get_argv().as_ptr()))?; @@ -138,7 +135,7 @@ impl Process { } pub fn kill(&mut self) -> io::Result<()> { - use sys::magenta::*; + use sys::process::magenta::*; unsafe { mx_cvt(mx_task_kill(self.handle.raw()))?; } @@ -147,7 +144,7 @@ impl Process { pub fn wait(&mut self) -> io::Result { use default::Default; - use sys::magenta::*; + use sys::process::magenta::*; let mut proc_info: mx_info_process_t = Default::default(); let mut actual: mx_size_t = 0; @@ -171,7 +168,7 @@ impl Process { impl Drop for Process { fn drop(&mut self) { - use sys::magenta::launchpad_destroy; + use sys::process::magenta::launchpad_destroy; unsafe { launchpad_destroy(self.launchpad); } } }