# HG changeset patch # User Michael Pavone # Date 1661751756 25200 # Node ID 5e6e589efbad70e7a1311efbdf874e72627c5543 # Parent 3e591869d13519362dde9dabbd432ad5bcca2b23 Strip off .gz extension for gzipped ROMs in load_media so system detection based on filename works with such files diff -r 3e591869d135 -r 5e6e589efbad blastem.c --- a/blastem.c Sun Aug 28 14:32:17 2022 -0700 +++ b/blastem.c Sun Aug 28 22:42:36 2022 -0700 @@ -194,11 +194,24 @@ } return make_iso_media(dst, filename); } - free(ext); + ROMFILE f = romopen(filename, "rb"); if (!f) { + free(ext); return 0; } +#ifndef DISABLE_ZLIB + char *to_free = NULL; + if (!gzdirect(f) && ext && !strcasecmp(ext, "gz")) { + size_t without_gz = strlen(filename) - 2; + to_free = calloc(1, without_gz); + memcpy(to_free, filename, without_gz - 1); + to_free[without_gz - 1] = 0; + free(ext); + filename = to_free; + ext = path_extension(filename); + } +#endif //DISABLE_ZLIB if (sizeof(header) != romread(header, 1, sizeof(header), f)) { fatal_error("Error reading from %s\n", filename); @@ -241,7 +254,7 @@ } dst->dir = path_dirname(filename); dst->name = basename_no_extension(filename); - dst->extension = path_extension(filename); + dst->extension = ext; dst->size = ret; romclose(f); if (!strcasecmp(dst->extension, "cue")) { @@ -257,6 +270,11 @@ } } } +#ifndef DISABLE_ZLIB + if (to_free) { + free(to_free); + } +#endif return ret; }