diff --git a/src/os/core/linux/os_core_linux.c b/src/os/core/linux/os_core_linux.c index 13d6bacb..de752de3 100644 --- a/src/os/core/linux/os_core_linux.c +++ b/src/os/core/linux/os_core_linux.c @@ -811,7 +811,7 @@ os_process_launch(OS_ProcessLaunchParams *params) char **envp = 0; if(params->inherit_env) { - envp = __environ; + envp = os_lnx_state.default_env; } else { @@ -1443,7 +1443,7 @@ lnx_signal_handler(int sig, siginfo_t *info, void *arg) } fprintf(stderr, "\nVersion: %s%s\n\n", BUILD_VERSION_STRING_LITERAL, BUILD_GIT_HASH_STRING_LITERAL_APPEND); - _exit(0); + _exit(1); } int @@ -1485,6 +1485,20 @@ main(int argc, char **argv) os_lnx_state.arena = arena_alloc(); os_lnx_state.entity_arena = arena_alloc(); pthread_mutex_init(&os_lnx_state.entity_mutex, 0); + + // cache default environment + { + U64 env_count = 0; + for(; __environ[env_count] != 0; env_count += 1) {} + char **default_env = push_array(os_lnx_state.arena, char *, env_count+1); + for EachIndex(i, env_count) + { + default_env[i] = (char *)str8_copy(os_lnx_state.arena, str8_cstring(__environ[i])).str; + } + default_env[env_count] = 0; + os_lnx_state.default_env_count = env_count; + os_lnx_state.default_env = default_env; + } //- rjf: grab dynamically allocated system info { diff --git a/src/os/core/linux/os_core_linux.h b/src/os/core/linux/os_core_linux.h index d7301e78..b80f1ab3 100644 --- a/src/os/core/linux/os_core_linux.h +++ b/src/os/core/linux/os_core_linux.h @@ -110,6 +110,8 @@ struct OS_LNX_State pthread_mutex_t entity_mutex; Arena *entity_arena; OS_LNX_Entity *entity_free; + U64 default_env_count; + char **default_env; }; ////////////////////////////////