fix gameboy header-detection in libretro interface
This commit is contained in:
parent
1ba2eefebe
commit
d3b459ba0d
|
@ -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
|
||||
|
|
|
@ -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};
|
||||
|
|
Loading…
Reference in New Issue