diff --git a/libretro-common/file/file_path.c b/libretro-common/file/file_path.c index 6107d6d98a..84a24e1e4f 100644 --- a/libretro-common/file/file_path.c +++ b/libretro-common/file/file_path.c @@ -585,6 +585,16 @@ void fill_pathname_join(char *out_path, retro_assert(strlcat(out_path, path, size) < size); } +void fill_pathname_join_special_ext(char *out_path, + const char *dir, const char *path, + const char *last, const char *ext, + size_t size) +{ + fill_pathname_join(out_path, dir, path, size); + fill_string_join(out_path, last, size); + strlcat(out_path, ext, size); +} + void fill_pathname_join_concat(char *out_path, const char *dir, const char *path, const char *concat, diff --git a/libretro-common/include/file/file_path.h b/libretro-common/include/file/file_path.h index 236991534a..9e753c0096 100644 --- a/libretro-common/include/file/file_path.h +++ b/libretro-common/include/file/file_path.h @@ -310,6 +310,11 @@ void fill_pathname_resolve_relative(char *out_path, const char *in_refpath, void fill_pathname_join(char *out_path, const char *dir, const char *path, size_t size); +void fill_pathname_join_special_ext(char *out_path, + const char *dir, const char *path, + const char *last, const char *ext, + size_t size); + void fill_pathname_join_concat(char *out_path, const char *dir, const char *path, const char *concat, diff --git a/retroarch.c b/retroarch.c index da8b473ef0..b1d18ad545 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1219,11 +1219,10 @@ bool retroarch_validate_game_options(char *s, size_t len, bool mkdir) APPLICATION_SPECIAL_DIRECTORY_CONFIG); /* Concatenate strings into full paths for game_path */ - fill_pathname_join(s, - config_directory, core_name, len); - fill_string_join(s, game_name, len); - strlcat(s, - file_path_str(FILE_PATH_OPT_EXTENSION), len); + fill_pathname_join_special_ext(s, + config_directory, core_name, game_name, + file_path_str(FILE_PATH_OPT_EXTENSION), + len); fill_pathname_join(core_path, config_directory, core_name, sizeof(core_path));