mirror of
https://github.com/ziglang/zig.git
synced 2026-01-04 04:25:05 +00:00
child_process: Add write access to the null handle
This commit allows write access to the `\\Device\\Null` Handle. Without a write access, it's not possible for the child process to write SdOut to Null. As a requirement `SetHandleInformation` was also changed to mark the handle as iheritable (by adding it to Flags) by the spawned process. This allows the child to access the NUL device that was opened. This also makes the Windows part to behave similarly to `spawnPosix`.
This commit is contained in:
parent
7116b02210
commit
41bf816fa6
@ -661,8 +661,8 @@ pub const ChildProcess = struct {
|
||||
const nul_handle = if (any_ignore)
|
||||
// "\Device\Null" or "\??\NUL"
|
||||
windows.OpenFile(&[_]u16{ '\\', 'D', 'e', 'v', 'i', 'c', 'e', '\\', 'N', 'u', 'l', 'l' }, .{
|
||||
.access_mask = windows.GENERIC_READ | windows.SYNCHRONIZE,
|
||||
.share_access = windows.FILE_SHARE_READ,
|
||||
.access_mask = windows.GENERIC_READ | windows.GENERIC_WRITE | windows.SYNCHRONIZE,
|
||||
.share_access = windows.FILE_SHARE_READ | windows.FILE_SHARE_WRITE,
|
||||
.creation = windows.OPEN_EXISTING,
|
||||
.io_mode = .blocking,
|
||||
}) catch |err| switch (err) {
|
||||
@ -681,7 +681,7 @@ pub const ChildProcess = struct {
|
||||
if (any_ignore) os.close(nul_handle);
|
||||
}
|
||||
if (any_ignore) {
|
||||
try windows.SetHandleInformation(nul_handle, windows.HANDLE_FLAG_INHERIT, 0);
|
||||
try windows.SetHandleInformation(nul_handle, windows.HANDLE_FLAG_INHERIT, windows.HANDLE_FLAG_INHERIT);
|
||||
}
|
||||
|
||||
var g_hChildStd_IN_Rd: ?windows.HANDLE = null;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user