diff --git a/file_path.c b/file_path.c index 4ff3f5911a..0c305156fd 100644 --- a/file_path.c +++ b/file_path.c @@ -417,6 +417,22 @@ void fill_pathname_base(char *out, const char *in_path, size_t size) else ptr = in_path; + /* In case of compression, we also have to consider paths like + * /path/to/archive.7z#mygame.img + * and + * /path/to/archive.7z#folder/mygame.img + * basename would be mygame.img in both cases + */ + +#ifdef HAVE_COMPRESSION + const char *ptr_bak = ptr; + ptr = strchr(ptr,'#'); + if (ptr) + ptr++; + else + ptr = ptr_bak; +#endif + rarch_assert(strlcpy(out, ptr, size) < size); } diff --git a/retroarch.c b/retroarch.c index 1cb7268cb7..4b1ba0e323 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1022,7 +1022,7 @@ static void set_basename(const char *path) char *dst = NULL; strlcpy(g_extern.fullpath, path, sizeof(g_extern.fullpath)); - strlcpy(g_extern.basename, path, sizeof(g_extern.basename)); + fill_pathname_base(g_extern.basename, path, sizeof(g_extern.basename)); if ((dst = strrchr(g_extern.basename, '.'))) *dst = '\0';