}
}
-void BuildPPFCache() {
+void BuildPPFCache(const char *fname) {
FILE *ppffile;
char buffer[12];
char method, undo = 0, blockcheck = 0;
if (CdromId[0] == '\0') return;
- // Generate filename in the format of SLUS_123.45
- buffer[0] = toupper(CdromId[0]);
- buffer[1] = toupper(CdromId[1]);
- buffer[2] = toupper(CdromId[2]);
- buffer[3] = toupper(CdromId[3]);
- buffer[4] = '_';
- buffer[5] = CdromId[4];
- buffer[6] = CdromId[5];
- buffer[7] = CdromId[6];
- buffer[8] = '.';
- buffer[9] = CdromId[7];
- buffer[10] = CdromId[8];
- buffer[11] = '\0';
-
- sprintf(szPPF, "%s%s", Config.PatchesDir, buffer);
-
- ppffile = fopen(szPPF, "rb");
+ if (!fname) {
+ // Generate filename in the format of SLUS_123.45
+ buffer[0] = toupper(CdromId[0]);
+ buffer[1] = toupper(CdromId[1]);
+ buffer[2] = toupper(CdromId[2]);
+ buffer[3] = toupper(CdromId[3]);
+ buffer[4] = '_';
+ buffer[5] = CdromId[4];
+ buffer[6] = CdromId[5];
+ buffer[7] = CdromId[6];
+ buffer[8] = '.';
+ buffer[9] = CdromId[7];
+ buffer[10] = CdromId[8];
+ buffer[11] = '\0';
+
+ sprintf(szPPF, "%s%s", Config.PatchesDir, buffer);
+ fname = szPPF;
+ }
+ ppffile = fopen(fname, "rb");
if (ppffile == NULL) return;
memset(buffer, 0, 5);
goto fail_io;
if (strcmp(buffer, "PPF") != 0) {
- SysPrintf(_("Invalid PPF patch: %s.\n"), szPPF);
+ SysPrintf(_("Invalid PPF patch: %s.\n"), fname);
fclose(ppffile);
return;
}
FillPPFCache(); // build address array
- SysPrintf(_("Loaded PPF %d.0 patch: %s.\n"), method + 1, szPPF);
+ SysPrintf(_("Loaded PPF %d.0 patch: %s.\n"), method + 1, fname);
+ return;
fail_io:
#ifndef NDEBUG
// redump.org SBI files, slightly different handling from PCSX-Reloaded
unsigned char *sbi_sectors;
+int sbi_len;
int LoadSBI(const char *fname, int sector_count) {
int good_sectors = 0;
if (sbihandle == NULL)
return -1;
- sbi_sectors = calloc(1, sector_count / 8);
+ sbi_len = (sector_count + 7) / 8;
+ sbi_sectors = calloc(1, sbi_len);
if (sbi_sectors == NULL)
goto end;
break;
}
- fclose(sbihandle);
- return 0;
-
end:
if (!clean_eof)
SysPrintf(_("SBI: parse failure at 0x%lx\n"), ftell(sbihandle));
if (!good_sectors) {
free(sbi_sectors);
sbi_sectors = NULL;
+ sbi_len = 0;
}
fclose(sbihandle);
return sbi_sectors ? 0 : -1;
if (sbi_sectors) {
free(sbi_sectors);
sbi_sectors = NULL;
+ sbi_len = 0;
}
}