From db047920731cfde42393fa0cdaa56cce38f790f0 Mon Sep 17 00:00:00 2001 From: Nikita Smith Date: Thu, 7 Nov 2024 13:33:37 -0800 Subject: [PATCH] moved getter for process start time w32 --- src/linker/os_ext/core/os_core.h | 2 - src/linker/os_ext/core/os_core_win32.c | 50 ------------------------ src/os/core/os_core.h | 5 ++- src/os/core/win32/os_core_win32.c | 53 +++++++++++++++++++------- 4 files changed, 42 insertions(+), 68 deletions(-) diff --git a/src/linker/os_ext/core/os_core.h b/src/linker/os_ext/core/os_core.h index 601e751a..5396e19e 100644 --- a/src/linker/os_ext/core/os_core.h +++ b/src/linker/os_ext/core/os_core.h @@ -29,5 +29,3 @@ internal String8Array os_data_from_file_path_parallel(TP_Context *tp, Arena *are internal String8List os_file_search(Arena *arena, String8List dir_list, String8 file_path); internal B32 os_folder_path_exists(String8 path); -internal U32 os_get_process_start_time_unix(void); - diff --git a/src/linker/os_ext/core/os_core_win32.c b/src/linker/os_ext/core/os_core_win32.c index d85af683..f078a73d 100644 --- a/src/linker/os_ext/core/os_core_win32.c +++ b/src/linker/os_ext/core/os_core_win32.c @@ -1,18 +1,6 @@ // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) -internal U32 -w32_unix_time_from_file_time(FILETIME file_time) -{ - U64 win32_time = ((U64)file_time.dwHighDateTime << 32) | file_time.dwLowDateTime; - U64 unix_time64 = ((win32_time - 0x19DB1DED53E8000ULL) / 10000000); - - Assert(unix_time64 <= max_U32); - U32 unix_time32 = (U32)unix_time64; - - return unix_time32; -} - internal B32 os_w32_has_path_volume_prefix(String8 path) { @@ -128,41 +116,3 @@ os_folder_path_exists(String8 path) return exists; } -internal B32 -os_set_large_pages(B32 toggle) -{ - B32 is_ok = 0; - - HANDLE token; - if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token)) - { - LUID luid; - if(LookupPrivilegeValue(0, SE_LOCK_MEMORY_NAME, &luid)) - { - TOKEN_PRIVILEGES priv; - priv.PrivilegeCount = 1; - priv.Privileges[0].Luid = luid; - priv.Privileges[0].Attributes = toggle ? SE_PRIVILEGE_ENABLED : SE_PRIVILEGE_REMOVED; - if (AdjustTokenPrivileges(token, 0, &priv, sizeof(priv), 0, 0) == ERROR_SUCCESS) { - is_ok = 1; - } - } - CloseHandle(token); - } - return is_ok; -} - -internal U32 -os_get_process_start_time_unix(void) -{ - HANDLE handle = GetCurrentProcess(); - FILETIME start_time = {0}; - FILETIME exit_time; - FILETIME kernel_time; - FILETIME user_time; - if (GetProcessTimes(handle, &start_time, &exit_time, &kernel_time, &user_time)) { - return w32_unix_time_from_file_time(start_time); - } - return 0; -} - diff --git a/src/os/core/os_core.h b/src/os/core/os_core.h index 7df87170..7f27f17a 100644 --- a/src/os/core/os_core.h +++ b/src/os/core/os_core.h @@ -166,9 +166,10 @@ internal OS_Handle os_cmd_line_launchf(char *fmt, ...); //////////////////////////////// //~ rjf: @os_hooks System/Process Info (Implemented Per-OS) -internal OS_SystemInfo *os_get_system_info(void); +internal OS_SystemInfo *os_get_system_info(void); internal OS_ProcessInfo *os_get_process_info(void); -internal String8 os_get_current_path(Arena *arena); +internal String8 os_get_current_path(Arena *arena); +internal U32 os_get_process_start_time_unix(void); //////////////////////////////// //~ rjf: @os_hooks Memory Allocation (Implemented Per-OS) diff --git a/src/os/core/win32/os_core_win32.c b/src/os/core/win32/os_core_win32.c index dbb7e4cb..68cc194f 100644 --- a/src/os/core/win32/os_core_win32.c +++ b/src/os/core/win32/os_core_win32.c @@ -90,6 +90,18 @@ os_w32_sleep_ms_from_endt_us(U64 endt_us) return sleep_ms; } +internal U32 +os_w32_unix_time_from_file_time(FILETIME file_time) +{ + U64 win32_time = ((U64)file_time.dwHighDateTime << 32) | file_time.dwLowDateTime; + U64 unix_time64 = ((win32_time - 0x19DB1DED53E8000ULL) / 10000000); + + Assert(unix_time64 <= max_U32); + U32 unix_time32 = (U32)unix_time64; + + return unix_time32; +} + //////////////////////////////// //~ rjf: Entity Functions @@ -167,6 +179,21 @@ os_get_current_path(Arena *arena) return name; } +internal U32 +os_get_process_start_time_unix(void) +{ + HANDLE handle = GetCurrentProcess(); + FILETIME start_time = {0}; + FILETIME exit_time; + FILETIME kernel_time; + FILETIME user_time; + if(GetProcessTimes(handle, &start_time, &exit_time, &kernel_time, &user_time)) + { + return os_w32_unix_time_from_file_time(start_time); + } + return 0; +} + //////////////////////////////// //~ rjf: @os_hooks Memory Allocation (Implemented Per-OS) @@ -710,13 +737,13 @@ os_file_iter_next(Arena *arena, OS_FileIter *iter, OS_FileInfo *info_out) internal void os_file_iter_end(OS_FileIter *iter) { - OS_W32_FileIter *w32_iter = (OS_W32_FileIter*)iter->memory; - HANDLE zero_handle; - MemoryZeroStruct(&zero_handle); - if(!MemoryMatchStruct(&zero_handle, &w32_iter->handle)) - { - FindClose(w32_iter->handle); - } + OS_W32_FileIter *w32_iter = (OS_W32_FileIter*)iter->memory; + HANDLE zero_handle; + MemoryZeroStruct(&zero_handle); + if(!MemoryMatchStruct(&zero_handle, &w32_iter->handle)) + { + FindClose(w32_iter->handle); + } } //- rjf: directory creation @@ -817,10 +844,8 @@ os_now_unix(void) { FILETIME file_time; GetSystemTimeAsFileTime(&file_time); - U64 win32_time = ((U64)file_time.dwHighDateTime << 32) | file_time.dwLowDateTime; - U64 unix_time64 = ((win32_time - 0x19DB1DED53E8000ULL) / 10000000); - U32 unix_time32 = (U32)unix_time64; - return unix_time32; + U32 unix_time = os_w32_unix_time_from_file_time(file_time); + return unix_time; } internal DateTime @@ -946,21 +971,21 @@ os_process_launch(OS_ProcessLaunchParams *params) startup_info.hStdOutput = stdout_handle; startup_info.dwFlags |= STARTF_USESTDHANDLES; inherit_handles = 1; - } + } if(!os_handle_match(params->stderr_file, os_handle_zero())) { HANDLE stderr_handle = (HANDLE)params->stderr_file.u64[0]; startup_info.hStdError = stderr_handle; startup_info.dwFlags |= STARTF_USESTDHANDLES; inherit_handles = 1; - } + } if(!os_handle_match(params->stdin_file, os_handle_zero())) { HANDLE stdin_handle = (HANDLE)params->stdin_file.u64[0]; startup_info.hStdInput = stdin_handle; startup_info.dwFlags |= STARTF_USESTDHANDLES; inherit_handles = 1; - } + } PROCESS_INFORMATION process_info = {0}; if(CreateProcessW(0, (WCHAR*)cmd16.str, 0, 0, inherit_handles, creation_flags, use_null_env_arg ? 0 : (WCHAR*)env16.str, (WCHAR*)dir16.str, &startup_info, &process_info)) {