diff --git a/src/base/base_processes.h b/src/base/base_processes.h index a2d1bdee2..9d633cb3d 100644 --- a/src/base/base_processes.h +++ b/src/base/base_processes.h @@ -11,7 +11,8 @@ struct ProcessInfo B32 large_pages_allowed; String8 binary_path; String8 initial_path; - String8 user_program_data_path; + String8 user_program_state_path; + String8 user_program_config_path; String8List module_load_paths; String8List environment; }; diff --git a/src/dbg_engine/dbg_engine_core.c b/src/dbg_engine/dbg_engine_core.c index 4606be045..574ed3946 100644 --- a/src/dbg_engine/dbg_engine_core.c +++ b/src/dbg_engine/dbg_engine_core.c @@ -57,8 +57,8 @@ d_init(void) d_ctrl_state->c2u_ring_cv = cond_var_alloc(); { Temp scratch = scratch_begin(0, 0); - String8 user_program_data_path = get_process_info()->user_program_data_path; - String8 user_data_folder = push_str8f(scratch.arena, "%S/raddbg/logs", user_program_data_path); + String8 user_program_state_path = get_process_info()->user_program_state_path; + String8 user_data_folder = push_str8f(scratch.arena, "%S/raddbg/logs", user_program_state_path); make_directory(user_data_folder); d_ctrl_state->ctrl_thread_log_path = push_str8f(d_ctrl_state->arena, "%S/ctrl_thread.raddbg_log", user_data_folder); write_data_to_file_path(d_ctrl_state->ctrl_thread_log_path, str8_zero()); diff --git a/src/linux/base/linux_base.c b/src/linux/base/linux_base.c index 9e22fda57..e609a6ae4 100644 --- a/src/linux/base/linux_base.c +++ b/src/linux/base/linux_base.c @@ -1431,6 +1431,22 @@ 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(1); +} + +internal String8 +getenv_or_append_to_home(char *env, char *or) +{ + char *env_str = getenv(env); + if (env_str == 0 || cstring8_length((U8 *)env_str) == 0) { + char *home = getenv("HOME"); + + String8 or_str = push_str8f(lnx_state.arena, "%S/%S", + str8_cstring(home), + str8_cstring(or)); + return or_str; + } else { + return str8_cstring(env_str); + } } int @@ -1558,10 +1574,9 @@ main(int argc, char **argv) info->initial_path = get_current_path(lnx_state.arena); } - // rjf: grab home directory { - char *home = getenv("HOME"); - info->user_program_data_path = str8_cstring(home); + info->user_program_state_path = getenv_or_append_to_home("XDG_STATE_HOME", ".local/state"); + info->user_program_config_path = getenv_or_append_to_home("XDG_CONFIG_HOME", ".config"); } scratch_end(scratch); diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 9ab6ba30d..c973c81d4 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -9459,7 +9459,7 @@ rd_theme_tree_from_name(Arena *arena, Access *access, String8 theme_name) } if(theme_tree == &md_nil_node) { - String8 path = str8f(scratch.arena, "%S/raddbg/themes/%S", get_process_info()->user_program_data_path, theme_name); + String8 path = push_str8f(scratch.arena, "%S/raddbg/themes/%S", get_process_info()->user_program_config_path, theme_name); U64 endt_us = now_time_us()+100; if(rd_state->frame_index <= 5) { @@ -10115,10 +10115,15 @@ rd_init(CmdLine *cmdln) log_select(rd_state->log); { Temp scratch = scratch_begin(0, 0); - String8 user_program_data_path = get_process_info()->user_program_data_path; - String8 user_data_folder = push_str8f(scratch.arena, "%S/raddbg/logs", user_program_data_path); - rd_state->log_path = push_str8f(rd_state->arena, "%S/ui_thread.raddbg_log", user_data_folder); - make_directory(user_data_folder); + String8 user_program_state_path = get_process_info()->user_program_state_path; + + String8 user_log_folder = push_str8f(scratch.arena, "%S/raddbg", user_program_state_path); + make_directory(user_log_folder); + + user_log_folder = push_str8f(scratch.arena, "%S/raddbg/logs", user_program_state_path); + rd_state->log_path = push_str8f(rd_state->arena, "%S/ui_thread.raddbg_log", user_log_folder); + make_directory(user_log_folder); + write_data_to_file_path(rd_state->log_path, str8_zero()); scratch_end(scratch); } @@ -10337,8 +10342,8 @@ rd_init(CmdLine *cmdln) } } { - String8 user_program_data_path = get_process_info()->user_program_data_path; - String8 user_data_folder = push_str8f(scratch2.arena, "%S/raddbg", user_program_data_path); + String8 user_program_config_path = get_process_info()->user_program_config_path; + String8 user_data_folder = push_str8f(scratch.arena, "%S/raddbg", user_program_config_path); make_directory(user_data_folder); if(user_path.size == 0) { @@ -12800,7 +12805,7 @@ rd_frame(void) case RD_CmdKind_RecordUserAsLastOpened: { String8 file_path = rd_regs()->file_path; - String8 last_user_path = str8f(scratch.arena, "%S/raddbg/last_user", get_process_info()->user_program_data_path); + String8 last_user_path = push_str8f(scratch.arena, "%S/raddbg/last_user", get_process_info()->user_program_config_path); write_data_to_file_path(last_user_path, file_path); }break; @@ -15368,7 +15373,7 @@ rd_frame(void) String8 name = rd_regs()->string; if(name.size != 0) { - String8 themes_folder = str8f(scratch.arena, "%S/raddbg/themes", get_process_info()->user_program_data_path); + String8 themes_folder = push_str8f(scratch.arena, "%S/raddbg/themes", get_process_info()->user_program_config_path); if(make_directory(themes_folder)) { String8 dst_path = push_str8f(scratch.arena, "%S/%S", themes_folder, name); diff --git a/src/raddbg/raddbg_eval.c b/src/raddbg/raddbg_eval.c index b100e7565..7afddc07f 100644 --- a/src/raddbg/raddbg_eval.c +++ b/src/raddbg/raddbg_eval.c @@ -122,7 +122,7 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(themes) //- rjf: gather theme files { - String8 theme_folder = push_str8f(scratch.arena, "%S/raddbg/themes", get_process_info()->user_program_data_path); + String8 theme_folder = push_str8f(scratch.arena, "%S/raddbg/themes", get_process_info()->user_program_config_path); FileIter *it = file_iter_begin(scratch.arena, theme_folder, FileIterFlag_SkipFolders); for(FileInfo info = {0}; file_iter_next(scratch.arena, it, &info);) { diff --git a/src/win32/base/win32_base.c b/src/win32/base/win32_base.c index 62d0bdbf1..d4b8e31fe 100644 --- a/src/win32/base/win32_base.c +++ b/src/win32/base/win32_base.c @@ -1904,7 +1904,9 @@ w32_entry_point_caller(int argc, WCHAR **wargv) U16 *buffer = push_array_no_zero(scratch.arena, U16, size); if(SUCCEEDED(SHGetFolderPathW(0, CSIDL_APPDATA, 0, 0, (WCHAR*)buffer))) { - info->user_program_data_path = str8_from_16(arena, str16_cstring(buffer)); + String8 path = str8_from_16(arena, str16_cstring(buffer)); + info->user_program_state_path = path; + info->user_program_config_path = path; } scratch_end(scratch); }