changeset 2211:5e6e589efbad

Strip off .gz extension for gzipped ROMs in load_media so system detection based on filename works with such files
author Michael Pavone <pavone@retrodev.com>
date Sun, 28 Aug 2022 22:42:36 -0700
parents 3e591869d135
children 71b0cb7c34a6
files blastem.c
diffstat 1 files changed, 20 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }