(configuration.c)

- Fix Coverity leak
- Stylistic nits
This commit is contained in:
twinaphex 2018-02-17 11:55:39 +01:00
parent 242eef6a6d
commit 7e45bd93f6

View File

@ -2885,7 +2885,7 @@ static bool config_load_file(const char *path, bool set_defaults,
for(i = FILE_PATH_CGP_EXTENSION; i <= FILE_PATH_SLANGP_EXTENSION; i++) for(i = FILE_PATH_CGP_EXTENSION; i <= FILE_PATH_SLANGP_EXTENSION; i++)
{ {
enum file_path_enum ext = (enum file_path_enum)(i); enum file_path_enum ext = (enum file_path_enum)(i);
if(!strstr(file_path_str(ext), shader_ext)) if (!strstr(file_path_str(ext), shader_ext))
continue; continue;
if (check_shader_compatibility(ext)) if (check_shader_compatibility(ext))
@ -2949,16 +2949,21 @@ bool config_load_override(void)
config_file_t *new_conf = NULL; config_file_t *new_conf = NULL;
bool should_append = false; bool should_append = false;
rarch_system_info_t *system = runloop_get_system_info(); rarch_system_info_t *system = runloop_get_system_info();
const char *core_name = system ? system->info.library_name : NULL; const char *core_name = system ?
system->info.library_name : NULL;
const char *game_name = path_basename(path_get(RARCH_PATH_BASENAME)); const char *game_name = path_basename(path_get(RARCH_PATH_BASENAME));
if (string_is_empty(core_name) || string_is_empty(game_name)) if (string_is_empty(core_name) || string_is_empty(game_name))
return false; return false;
game_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); game_path = (char*)
core_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); malloc(PATH_MAX_LENGTH * sizeof(char));
buf = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); core_path = (char*)
config_directory = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); malloc(PATH_MAX_LENGTH * sizeof(char));
buf = (char*)
malloc(PATH_MAX_LENGTH * sizeof(char));
config_directory = (char*)
malloc(PATH_MAX_LENGTH * sizeof(char));
config_directory[0] = core_path[0] = game_path[0] = '\0'; config_directory[0] = core_path[0] = game_path[0] = '\0';
fill_pathname_application_special(config_directory, path_size, fill_pathname_application_special(config_directory, path_size,
@ -2983,7 +2988,8 @@ bool config_load_override(void)
/* If a core override exists, add its location to append_config_path */ /* If a core override exists, add its location to append_config_path */
if (new_conf) if (new_conf)
{ {
RARCH_LOG("[overrides] core-specific overrides found at %s.\n", core_path); RARCH_LOG("[overrides] core-specific overrides found at %s.\n",
core_path);
config_file_free(new_conf); config_file_free(new_conf);
path_set(RARCH_PATH_CONFIG_APPEND, core_path); path_set(RARCH_PATH_CONFIG_APPEND, core_path);
@ -2991,7 +2997,8 @@ bool config_load_override(void)
should_append = true; should_append = true;
} }
else else
RARCH_LOG("[overrides] no core-specific overrides found at %s.\n", core_path); RARCH_LOG("[overrides] no core-specific overrides found at %s.\n",
core_path);
/* Create a new config file from game_path */ /* Create a new config file from game_path */
new_conf = config_file_new(game_path); new_conf = config_file_new(game_path);
@ -3005,7 +3012,8 @@ bool config_load_override(void)
config_file_free(new_conf); config_file_free(new_conf);
RARCH_LOG("[overrides] game-specific overrides found at %s.\n", game_path); RARCH_LOG("[overrides] game-specific overrides found at %s.\n",
game_path);
if (should_append) if (should_append)
{ {
@ -3023,12 +3031,14 @@ bool config_load_override(void)
should_append = true; should_append = true;
} }
else else
RARCH_LOG("[overrides] no game-specific overrides found at %s.\n", game_path); RARCH_LOG("[overrides] no game-specific overrides found at %s.\n",
game_path);
if (!should_append) if (!should_append)
goto error; goto error;
/* Re-load the configuration with any overrides that might have been found */ /* Re-load the configuration with any overrides
* that might have been found */
buf[0] = '\0'; buf[0] = '\0';
/* Store the libretro_path we're using since it will be /* Store the libretro_path we're using since it will be
@ -3045,7 +3055,8 @@ bool config_load_override(void)
/* Restore the libretro_path we're using /* Restore the libretro_path we're using
* since it will be overwritten by the override when reloading. */ * since it will be overwritten by the override when reloading. */
path_set(RARCH_PATH_CORE, buf); path_set(RARCH_PATH_CORE, buf);
runloop_msg_queue_push(msg_hash_to_str(MSG_CONFIG_OVERRIDE_LOADED), 1, 100, true); runloop_msg_queue_push(msg_hash_to_str(MSG_CONFIG_OVERRIDE_LOADED),
1, 100, true);
/* Reset save paths. */ /* Reset save paths. */
retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_STATE_PATH, NULL); retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_STATE_PATH, NULL);
@ -3129,11 +3140,14 @@ bool config_load_remap(void)
return false; return false;
/* path to the directory containing retroarch.cfg (prefix) */ /* path to the directory containing retroarch.cfg (prefix) */
remap_directory = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); remap_directory = (char*)
malloc(PATH_MAX_LENGTH * sizeof(char));
/* final path for core-specific configuration (prefix+suffix) */ /* final path for core-specific configuration (prefix+suffix) */
core_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); core_path = (char*)
malloc(PATH_MAX_LENGTH * sizeof(char));
/* final path for game-specific configuration (prefix+suffix) */ /* final path for game-specific configuration (prefix+suffix) */
game_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); game_path = (char*)
malloc(PATH_MAX_LENGTH * sizeof(char));
remap_directory[0] = core_path[0] = game_path[0] = '\0'; remap_directory[0] = core_path[0] = game_path[0] = '\0';
strlcpy(remap_directory, strlcpy(remap_directory,
@ -3163,7 +3177,8 @@ bool config_load_remap(void)
RARCH_LOG("Remaps: game-specific remap found at %s.\n", game_path); RARCH_LOG("Remaps: game-specific remap found at %s.\n", game_path);
if (input_remapping_load_file(new_conf, game_path)) if (input_remapping_load_file(new_conf, game_path))
{ {
runloop_msg_queue_push(msg_hash_to_str(MSG_GAME_REMAP_FILE_LOADED), 1, 100, true); runloop_msg_queue_push(msg_hash_to_str(
MSG_GAME_REMAP_FILE_LOADED), 1, 100, true);
rarch_ctl(RARCH_CTL_SET_REMAPS_GAME_ACTIVE, NULL); rarch_ctl(RARCH_CTL_SET_REMAPS_GAME_ACTIVE, NULL);
goto success; goto success;
} }
@ -3183,7 +3198,8 @@ bool config_load_remap(void)
RARCH_LOG("Remaps: core-specific remap found at %s.\n", core_path); RARCH_LOG("Remaps: core-specific remap found at %s.\n", core_path);
if (input_remapping_load_file(new_conf, core_path)) if (input_remapping_load_file(new_conf, core_path))
{ {
runloop_msg_queue_push(msg_hash_to_str(MSG_CORE_REMAP_FILE_LOADED), 1, 100, true); runloop_msg_queue_push(
msg_hash_to_str(MSG_CORE_REMAP_FILE_LOADED), 1, 100, true);
rarch_ctl(RARCH_CTL_SET_REMAPS_CORE_ACTIVE, NULL); rarch_ctl(RARCH_CTL_SET_REMAPS_CORE_ACTIVE, NULL);
goto success; goto success;
} }
@ -3224,6 +3240,7 @@ success:
bool config_load_shader_preset(void) bool config_load_shader_preset(void)
{ {
unsigned idx; unsigned idx;
char parent_name[PATH_MAX_LENGTH];
size_t path_size = PATH_MAX_LENGTH * sizeof(char); size_t path_size = PATH_MAX_LENGTH * sizeof(char);
config_file_t *new_conf = NULL; config_file_t *new_conf = NULL;
char *shader_directory = NULL; char *shader_directory = NULL;
@ -3232,9 +3249,9 @@ bool config_load_shader_preset(void)
char *parent_path = NULL; char *parent_path = NULL;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
rarch_system_info_t *system = runloop_get_system_info(); rarch_system_info_t *system = runloop_get_system_info();
const char *core_name = system ? system->info.library_name : NULL; const char *core_name = system
? system->info.library_name : NULL;
const char *game_name = path_basename(path_get(RARCH_PATH_BASENAME)); const char *game_name = path_basename(path_get(RARCH_PATH_BASENAME));
char parent_name[PATH_MAX_LENGTH];
if (!string_is_empty(path_get(RARCH_PATH_BASENAME))) if (!string_is_empty(path_get(RARCH_PATH_BASENAME)))
fill_pathname_parent_dir_name(parent_name, path_get(RARCH_PATH_BASENAME), sizeof(parent_name)); fill_pathname_parent_dir_name(parent_name, path_get(RARCH_PATH_BASENAME), sizeof(parent_name));
@ -3248,18 +3265,23 @@ bool config_load_shader_preset(void)
return false; return false;
/* path to the directory containing retroarch.cfg (prefix) */ /* path to the directory containing retroarch.cfg (prefix) */
shader_directory = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); shader_directory = (char*)
malloc(PATH_MAX_LENGTH * sizeof(char));
/* final path for core-specific configuration (prefix+suffix) */ /* final path for core-specific configuration (prefix+suffix) */
core_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); core_path = (char*)
malloc(PATH_MAX_LENGTH * sizeof(char));
/* final path for game-specific configuration (prefix+suffix) */ /* final path for game-specific configuration (prefix+suffix) */
game_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); game_path = (char*)
malloc(PATH_MAX_LENGTH * sizeof(char));
/* final path for parent-dir-specific configuration (prefix+suffix) */ /* final path for parent-dir-specific configuration (prefix+suffix) */
parent_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); parent_path = (char*)
malloc(PATH_MAX_LENGTH * sizeof(char));
shader_directory[0] = core_path[0] = game_path[0] = '\0'; shader_directory[0] = core_path[0] = game_path[0] = '\0';
fill_pathname_join (shader_directory, settings->paths.directory_video_shader, fill_pathname_join (shader_directory,
"presets", path_size); settings->paths.directory_video_shader,
"presets", path_size);
RARCH_LOG("Shaders: preset directory: %s\n", shader_directory); RARCH_LOG("Shaders: preset directory: %s\n", shader_directory);
@ -3286,12 +3308,14 @@ bool config_load_shader_preset(void)
if (!new_conf) if (!new_conf)
{ {
RARCH_LOG("Shaders: no game-specific preset found at %s.\n", game_path); RARCH_LOG("Shaders: no game-specific preset found at %s.\n",
game_path);
continue; continue;
} }
/* Game shader preset exists, load it. */ /* Game shader preset exists, load it. */
RARCH_LOG("Shaders: game-specific shader preset found at %s.\n", game_path); RARCH_LOG("Shaders: game-specific shader preset found at %s.\n",
game_path);
retroarch_set_shader_preset(game_path); retroarch_set_shader_preset(game_path);
goto success; goto success;
} }
@ -3312,12 +3336,14 @@ bool config_load_shader_preset(void)
if (!new_conf) if (!new_conf)
{ {
RARCH_LOG("Shaders: no parent-dir-specific preset found at %s.\n", parent_path); RARCH_LOG("Shaders: no parent-dir-specific preset found at %s.\n",
parent_path);
continue; continue;
} }
/* Parent-dir shader preset exists, load it. */ /* Parent-dir shader preset exists, load it. */
RARCH_LOG("Shaders: parent-dir-specific shader preset found at %s.\n", parent_path); RARCH_LOG("Shaders: parent-dir-specific shader preset found at %s.\n",
parent_path);
retroarch_set_shader_preset(parent_path); retroarch_set_shader_preset(parent_path);
goto success; goto success;
} }
@ -3338,12 +3364,14 @@ bool config_load_shader_preset(void)
if (!new_conf) if (!new_conf)
{ {
RARCH_LOG("Shaders: no core-specific preset found at %s.\n", core_path); RARCH_LOG("Shaders: no core-specific preset found at %s.\n",
core_path);
continue; continue;
} }
/* Core shader preset exists, load it. */ /* Core shader preset exists, load it. */
RARCH_LOG("Shaders: core-specific shader preset found at %s.\n", core_path); RARCH_LOG("Shaders: core-specific shader preset found at %s.\n",
core_path);
retroarch_set_shader_preset(core_path); retroarch_set_shader_preset(core_path);
goto success; goto success;
} }
@ -3351,6 +3379,7 @@ bool config_load_shader_preset(void)
free(shader_directory); free(shader_directory);
free(core_path); free(core_path);
free(game_path); free(game_path);
free(parent_path);
return false; return false;
success: success:
@ -3368,14 +3397,19 @@ static void parse_config_file(void)
{ {
RARCH_LOG("[Config]: Loading default config.\n"); RARCH_LOG("[Config]: Loading default config.\n");
if (!path_is_empty(RARCH_PATH_CONFIG)) if (!path_is_empty(RARCH_PATH_CONFIG))
RARCH_LOG("[Config]: found default config: %s.\n", path_get(RARCH_PATH_CONFIG)); RARCH_LOG("[Config]: found default config: %s.\n",
path_get(RARCH_PATH_CONFIG));
} }
RARCH_LOG("[Config]: loading config from: %s.\n", path_get(RARCH_PATH_CONFIG)); RARCH_LOG("[Config]: loading config from: %s.\n",
if (config_load_file(path_get(RARCH_PATH_CONFIG), false, config_get_ptr())) path_get(RARCH_PATH_CONFIG));
if (config_load_file(path_get(RARCH_PATH_CONFIG),
false, config_get_ptr()))
return; return;
RARCH_ERR("[Config]: couldn't find config at path: \"%s\"\n", path_get(RARCH_PATH_CONFIG)); RARCH_ERR("[Config]: couldn't find config at path: \"%s\"\n",
path_get(RARCH_PATH_CONFIG));
} }
@ -3429,8 +3463,10 @@ static void save_keybind_hat(config_file_t *conf, const char *key,
config_set_string(conf, key, config); config_set_string(conf, key, config);
} }
static void save_keybind_joykey(config_file_t *conf, const char *prefix, static void save_keybind_joykey(config_file_t *conf,
const char *base, const struct retro_keybind *bind, bool save_empty) const char *prefix,
const char *base,
const struct retro_keybind *bind, bool save_empty)
{ {
char key[64]; char key[64];
@ -3450,8 +3486,10 @@ static void save_keybind_joykey(config_file_t *conf, const char *prefix,
config_set_uint64(conf, key, bind->joykey); config_set_uint64(conf, key, bind->joykey);
} }
static void save_keybind_axis(config_file_t *conf, const char *prefix, static void save_keybind_axis(config_file_t *conf,
const char *base, const struct retro_keybind *bind, bool save_empty) const char *prefix,
const char *base,
const struct retro_keybind *bind, bool save_empty)
{ {
char key[64]; char key[64];
unsigned axis = 0; unsigned axis = 0;
@ -3491,8 +3529,10 @@ static void save_keybind_axis(config_file_t *conf, const char *prefix,
} }
} }
static void save_keybind_mbutton(config_file_t *conf, const char *prefix, static void save_keybind_mbutton(config_file_t *conf,
const char *base, const struct retro_keybind *bind, bool save_empty) const char *prefix,
const char *base,
const struct retro_keybind *bind, bool save_empty)
{ {
char key[64]; char key[64];
@ -3502,25 +3542,39 @@ static void save_keybind_mbutton(config_file_t *conf, const char *prefix,
base, '_', "_mbtn", sizeof(key)); base, '_', "_mbtn", sizeof(key));
switch ( bind->mbutton ) switch ( bind->mbutton )
{ {
case RETRO_DEVICE_ID_MOUSE_LEFT:
case RETRO_DEVICE_ID_MOUSE_LEFT: config_set_uint64(conf, key, 1); break; config_set_uint64(conf, key, 1);
case RETRO_DEVICE_ID_MOUSE_RIGHT: config_set_uint64(conf, key, 2); break; break;
case RETRO_DEVICE_ID_MOUSE_MIDDLE: config_set_uint64(conf, key, 3); break; case RETRO_DEVICE_ID_MOUSE_RIGHT:
case RETRO_DEVICE_ID_MOUSE_BUTTON_4: config_set_uint64(conf, key, 4); break; config_set_uint64(conf, key, 2);
case RETRO_DEVICE_ID_MOUSE_BUTTON_5: config_set_uint64(conf, key, 5); break; break;
case RETRO_DEVICE_ID_MOUSE_MIDDLE:
case RETRO_DEVICE_ID_MOUSE_WHEELUP: config_set_string(conf, key, "wu"); break; config_set_uint64(conf, key, 3);
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN: config_set_string(conf, key, "wd"); break; break;
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP: config_set_string(conf, key, "whu"); break; case RETRO_DEVICE_ID_MOUSE_BUTTON_4:
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN: config_set_string(conf, key, "whd"); break; config_set_uint64(conf, key, 4);
break;
default: case RETRO_DEVICE_ID_MOUSE_BUTTON_5:
if ( save_empty ) { config_set_uint64(conf, key, 5);
config_set_string(conf, key, file_path_str(FILE_PATH_NUL)); break;
} case RETRO_DEVICE_ID_MOUSE_WHEELUP:
break; config_set_string(conf, key, "wu");
} break;
case RETRO_DEVICE_ID_MOUSE_WHEELDOWN:
config_set_string(conf, key, "wd");
break;
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP:
config_set_string(conf, key, "whu");
break;
case RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELDOWN:
config_set_string(conf, key, "whd");
break;
default:
if (save_empty)
config_set_string(conf, key, file_path_str(FILE_PATH_NUL));
break;
}
} }
/** /**
@ -3644,8 +3698,10 @@ bool config_save_autoconf_profile(const char *path, unsigned user)
if (string_is_empty(path)) if (string_is_empty(path))
return false; return false;
buf = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); buf = (char*)
autoconf_file = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); malloc(PATH_MAX_LENGTH * sizeof(char));
autoconf_file = (char*)
malloc(PATH_MAX_LENGTH * sizeof(char));
buf[0] = autoconf_file[0] = '\0'; buf[0] = autoconf_file[0] = '\0';
path_new = strdup(path); path_new = strdup(path);
@ -3666,7 +3722,7 @@ bool config_save_autoconf_profile(const char *path, unsigned user)
fill_pathname_join(buf, autoconf_dir, joypad_ident, path_size); fill_pathname_join(buf, autoconf_dir, joypad_ident, path_size);
if(path_is_directory(buf)) if (path_is_directory(buf))
{ {
char *buf_new = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); char *buf_new = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
@ -3706,7 +3762,7 @@ bool config_save_autoconf_profile(const char *path, unsigned user)
pid_user = input_config_get_pid(user); pid_user = input_config_get_pid(user);
vid_user = input_config_get_vid(user); vid_user = input_config_get_vid(user);
if(pid_user && vid_user) if (pid_user && vid_user)
{ {
config_set_int(conf, "input_vendor_id", config_set_int(conf, "input_vendor_id",
vid_user); vid_user);
@ -4133,23 +4189,29 @@ bool config_save_overrides(int override_type)
char cfg[64]; char cfg[64];
cfg[0] = '\0'; cfg[0] = '\0';
if (settings->uints.input_device[i] != overrides->uints.input_device[i]) if (settings->uints.input_device[i]
!= overrides->uints.input_device[i])
{ {
snprintf(cfg, sizeof(cfg), "input_device_p%u", i + 1); snprintf(cfg, sizeof(cfg), "input_device_p%u", i + 1);
config_set_int(conf, cfg, overrides->uints.input_device[i]); config_set_int(conf, cfg, overrides->uints.input_device[i]);
} }
if (settings->uints.input_joypad_map[i] != overrides->uints.input_joypad_map[i])
if (settings->uints.input_joypad_map[i]
!= overrides->uints.input_joypad_map[i])
{ {
snprintf(cfg, sizeof(cfg), "input_player%u_joypad_index", i + 1); snprintf(cfg, sizeof(cfg), "input_player%u_joypad_index", i + 1);
config_set_int(conf, cfg, overrides->uints.input_joypad_map[i]); config_set_int(conf, cfg, overrides->uints.input_joypad_map[i]);
} }
if (settings->uints.input_libretro_device[i] != overrides->uints.input_libretro_device[i]) if (settings->uints.input_libretro_device[i]
!= overrides->uints.input_libretro_device[i])
{ {
snprintf(cfg, sizeof(cfg), "input_libretro_device_p%u", i + 1); snprintf(cfg, sizeof(cfg), "input_libretro_device_p%u", i + 1);
config_set_int(conf, cfg, overrides->uints.input_libretro_device[i]); config_set_int(conf, cfg, overrides->uints.input_libretro_device[i]);
} }
if (settings->uints.input_analog_dpad_mode[i] != overrides->uints.input_analog_dpad_mode[i])
if (settings->uints.input_analog_dpad_mode[i]
!= overrides->uints.input_analog_dpad_mode[i])
{ {
snprintf(cfg, sizeof(cfg), "input_player%u_analog_dpad_mode", i + 1); snprintf(cfg, sizeof(cfg), "input_player%u_analog_dpad_mode", i + 1);
config_set_int(conf, cfg, overrides->uints.input_analog_dpad_mode[i]); config_set_int(conf, cfg, overrides->uints.input_analog_dpad_mode[i]);