fix gameboy header-detection in libretro interface

This commit is contained in:
condret 2017-04-23 21:54:56 +00:00
parent 1ba2eefebe
commit d3b459ba0d
2 changed files with 20 additions and 10 deletions

View File

@ -99,16 +99,19 @@ bool utilIsGBAImage(const char* file)
bool utilIsGBImage(const char* file)
{
if (strlen(file) > 4) {
const char* p = strrchr(file, '.');
if (p != NULL) {
if ((_stricmp(p, ".dmg") == 0) || (_stricmp(p, ".gb") == 0) || (_stricmp(p, ".gbc") == 0) || (_stricmp(p, ".cgb") == 0) || (_stricmp(p, ".sgb") == 0))
return true;
}
}
return false;
FILE *fp;
bool ret = false;
char buffer[47];
if (!file || !(fd = fopen (file, "r"))) //TODO more checks here (does file exist, is it a file, a symlink or a blockdevice)
return ret;
fseek (fp, 0, SEEK_END);
if (ftell (fp) >= 0x8000) { //afaik there can be no gb-rom smaller than this
fseek (fp, 0x104, SEEK_SET);
fread (buffer, sizeof (char), 47, fp);
ret = !memcmp (buffer, gb_image_header, 47);
}
fclose (fp);
return ret;
}
// strip .gz or .z off end

View File

@ -16,3 +16,10 @@ extern const char *saveDotCodeFile;
extern bool skipSaveGameBattery;
extern bool skipSaveGameCheats;
#define MAX_CHEATS 100
const char gb_image_header[]={
0xce, 0xed, 0x66, 0x66, 0xcc, 0x0d, 0x00, 0x0b, 0x03, 0x73, 0x00,
0x83, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x08, 0x11, 0x1f, 0x88, 0x89,
0x00, 0x0e, 0xdc, 0xcc, 0x6e, 0xe6, 0xdd, 0xdd, 0xd9, 0x99, 0xbb,
0xbb, 0x67, 0x63, 0x6e, 0x0e, 0xec, 0xcc, 0xdd, 0xdc, 0x99, 0x9f,
0xbb, 0xb9, 0x33, 0x3e};