X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fcdriso.c;h=d6672f98cb557a3c078173e68ca777eddc0841aa;hp=f7359ce94136f0918736c9fa070287eeeaf1535b;hb=bdd050c3ed792381df2e744fee5b7ee80b93fd68;hpb=4295c49158ad9ce6a20235d5ea5d45139ff63fe9 diff --git a/libpcsxcore/cdriso.c b/libpcsxcore/cdriso.c index f7359ce9..d6672f98 100644 --- a/libpcsxcore/cdriso.c +++ b/libpcsxcore/cdriso.c @@ -34,6 +34,7 @@ #include #include #endif +#include #include unsigned int cdrIsoMultidiskCount; @@ -1213,6 +1214,8 @@ static void PrintTracks(void) { // file for playback static long CALLBACK ISOopen(void) { boolean isMode1ISO = FALSE; + char alt_bin_filename[MAXPATHLEN]; + const char *bin_filename; if (cdHandle != NULL) { return 0; // it's already open @@ -1220,6 +1223,8 @@ static long CALLBACK ISOopen(void) { cdHandle = fopen(GetIsoFile(), "rb"); if (cdHandle == NULL) { + SysPrintf(_("Could't open '%s' for reading: %s\n"), + GetIsoFile(), strerror(errno)); return -1; } @@ -1268,27 +1273,30 @@ static long CALLBACK ISOopen(void) { fseek(cdHandle, 0, SEEK_END); // maybe user selected metadata file instead of main .bin .. + bin_filename = GetIsoFile(); if (ftell(cdHandle) < 2352 * 0x10) { static const char *exts[] = { ".bin", ".BIN", ".img", ".IMG" }; - char tmp[MAXPATHLEN], *p; - FILE *tmpf; + FILE *tmpf = NULL; size_t i; + char *p; - strncpy(tmp, GetIsoFile(), sizeof(tmp)); - tmp[MAXPATHLEN - 1] = '\0'; - if (strlen(tmp) >= 4) { - p = tmp + strlen(tmp) - 4; + strncpy(alt_bin_filename, bin_filename, sizeof(alt_bin_filename)); + alt_bin_filename[MAXPATHLEN - 1] = '\0'; + if (strlen(alt_bin_filename) >= 4) { + p = alt_bin_filename + strlen(alt_bin_filename) - 4; for (i = 0; i < sizeof(exts) / sizeof(exts[0]); i++) { strcpy(p, exts[i]); - tmpf = fopen(tmp, "rb"); - if (tmpf != NULL) { - fclose(cdHandle); - cdHandle = tmpf; - fseek(cdHandle, 0, SEEK_END); + tmpf = fopen(alt_bin_filename, "rb"); + if (tmpf != NULL) break; - } } } + if (tmpf != NULL) { + bin_filename = alt_bin_filename; + fclose(cdHandle); + cdHandle = tmpf; + fseek(cdHandle, 0, SEEK_END); + } } // guess whether it is mode1/2048 @@ -1314,7 +1322,7 @@ static long CALLBACK ISOopen(void) { // make sure we have another handle open for cdda if (numtracks > 1 && ti[1].handle == NULL) { - ti[1].handle = fopen(GetIsoFile(), "rb"); + ti[1].handle = fopen(bin_filename, "rb"); } cdda_cur_sector = 0; cdda_file_offset = 0;