From 54325828b2ad833f658f43071adca990c0352f9d Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Mon, 19 May 2025 18:56:13 -0700 Subject: [PATCH] absolutify target stdout/stderr/stdin paths based on working directory --- src/ctrl/ctrl_core.c | 21 +++++++++++++++------ src/path/path.c | 2 +- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index a12d31a1..54cb0bc1 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -5262,25 +5262,32 @@ ctrl_thread__end_and_flush_info_log(void) internal void ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) { + Temp scratch = scratch_begin(0, 0); + + //- rjf: produce full stdout/stderr/stdin paths + String8 stdout_path = path_absolute_dst_from_relative_dst_src(scratch.arena, msg->stdout_path, msg->path); + String8 stdin_path = path_absolute_dst_from_relative_dst_src(scratch.arena, msg->stdin_path, msg->path); + String8 stderr_path = path_absolute_dst_from_relative_dst_src(scratch.arena, msg->stderr_path, msg->path); + //- rjf: obtain stdout/stderr/stdin handles OS_Handle stdout_handle = {0}; OS_Handle stderr_handle = {0}; OS_Handle stdin_handle = {0}; - if(msg->stdout_path.size != 0) + if(stdout_path.size != 0) { - OS_Handle f = os_file_open(OS_AccessFlag_Write|OS_AccessFlag_Read, msg->stdout_path); + OS_Handle f = os_file_open(OS_AccessFlag_Write|OS_AccessFlag_Read, stdout_path); os_file_close(f); stdout_handle = os_file_open(OS_AccessFlag_Write|OS_AccessFlag_Append|OS_AccessFlag_ShareRead|OS_AccessFlag_ShareWrite|OS_AccessFlag_Inherited, msg->stdout_path); } - if(msg->stderr_path.size != 0) + if(stderr_path.size != 0) { - OS_Handle f = os_file_open(OS_AccessFlag_Write|OS_AccessFlag_Read, msg->stderr_path); + OS_Handle f = os_file_open(OS_AccessFlag_Write|OS_AccessFlag_Read, stderr_path); os_file_close(f); stderr_handle = os_file_open(OS_AccessFlag_Write|OS_AccessFlag_Append|OS_AccessFlag_ShareRead|OS_AccessFlag_ShareWrite|OS_AccessFlag_Inherited, msg->stderr_path); } - if(msg->stdin_path.size != 0) + if(stdin_path.size != 0) { - stdin_handle = os_file_open(OS_AccessFlag_Read|OS_AccessFlag_ShareRead|OS_AccessFlag_ShareWrite|OS_AccessFlag_Inherited, msg->stdin_path); + stdin_handle = os_file_open(OS_AccessFlag_Read|OS_AccessFlag_ShareRead|OS_AccessFlag_ShareWrite|OS_AccessFlag_Inherited, stdin_path); } //- rjf: launch @@ -5313,6 +5320,8 @@ ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) ctrl_entity_equip_string(entity_ctx_rw_store, entry, string); } } + + scratch_end(scratch); } internal void diff --git a/src/path/path.c b/src/path/path.c index 72d2c710..32c928b7 100644 --- a/src/path/path.c +++ b/src/path/path.c @@ -90,7 +90,7 @@ path_absolute_dst_from_relative_dst_src(Arena *arena, String8 dst, String8 src) { String8 result = dst; PathStyle dst_style = path_style_from_str8(dst); - if(dst_style == PathStyle_Relative) + if(dst.size != 0 && dst_style == PathStyle_Relative) { Temp scratch = scratch_begin(&arena, 1); String8 dst_from_src_absolute = push_str8f(scratch.arena, "%S/%S", src, dst);