Mercurial > repos > blastem
diff config.c @ 859:46bb673eed4e
Load config file and rom.db from appropriate locations on Android
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 04 Nov 2015 22:48:27 -0800 |
parents | 7ed55a361e79 |
children | 69a6ec208111 |
line wrap: on
line diff
--- a/config.c Wed Nov 04 22:48:09 2015 -0800 +++ b/config.c Wed Nov 04 22:48:27 2015 -0800 @@ -114,34 +114,84 @@ return ret; } +#ifdef __ANDROID__ +#include <SDL.h> + +tern_node * parse_config_file_assets(char *config_path) +{ + tern_node * ret = NULL; + SDL_RWops *rw = SDL_RWFromFile(config_path, "rb"); + if (!rw) { + goto open_fail; + } + size_t config_size = rw->size(rw); + if (!config_size) { + goto config_empty; + } + + char * config_data = malloc(config_size+1); + if (SDL_RWread(rw, config_data, 1, config_size) != config_size) { + goto config_read_fail; + } + config_data[config_size] = '\0'; + + ret = parse_config(config_data); +config_read_fail: + free(config_data); +config_empty: + SDL_RWclose(rw); +open_fail: + return ret; +} + +tern_node * load_config() +{ + char *path = alloc_concat(SDL_AndroidGetInternalStoragePath(), "/blastem.cfg"); + tern_node * ret = parse_config_file(path); + free(path); + if (ret) { + return ret; + } + + ret = parse_config_file_assets("default.cfg"); + if (ret) { + return ret; + } + + fatal_error("Failed to find a config file in internal storage or in the blastem APK\n"); + //this will never get reached, but the compiler doesn't know that. Let's make it happy + return NULL; +} + +#else + tern_node * load_config() { char * exe_dir; char * home = get_home_dir(); - if (!home) { - goto load_in_app_dir; + if (home) { + char * path = alloc_concat(home, "/.config/blastem/blastem.cfg"); + tern_node * ret = parse_config_file(path); + free(path); + if (ret) { + return ret; + } } - char * path = alloc_concat(home, "/.config/blastem/blastem.cfg"); - tern_node * ret = parse_config_file(path); - if (ret) { - goto success; - } - free(path); -load_in_app_dir: + exe_dir = get_exe_dir(); - if (!exe_dir) { - goto no_config; + if (exe_dir) { + path = alloc_concat(exe_dir, "/default.cfg"); + ret = parse_config_file(path); + free(path); + if (ret) { + return ret; + } } - path = alloc_concat(exe_dir, "/default.cfg"); - ret = parse_config_file(path); - free(path); -success: - if (ret) { - return ret; - } -no_config: + fatal_error("Failed to find a config file in ~/.config/blastem/blastem.cfg or in the blastem executable directory\n"); //this will never get reached, but the compiler doesn't know that. Let's make it happy return NULL; } +#endif +