diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-05-26 13:37:34 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-05-26 18:32:45 -0400 |
| commit | 44a049e01eef654fee82a1ee4e1aaf37447319ce (patch) | |
| tree | 55fe1e7ae6920f19439d4f7d3424152a133203fb /std/os/windows.zig | |
| parent | 2f040a23c8b968db56ab4c4725d6651f5ea3418e (diff) | |
| download | zig-44a049e01eef654fee82a1ee4e1aaf37447319ce.tar.gz zig-44a049e01eef654fee82a1ee4e1aaf37447319ce.zip | |
more cleanup. down to just the `@hasDecl` builtin
Diffstat (limited to 'std/os/windows.zig')
| -rw-r--r-- | std/os/windows.zig | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/std/os/windows.zig b/std/os/windows.zig index fbb8ff42c5..9bfeee9fe1 100644 --- a/std/os/windows.zig +++ b/std/os/windows.zig @@ -1140,6 +1140,46 @@ pub fn GetEnvironmentVariableW(lpName: LPWSTR, lpBuffer: LPWSTR, nSize: DWORD) G return rc; } +pub const CreateProcessError = error{ + FileNotFound, + InvalidName, + Unexpected, +}; + +pub fn CreateProcessW( + lpApplicationName: ?LPWSTR, + lpCommandLine: LPWSTR, + lpProcessAttributes: ?*SECURITY_ATTRIBUTES, + lpThreadAttributes: ?*SECURITY_ATTRIBUTES, + bInheritHandles: BOOL, + dwCreationFlags: DWORD, + lpEnvironment: ?*c_void, + lpCurrentDirectory: ?LPWSTR, + lpStartupInfo: *STARTUPINFOW, + lpProcessInformation: *PROCESS_INFORMATION, +) CreateProcessError!void { + if (kernel32.CreateProcessW( + lpApplicationName, + lpCommandLine, + lpProcessAttributes, + lpThreadAttributes, + bInheritHandle, + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + lpStartupInfo, + lpProcessInformation, + ) == 0) { + switch (kernel32.GetLastError()) { + ERROR.FILE_NOT_FOUND => return error.FileNotFound, + ERROR.PATH_NOT_FOUND => return error.FileNotFound, + ERROR.INVALID_PARAMETER => unreachable, + ERROR.INVALID_NAME => return error.InvalidName, + else => |err| return unexpectedError(err), + } + } +} + pub fn cStrToPrefixedFileW(s: [*]const u8) ![PATH_MAX_WIDE + 1]u16 { return sliceToPrefixedFileW(mem.toSliceConst(u8, s)); } |
