changeset 2160:3f09312685e3

Fix loading CD bios from absolute path
author Michael Pavone <pavone@retrodev.com>
date Tue, 24 May 2022 18:31:12 -0700
parents 2ed402b4c1fb
children 6a954675d634
files segacd.c
diffstat 1 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/segacd.c	Tue May 24 09:11:12 2022 -0700
+++ b/segacd.c	Tue May 24 18:31:12 2022 -0700
@@ -1426,7 +1426,21 @@
 		key = "system\0scd_bios_us\0";
 	}
 	char *bios_path = tern_find_path_default(config, key, (tern_val){.ptrval = "cdbios.bin"}, TVAL_PTR).ptrval;
-	cd->rom = (uint16_t *)read_bundled_file(bios_path, &firmware_size);
+	if (is_absolute_path(bios_path)) {
+		FILE *f = fopen(bios_path, "rb");
+		if (f) {
+			long to_read = file_size(f);
+			cd->rom = malloc(to_read);
+			firmware_size = fread(cd->rom, 1, to_read, f);
+			if (!firmware_size) {
+				free(cd->rom);
+				cd->rom = NULL;
+			}
+			fclose(f);
+		}
+	} else {
+		cd->rom = (uint16_t *)read_bundled_file(bios_path, &firmware_size);
+	}
 	if (!cd->rom) {
 		fatal_error("Failed to load Sega CD BIOS from %s\n", bios_path);
 	}