absolutify target stdout/stderr/stdin paths based on working directory

This commit is contained in:
Ryan Fleury
2025-05-19 18:56:13 -07:00
parent 862e0ef882
commit 54325828b2
2 changed files with 16 additions and 7 deletions
+15 -6
View File
@@ -5262,25 +5262,32 @@ ctrl_thread__end_and_flush_info_log(void)
internal void internal void
ctrl_thread__launch(DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg) 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 //- rjf: obtain stdout/stderr/stdin handles
OS_Handle stdout_handle = {0}; OS_Handle stdout_handle = {0};
OS_Handle stderr_handle = {0}; OS_Handle stderr_handle = {0};
OS_Handle stdin_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); 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); 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); 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); 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 //- 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); ctrl_entity_equip_string(entity_ctx_rw_store, entry, string);
} }
} }
scratch_end(scratch);
} }
internal void internal void
+1 -1
View File
@@ -90,7 +90,7 @@ path_absolute_dst_from_relative_dst_src(Arena *arena, String8 dst, String8 src)
{ {
String8 result = dst; String8 result = dst;
PathStyle dst_style = path_style_from_str8(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); Temp scratch = scratch_begin(&arena, 1);
String8 dst_from_src_absolute = push_str8f(scratch.arena, "%S/%S", src, dst); String8 dst_from_src_absolute = push_str8f(scratch.arena, "%S/%S", src, dst);