From c141c6a999915871ccff2e78eebf7847b24b0e5d Mon Sep 17 00:00:00 2001 From: Daniel Gavin Date: Sun, 15 May 2022 22:40:14 +0200 Subject: Fix odin changes --- src/common/util_windows.odin | 54 +++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 31 deletions(-) (limited to 'src/common') diff --git a/src/common/util_windows.odin b/src/common/util_windows.odin index bf89c47..db2a9fc 100644 --- a/src/common/util_windows.odin +++ b/src/common/util_windows.odin @@ -5,60 +5,52 @@ import "core:mem" import "core:fmt" import "core:log" -import "core:sys/win32" +import win32 "core:sys/windows" foreign import kernel32 "system:kernel32.lib" -@(default_calling_convention = "std") -foreign kernel32 { - @(link_name = "CreatePipe")create_pipe :: proc (hReadPipe, hWritePipe: ^win32.Handle, lpPipeAttributes: ^win32.Security_Attributes, nSize: i32) -> i32 --- -} run_executable :: proc(command: string, stdout: ^[]byte) -> (u32, bool, []byte) { + stdout_read: win32.HANDLE + stdout_write: win32.HANDLE - stdout_read: win32.Handle - stdout_write: win32.Handle + attributes: win32.SECURITY_ATTRIBUTES + attributes.nLength = size_of(win32.SECURITY_ATTRIBUTES) + attributes.bInheritHandle = true + attributes.lpSecurityDescriptor = nil - command := strings.clone_to_cstring(command, context.temp_allocator) - - attributes: win32.Security_Attributes - attributes.length = size_of(win32.Security_Attributes) - attributes.inherit_handle = true - attributes.security_descriptor = nil - - if create_pipe(&stdout_read, &stdout_write, &attributes, 0) == 0 { + if win32.CreatePipe(&stdout_read, &stdout_write, &attributes, 0) == false { return 0, false, stdout[0:] } - if !win32.set_handle_information(stdout_read, win32.HANDLE_FLAG_INHERIT, 0) { + if !win32.SetHandleInformation(stdout_read, win32.HANDLE_FLAG_INHERIT, 0) { return 0, false, stdout[0:] } - startup_info: win32.Startup_Info - process_info: win32.Process_Information + startup_info: win32.STARTUPINFO + process_info: win32.PROCESS_INFORMATION - startup_info.cb = size_of(win32.Startup_Info) + startup_info.cb = size_of(win32.STARTUPINFO) - startup_info.stderr = stdout_write - startup_info.stdout = stdout_write - startup_info.flags |= win32.STARTF_USESTDHANDLES + startup_info.hStdError = stdout_write + startup_info.hStdOutput = stdout_write + startup_info.dwFlags |= win32.STARTF_USESTDHANDLES - if !win32.create_process_a(nil, command, nil, nil, true, 0, nil, nil, &startup_info, &process_info) { + if !win32.CreateProcessW(nil, &win32.utf8_to_utf16(command)[0], nil, nil, true, 0, nil, nil, &startup_info, &process_info) { return 0, false, stdout[0:] } - win32.close_handle(stdout_write) + win32.CloseHandle(stdout_write) index: int - read: i32 + read: u32 read_buffer: [50]byte - success: win32.Bool = true + success: win32.BOOL = true for success { - - success = win32.read_file(stdout_read, &read_buffer[0], len(read_buffer), &read, nil) + success = win32.ReadFile(stdout_read, &read_buffer[0], len(read_buffer), &read, nil) if read > 0 && index + cast(int)read <= len(stdout) { mem.copy(&stdout[index], &read_buffer[0], cast(int)read) @@ -71,11 +63,11 @@ run_executable :: proc(command: string, stdout: ^[]byte) -> (u32, bool, []byte) exit_code: u32 - win32.wait_for_single_object(process_info.process, win32.INFINITE) + win32.WaitForSingleObject(process_info.hProcess, win32.INFINITE) - win32.get_exit_code_process(process_info.process, &exit_code) + win32.GetExitCodeProcess(process_info.hProcess, &exit_code) - win32.close_handle(stdout_read) + win32.CloseHandle(stdout_read) return exit_code, true, stdout[0:index] } \ No newline at end of file -- cgit v1.2.3