static const char *fs_uae_state_dir_path() { char *free_state_dir_name = NULL; static const char *path; if (!path) { fs_log("fs_uae_state_dir:\n"); path = fs_config_get_const_string("state_dir"); if (path && path[0]) { fs_log("state_dir was explicitly set to: %s\n", path); char *expanded_path = fs_uae_expand_path(path); path = fs_uae_resolve_path(expanded_path, FS_UAE_DIR_PATHS); free(expanded_path); return path; } const char *base = fs_uae_save_states_dir(); fs_log("save_states_dir: %s\n", base); const char *state_dir_name = fs_config_get_const_string( "state_dir_name"); if (!state_dir_name || !state_dir_name[0]) { if (g_fs_uae_config_file_path) { char *n = g_path_get_basename(g_fs_uae_config_file_path); for (int i = strlen(n) - 1; i >= 0; i--) { if (n[i] == '.') { n[i] = '\0'; break; } } free_state_dir_name = g_strdup(n); state_dir_name = free_state_dir_name; g_free(n); } if (!state_dir_name || !state_dir_name[0]) { state_dir_name = "Default"; } fs_log("save_dir_name not set, using %s\n", state_dir_name); } path = g_build_filename(base, state_dir_name, NULL); } if (free_state_dir_name) { g_free(free_state_dir_name); } return path; }
static char *get_or_create_default_dir(const char *name, const char *key1, const char *key2, const char *dashed_key, int create, int cache) { char *path = NULL; if (path == NULL && key1 != NULL) { path = fs_config_get_string(key1); } if (path == NULL && key2 != NULL) { path = fs_config_get_string(key2); } if (path == NULL && dashed_key != NULL) { path = read_custom_path(dashed_key); } if (path == NULL) { if (cache) { path = g_build_filename(fs_uae_cache_dir(), name, NULL); } else { path = g_build_filename(fs_uae_base_dir(), name, NULL); } } char *expanded_path = fs_uae_expand_path_and_free(path); path = fs_uae_resolve_path(expanded_path, FS_UAE_DIR_PATHS); free(expanded_path); if (create) { int result = g_mkdir_with_parents(path, 0755); if (result == -1) { fs_emu_warning("Could not create %s directory", name); free(path); path = g_strdup(fs_uae_base_dir()); } } fs_log("- using \"%s\" directory \"%s\"\n", name, path); return path; }
char *fs_uae_resolve_path_and_free(char *name, int type) { char *result = fs_uae_resolve_path(name, type); free(name); return result; }