summaryrefslogtreecommitdiffstats
path: root/vendor/rustix/src/process/id.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/rustix/src/process/id.rs')
-rw-r--r--vendor/rustix/src/process/id.rs178
1 files changed, 13 insertions, 165 deletions
diff --git a/vendor/rustix/src/process/id.rs b/vendor/rustix/src/process/id.rs
index 687596a31..4cacf1ab0 100644
--- a/vendor/rustix/src/process/id.rs
+++ b/vendor/rustix/src/process/id.rs
@@ -9,163 +9,28 @@
use crate::{backend, io};
use alloc::vec::Vec;
-#[cfg(any(target_os = "android", target_os = "linux"))]
+#[cfg(linux_kernel)]
use backend::process::types::RawCpuid;
/// The raw integer value of a Unix user ID.
-pub use backend::process::types::RawUid;
+pub use crate::ugid::RawUid;
/// The raw integer value of a Unix group ID.
-pub use backend::process::types::RawGid;
+pub use crate::ugid::RawGid;
/// The raw integer value of a Unix process ID.
-pub use backend::process::types::RawPid;
+pub use crate::pid::RawPid;
-/// The raw integer value of a Unix process ID.
-pub use backend::process::types::RawNonZeroPid;
-
-/// `uid_t`—A Unix user ID.
-#[repr(transparent)]
-#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)]
-pub struct Uid(RawUid);
-
-/// `gid_t`—A Unix group ID.
-#[repr(transparent)]
-#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)]
-pub struct Gid(RawGid);
-
-/// `pid_t`—A non-zero Unix process ID.
-///
-/// This is a pid, and not a pidfd. It is not a file descriptor, and the
-/// process it refers to could disappear at any time and be replaced by
-/// another, unrelated, process.
-#[repr(transparent)]
-#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)]
-pub struct Pid(RawNonZeroPid);
+pub use crate::pid::Pid;
+pub use crate::ugid::{Gid, Uid};
/// A Linux CPU ID.
-#[cfg(any(target_os = "android", target_os = "linux"))]
+#[cfg(linux_kernel)]
#[repr(transparent)]
#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)]
pub struct Cpuid(RawCpuid);
-impl Uid {
- /// A `Uid` corresponding to the root user (uid 0).
- pub const ROOT: Self = Self(0);
-
- /// Converts a `RawUid` into a `Uid`.
- ///
- /// # Safety
- ///
- /// `raw` must be the value of a valid Unix user ID.
- #[inline]
- pub const unsafe fn from_raw(raw: RawUid) -> Self {
- Self(raw)
- }
-
- /// Converts a `Uid` into a `RawUid`.
- #[inline]
- pub const fn as_raw(self) -> RawUid {
- self.0
- }
-
- /// Test whether this uid represents the root user (uid 0).
- #[inline]
- pub const fn is_root(self) -> bool {
- self.0 == Self::ROOT.0
- }
-}
-
-impl Gid {
- /// A `Gid` corresponding to the root group (gid 0).
- pub const ROOT: Self = Self(0);
-
- /// Converts a `RawGid` into a `Gid`.
- ///
- /// # Safety
- ///
- /// `raw` must be the value of a valid Unix group ID.
- #[inline]
- pub const unsafe fn from_raw(raw: RawGid) -> Self {
- Self(raw)
- }
-
- /// Converts a `Gid` into a `RawGid`.
- #[inline]
- pub const fn as_raw(self) -> RawGid {
- self.0
- }
-
- /// Test whether this gid represents the root group (gid 0).
- #[inline]
- pub const fn is_root(self) -> bool {
- self.0 == Self::ROOT.0
- }
-}
-
-impl Pid {
- /// A `Pid` corresponding to the init process (pid 1).
- pub const INIT: Self = Self(
- // SAFETY: The init process' pid is always valid.
- unsafe { RawNonZeroPid::new_unchecked(1) },
- );
-
- /// Converts a `RawPid` into a `Pid`.
- ///
- /// # Safety
- ///
- /// `raw` must be the value of a valid Unix process ID, or zero.
- #[inline]
- pub const unsafe fn from_raw(raw: RawPid) -> Option<Self> {
- match RawNonZeroPid::new(raw) {
- Some(pid) => Some(Self(pid)),
- None => None,
- }
- }
-
- /// Converts a known non-zero `RawPid` into a `Pid`.
- ///
- /// # Safety
- ///
- /// `raw` must be the value of a valid Unix process ID. It must not be
- /// zero.
- #[inline]
- pub const unsafe fn from_raw_nonzero(raw: RawNonZeroPid) -> Self {
- Self(raw)
- }
-
- /// Creates a `Pid` holding the ID of the given child process.
- #[cfg(feature = "std")]
- #[inline]
- pub fn from_child(child: &std::process::Child) -> Self {
- let id = child.id();
- debug_assert_ne!(id, 0);
-
- // SAFETY: We know the returned ID is valid because it came directly
- // from an OS API.
- unsafe { Self::from_raw_nonzero(RawNonZeroPid::new_unchecked(id as _)) }
- }
-
- /// Converts a `Pid` into a `RawNonZeroPid`.
- #[inline]
- pub const fn as_raw_nonzero(self) -> RawNonZeroPid {
- self.0
- }
-
- /// Converts an `Option<Pid>` into a `RawPid`.
- #[inline]
- pub fn as_raw(pid: Option<Self>) -> RawPid {
- pid.map_or(0, |pid| pid.0.get())
- }
-
- /// Test whether this pid represents the init process (pid 0).
- #[inline]
- pub const fn is_init(self) -> bool {
- self.0.get() == Self::INIT.0.get()
- }
-}
-
-#[cfg(any(target_os = "android", target_os = "linux"))]
+#[cfg(linux_kernel)]
impl Cpuid {
/// Converts a `RawCpuid` into a `Cpuid`.
///
@@ -195,7 +60,7 @@ impl Cpuid {
#[inline]
#[must_use]
pub fn getuid() -> Uid {
- backend::process::syscalls::getuid()
+ backend::ugid::syscalls::getuid()
}
/// `geteuid()`—Returns the process' effective user ID.
@@ -209,7 +74,7 @@ pub fn getuid() -> Uid {
#[inline]
#[must_use]
pub fn geteuid() -> Uid {
- backend::process::syscalls::geteuid()
+ backend::ugid::syscalls::geteuid()
}
/// `getgid()`—Returns the process' real group ID.
@@ -223,7 +88,7 @@ pub fn geteuid() -> Uid {
#[inline]
#[must_use]
pub fn getgid() -> Gid {
- backend::process::syscalls::getgid()
+ backend::ugid::syscalls::getgid()
}
/// `getegid()`—Returns the process' effective group ID.
@@ -237,7 +102,7 @@ pub fn getgid() -> Gid {
#[inline]
#[must_use]
pub fn getegid() -> Gid {
- backend::process::syscalls::getegid()
+ backend::ugid::syscalls::getegid()
}
/// `getpid()`—Returns the process' ID.
@@ -251,7 +116,7 @@ pub fn getegid() -> Gid {
#[inline]
#[must_use]
pub fn getpid() -> Pid {
- backend::process::syscalls::getpid()
+ backend::pid::syscalls::getpid()
}
/// `getppid()`—Returns the parent process' ID.
@@ -364,20 +229,3 @@ pub fn getgroups() -> io::Result<Vec<Gid>> {
buffer.resize(buffer.capacity(), Gid::ROOT);
}
}
-
-// Return the raw value of the IDs. In case of `None` it returns `u32::MAX`
-// since it has the same bit pattern as `-1` indicating no change to the
-// owner/group ID.
-pub(crate) fn translate_fchown_args(owner: Option<Uid>, group: Option<Gid>) -> (u32, u32) {
- let ow = match owner {
- Some(o) => o.as_raw(),
- None => u32::MAX,
- };
-
- let gr = match group {
- Some(g) => g.as_raw(),
- None => u32::MAX,
- };
-
- (ow, gr)
-}