diff options
Diffstat (limited to 'core.c')
-rw-r--r-- | core.c | 51 |
1 files changed, 41 insertions, 10 deletions
@@ -1,4 +1,5 @@ #include <dlfcn.h> +#include <dirent.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> @@ -274,32 +275,62 @@ static void set_directories(const char *core_name) { #ifndef MINUI char cwd[MAX_PATH]; #endif + + char picoarch_root[MAX_PATH] = ""; + DIR* dir; + + /* Example: + * Old save / config dir: ~/.picoarch-gambatte + * New save / config dir: ~/.picoarch/data/gambatte + * System dir: ./system + * + * FunKey S: + * System dir: ~/.picoarch/system + * + * MinUI: + * Save / config dir: ~/.picoarch-gambatte + * System dir: ~/.picoarch-gambatte + */ if (home != NULL) { snprintf(dst, len, "%s/.picoarch-%s/", home, core_name); +#ifdef MINUI mkdir(dst, 0755); + strncpy(config_dir, save_dir, MAX_PATH-1); + strncpy(system_dir, save_dir, MAX_PATH-1); +#else + snprintf(picoarch_root, MAX_PATH, "%s/.picoarch", home); + mkdir(picoarch_root, 0755); + + dir = opendir(dst); + if (dir) { + /* Use old save dir if exists */ + closedir(dir); + } else { + snprintf(dst, len, "%s/data", picoarch_root); + mkdir(dst, 0755); + snprintf(dst, len, "%s/data/%s/", picoarch_root, core_name); + mkdir(dst, 0755); + } } strncpy(config_dir, save_dir, MAX_PATH-1); -#ifdef MINUI - strncpy(system_dir, save_dir, MAX_PATH-1); -#else - #ifdef FUNKEY_S - if (home != NULL) { - snprintf(system_dir, MAX_PATH, "%s/.picoarch", home); - mkdir(system_dir, 0755); - snprintf(system_dir, MAX_PATH, "%s/.picoarch/system", home); + if (strlen(picoarch_root)) { + snprintf(system_dir, MAX_PATH, "%s/system", picoarch_root); mkdir(system_dir, 0755); } else -#endif +#endif /* FUNKEY_S */ if (getcwd(cwd, MAX_PATH)) { snprintf(system_dir, MAX_PATH, "%s/system", cwd); mkdir(system_dir, 0755); } else { PA_FATAL("Can't find system directory"); } -#endif +#endif /* MINUI */ + PA_INFO("Config dir: %s\n", config_dir); + PA_INFO("Save dir: %s\n", save_dir); + PA_INFO("System dir: %s\n", system_dir); } static bool pa_environment(unsigned cmd, void *data) { |