srctree

xEgoist parent 7116b022 41bf816f
child_process: Add write access to the null handle

This commit allows write access to the DeviceNull Handle.Without a write access, it's not possible for the child process to writeSdOut to Null. As a requirement SetHandleInformation was also changedto 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.

inlinesplit
lib/std/child_process.zig added: 4, removed: 4, total 0
@@ -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;