summaryrefslogtreecommitdiffstats
path: root/library/std/src/process.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:20:39 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:20:39 +0000
commit1376c5a617be5c25655d0d7cb63e3beaa5a6e026 (patch)
tree3bb8d61aee02bc7a15eab3f36e3b921afc2075d0 /library/std/src/process.rs
parentReleasing progress-linux version 1.69.0+dfsg1-1~progress7.99u1. (diff)
downloadrustc-1376c5a617be5c25655d0d7cb63e3beaa5a6e026.tar.xz
rustc-1376c5a617be5c25655d0d7cb63e3beaa5a6e026.zip
Merging upstream version 1.70.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/std/src/process.rs')
-rw-r--r--library/std/src/process.rs86
1 files changed, 70 insertions, 16 deletions
diff --git a/library/std/src/process.rs b/library/std/src/process.rs
index 1952e19e6..0ab72f7ea 100644
--- a/library/std/src/process.rs
+++ b/library/std/src/process.rs
@@ -110,7 +110,7 @@ use crate::convert::Infallible;
use crate::ffi::OsStr;
use crate::fmt;
use crate::fs;
-use crate::io::{self, IoSlice, IoSliceMut};
+use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut};
use crate::num::NonZeroI32;
use crate::path::Path;
use crate::str;
@@ -354,6 +354,10 @@ impl Read for ChildStdout {
self.inner.read(buf)
}
+ fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> io::Result<()> {
+ self.inner.read_buf(buf)
+ }
+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
self.inner.read_vectored(bufs)
}
@@ -419,6 +423,10 @@ impl Read for ChildStderr {
self.inner.read(buf)
}
+ fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> io::Result<()> {
+ self.inner.read_buf(buf)
+ }
+
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> io::Result<usize> {
self.inner.read_vectored(bufs)
}
@@ -644,10 +652,19 @@ impl Command {
self
}
- /// Inserts or updates an environment variable mapping.
+ /// Inserts or updates an explicit environment variable mapping.
///
- /// Note that environment variable names are case-insensitive (but case-preserving) on Windows,
- /// and case-sensitive on all other platforms.
+ /// This method allows you to add an environment variable mapping to the spawned process or
+ /// overwrite a previously set value. You can use [`Command::envs`] to set multiple environment
+ /// variables simultaneously.
+ ///
+ /// Child processes will inherit environment variables from their parent process by default.
+ /// Environment variables explicitly set using [`Command::env`] take precedence over inherited
+ /// variables. You can disable environment variable inheritance entirely using
+ /// [`Command::env_clear`] or for a single key using [`Command::env_remove`].
+ ///
+ /// Note that environment variable names are case-insensitive (but
+ /// case-preserving) on Windows and case-sensitive on all other platforms.
///
/// # Examples
///
@@ -671,7 +688,19 @@ impl Command {
self
}
- /// Adds or updates multiple environment variable mappings.
+ /// Inserts or updates multiple explicit environment variable mappings.
+ ///
+ /// This method allows you to add multiple environment variable mappings to the spawned process
+ /// or overwrite previously set values. You can use [`Command::env`] to set a single environment
+ /// variable.
+ ///
+ /// Child processes will inherit environment variables from their parent process by default.
+ /// Environment variables explicitly set using [`Command::envs`] take precedence over inherited
+ /// variables. You can disable environment variable inheritance entirely using
+ /// [`Command::env_clear`] or for a single key using [`Command::env_remove`].
+ ///
+ /// Note that environment variable names are case-insensitive (but case-preserving) on Windows
+ /// and case-sensitive on all other platforms.
///
/// # Examples
///
@@ -708,7 +737,18 @@ impl Command {
self
}
- /// Removes an environment variable mapping.
+ /// Removes an explicitly set environment variable and prevents inheriting it from a parent
+ /// process.
+ ///
+ /// This method will remove the explicit value of an environment variable set via
+ /// [`Command::env`] or [`Command::envs`]. In addition, it will prevent the spawned child
+ /// process from inheriting that environment variable from its parent process.
+ ///
+ /// After calling [`Command::env_remove`], the value associated with its key from
+ /// [`Command::get_envs`] will be [`None`].
+ ///
+ /// To clear all explicitly set environment variables and disable all environment variable
+ /// inheritance, you can use [`Command::env_clear`].
///
/// # Examples
///
@@ -728,7 +768,17 @@ impl Command {
self
}
- /// Clears the entire environment map for the child process.
+ /// Clears all explicitly set environment variables and prevents inheriting any parent process
+ /// environment variables.
+ ///
+ /// This method will remove all explicitly added environment variables set via [`Command::env`]
+ /// or [`Command::envs`]. In addition, it will prevent the spawned child process from inheriting
+ /// any environment variable from its parent process.
+ ///
+ /// After calling [`Command::env_remove`], the iterator from [`Command::get_envs`] will be
+ /// empty.
+ ///
+ /// You can use [`Command::env_remove`] to clear a single mapping.
///
/// # Examples
///
@@ -980,17 +1030,21 @@ impl Command {
CommandArgs { inner: self.inner.get_args() }
}
- /// Returns an iterator of the environment variables that will be set when
- /// the process is spawned.
+ /// Returns an iterator of the environment variables explicitly set for the child process.
+ ///
+ /// Environment variables explicitly set using [`Command::env`], [`Command::envs`], and
+ /// [`Command::env_remove`] can be retrieved with this method.
+ ///
+ /// Note that this output does not include environment variables inherited from the parent
+ /// process.
///
- /// Each element is a tuple `(&OsStr, Option<&OsStr>)`, where the first
- /// value is the key, and the second is the value, which is [`None`] if
- /// the environment variable is to be explicitly removed.
+ /// Each element is a tuple key/value pair `(&OsStr, Option<&OsStr>)`. A [`None`] value
+ /// indicates its key was explicitly removed via [`Command::env_remove`]. The associated key for
+ /// the [`None`] value will no longer inherit from its parent process.
///
- /// This only includes environment variables explicitly set with
- /// [`Command::env`], [`Command::envs`], and [`Command::env_remove`]. It
- /// does not include environment variables that will be inherited by the
- /// child process.
+ /// An empty iterator can indicate that no explicit mappings were added or that
+ /// [`Command::env_clear`] was called. After calling [`Command::env_clear`], the child process
+ /// will not inherit any environment variables from its parent process.
///
/// # Examples
///