diff options
| author | Chris Denton <christophersdenton@gmail.com> | 2022-04-26 15:56:26 +0100 |
|---|---|---|
| committer | Chris Denton <christophersdenton@gmail.com> | 2022-04-26 15:56:26 +0100 |
| commit | b89b0567427932fe37851a314610d795258f1834 (patch) | |
| tree | de836ef390199bc7592478250cd39b2656800f71 | |
| parent | 7417110cefda899a685a77557ac2bd7d7ee07e54 (diff) | |
| download | rust-b89b0567427932fe37851a314610d795258f1834.tar.gz rust-b89b0567427932fe37851a314610d795258f1834.zip | |
Add `set_inheritable` for Windows `Handle`s
| -rw-r--r-- | library/std/src/os/windows/io/handle.rs | 12 | ||||
| -rw-r--r-- | library/std/src/sys/windows/handle.rs | 4 |
2 files changed, 16 insertions, 0 deletions
diff --git a/library/std/src/os/windows/io/handle.rs b/library/std/src/os/windows/io/handle.rs index ee30cc8be6b..b41fb3395fe 100644 --- a/library/std/src/os/windows/io/handle.rs +++ b/library/std/src/os/windows/io/handle.rs @@ -198,6 +198,18 @@ impl OwnedHandle { })?; unsafe { Ok(Self::from_raw_handle(ret)) } } + + /// Allow child processes to inherit the handle. + pub(crate) fn set_inheritable(&self) -> io::Result<()> { + cvt(unsafe { + c::SetHandleInformation( + self.as_raw_handle(), + c::HANDLE_FLAG_INHERIT, + c::HANDLE_FLAG_INHERIT, + ) + })?; + Ok(()) + } } impl TryFrom<HandleOrInvalid> for OwnedHandle { diff --git a/library/std/src/sys/windows/handle.rs b/library/std/src/sys/windows/handle.rs index ef9a8bd6900..3b609825a79 100644 --- a/library/std/src/sys/windows/handle.rs +++ b/library/std/src/sys/windows/handle.rs @@ -221,6 +221,10 @@ impl Handle { Ok(Self(self.0.duplicate(access, inherit, options)?)) } + pub(crate) fn set_inheritable(&self) -> io::Result<()> { + self.0.set_inheritable() + } + /// Performs a synchronous read. /// /// If the handle is opened for asynchronous I/O then this abort the process. |
