From 695527b1fd96ae50bb4bcdf42dee74e4383fa91f Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Mon, 10 Jul 2017 11:57:52 +0200 Subject: [PATCH] Wrap pid into ProcessId struct --- src/libstd/process.rs | 2 +- src/libstd/sys/redox/process.rs | 21 +++++++++++++++++-- src/libstd/sys/unix/process/mod.rs | 2 +- .../sys/unix/process/process_fuchsia.rs | 21 +++++++++++++++++-- src/libstd/sys/unix/process/process_unix.rs | 21 +++++++++++++++++-- src/libstd/sys/windows/process.rs | 21 +++++++++++++++++-- 6 files changed, 78 insertions(+), 10 deletions(-) diff --git a/src/libstd/process.rs b/src/libstd/process.rs index 7adfcc44ad008..a82102ac03510 100644 --- a/src/libstd/process.rs +++ b/src/libstd/process.rs @@ -907,7 +907,7 @@ impl Child { /// } /// ``` #[stable(feature = "process_id", since = "1.3.0")] - pub fn id(&self) -> u32 { + pub fn id(&self) -> imp::ProcessId { self.handle.id() } diff --git a/src/libstd/sys/redox/process.rs b/src/libstd/sys/redox/process.rs index 62d873d257d8f..c668f6d142888 100644 --- a/src/libstd/sys/redox/process.rs +++ b/src/libstd/sys/redox/process.rs @@ -9,6 +9,7 @@ // except according to those terms. use collections::hash_map::HashMap; +use core::ops::Deref; use env; use ffi::OsStr; use fmt; @@ -483,6 +484,22 @@ impl fmt::Display for ExitStatus { } } +/// Represents a process id. +/// +/// Returned by the [Child::id]() method. +#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Hash)] +#[stable(feature = "rust1", since = "1.21.0")] +pub struct ProcessId(pub usize); + +#[stable(feature = "rust1", since = "1.21.0")] +impl Deref for ProcessId { + type Target = usize; + + fn deref(&self) -> &usize { + &self.0 + } +} + /// The unique id of the process (this should never be negative). pub struct Process { pid: usize, @@ -490,8 +507,8 @@ pub struct Process { } impl Process { - pub fn id(&self) -> u32 { - self.pid as u32 + pub fn id(&self) -> ProcessId { + ProcessId(self.pid) } pub fn kill(&mut self) -> io::Result<()> { diff --git a/src/libstd/sys/unix/process/mod.rs b/src/libstd/sys/unix/process/mod.rs index b50384d8eee33..2fe782d80de44 100644 --- a/src/libstd/sys/unix/process/mod.rs +++ b/src/libstd/sys/unix/process/mod.rs @@ -9,7 +9,7 @@ // except according to those terms. pub use self::process_common::{Command, ExitStatus, Stdio, StdioPipes}; -pub use self::process_inner::Process; +pub use self::process_inner::{Process, ProcessId}; mod process_common; #[cfg(not(target_os = "fuchsia"))] diff --git a/src/libstd/sys/unix/process/process_fuchsia.rs b/src/libstd/sys/unix/process/process_fuchsia.rs index 7d583cb3dfce3..7971008072d2d 100644 --- a/src/libstd/sys/unix/process/process_fuchsia.rs +++ b/src/libstd/sys/unix/process/process_fuchsia.rs @@ -13,6 +13,7 @@ use libc; use mem; use ptr; +use core::ops::Deref; use sys::process::magenta::{Handle, mx_handle_t}; use sys::process::process_common::*; @@ -126,13 +127,29 @@ impl Command { // Processes //////////////////////////////////////////////////////////////////////////////// +/// Represents a process id. +/// +/// Returned by the [Child::id]() method. +#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Hash)] +#[stable(feature = "rust1", since = "1.21.0")] +pub struct ProcessId(pub i32); + +#[stable(feature = "rust1", since = "1.21.0")] +impl Deref for ProcessId { + type Target = i32; + + fn deref(&self) -> &i32 { + &self.0 + } +} + pub struct Process { handle: Handle, } impl Process { - pub fn id(&self) -> u32 { - self.handle.raw() as u32 + pub fn id(&self) -> ProcessId { + ProcessId(self.handle.raw()) } pub fn kill(&mut self) -> io::Result<()> { diff --git a/src/libstd/sys/unix/process/process_unix.rs b/src/libstd/sys/unix/process/process_unix.rs index edd322ca6fa07..22207e0bf692f 100644 --- a/src/libstd/sys/unix/process/process_unix.rs +++ b/src/libstd/sys/unix/process/process_unix.rs @@ -13,6 +13,7 @@ use libc::{self, c_int, gid_t, pid_t, uid_t}; use mem; use ptr; +use core::ops::Deref; use sys::cvt; use sys::process::process_common::*; @@ -224,6 +225,22 @@ impl Command { // Processes //////////////////////////////////////////////////////////////////////////////// +/// Represents a process id. +/// +/// Returned by the [Child::id]() method. +#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Hash)] +#[stable(feature = "rust1", since = "1.21.0")] +pub struct ProcessId(pub i32); + +#[stable(feature = "rust1", since = "1.21.0")] +impl Deref for ProcessId { + type Target = i32; + + fn deref(&self) -> &i32 { + &self.0 + } +} + /// The unique id of the process (this should never be negative). pub struct Process { pid: pid_t, @@ -231,8 +248,8 @@ pub struct Process { } impl Process { - pub fn id(&self) -> u32 { - self.pid as u32 + pub fn id(&self) -> ProcessId { + ProcessId(self.pid) } pub fn kill(&mut self) -> io::Result<()> { diff --git a/src/libstd/sys/windows/process.rs b/src/libstd/sys/windows/process.rs index 0d1766d5aec6d..5188b1e06aefa 100644 --- a/src/libstd/sys/windows/process.rs +++ b/src/libstd/sys/windows/process.rs @@ -11,6 +11,7 @@ use ascii::*; use collections::HashMap; use collections; +use core::ops::Deref; use env::split_paths; use env; use ffi::{OsString, OsStr}; @@ -322,6 +323,22 @@ impl From for Stdio { // Processes //////////////////////////////////////////////////////////////////////////////// +/// Represents a process id. +/// +/// Returned by the [Child::id]() method. +#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Hash)] +#[stable(feature = "rust1", since = "1.21.0")] +pub struct ProcessId(pub u32); + +#[stable(feature = "rust1", since = "1.21.0")] +impl Deref for ProcessId { + type Target = u32; + + fn deref(&self) -> &u32 { + &self.0 + } +} + /// A value representing a child process. /// /// The lifetime of this value is linked to the lifetime of the actual @@ -339,9 +356,9 @@ impl Process { Ok(()) } - pub fn id(&self) -> u32 { + pub fn id(&self) -> ProcessId { unsafe { - c::GetProcessId(self.handle.raw()) as u32 + ProcessId(c::GetProcessId(self.handle.raw())) } }