Skip to content
This repository has been archived by the owner on Nov 21, 2020. It is now read-only.

Commit

Permalink
Fix ISO reading, code cleaning
Browse files Browse the repository at this point in the history
  • Loading branch information
dd86k committed Mar 8, 2019
1 parent 16d9191 commit 8d3735f
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 131 deletions.
248 changes: 122 additions & 126 deletions src/etc.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,143 +12,139 @@
* Note: Start seeking from the lowest value!
*/
void scan_etc() {
if (_ddseek(0x3c, SEEK_SET) == 0) { // Palm Database Format
unsigned long int b[2];
_ddread(&b, sizeof(b));
char *mt;
switch (b[0]) { // LOW
case ADOBE_LOW:
mt = "Palm Database (Adobe Reader)";
if (_ddseek(0x3c, SEEK_SET)) goto _END; // Palm Database Format
char *mt;
uint32_t b[2];
_ddread(b, sizeof(b));
switch (b[0]) { // LOW
case ADOBE_LOW:
mt = "Palm Database (Adobe Reader)";
break;
case BOOKMOBI_LOW:
scan_mobi();
return;
case PALMDOC_LOW:
switch (b[1]) {
case TEALDOC_HIGH:
mt = "Palm Database (TealDoc)";
break;
case BOOKMOBI_LOW:
scan_mobi();
default: // PALMDOC_HIGH
scan_palmdoc();
return;
case PALMDOC_LOW:
switch (b[1]) {
case TEALDOC_HIGH:
mt = "Palm Database (TealDoc)";
break;
default: // PALMDOC_HIGH
scan_palmdoc();
return;
}
break;
case BDICTY_LOW:
mt = "Palm Database (BDicty)";
break;
case DB_LOW:
mt = "Palm Database (DB)";
break;
case EREADER0_LOW: case EREADER1_LOW:
switch (b[1]) {
case PLUCKER_HIGH:
mt = "Palm Database (Plucker)";
break;
case QUICKSHEET_HIGH:
mt = "Palm Database (QuickSheet)";
break;
case TEALMEAL_HIGH:
mt = "Palm Database (TealMeal)";
break;
case TEALPAINT_HIGH:
mt = "Palm Database (TailPaint)";
break;
default: // EREADER0_HIGH/EREADER1_HIGH
mt = "Palm Database (eReader)";
break;
}
break;
case FIREVIEWER_LOW:
mt = "Palm Database (FireViewer)";
break;
case HANDBASE_LOW:
mt = "Palm Database (HanDBase)";
break;
case INFOVIEW_LOW:
switch (b[1]) {
case TEALINFO_HIGH:
mt = "Palm Database (TealInfo)";
break;
default:
mt = "Palm Database (InfoView)";
break;
}
break;
case ISILO_LOW:
mt = "Palm Database (iSilo)";
break;
case ISILO3_LOW:
mt = "Palm Database (iSilo 3)";
break;
case JFILE_LOW:
mt = "Palm Database (JFile)";
break;
case JFILEPRO_LOW:
mt = "Palm Database (JFile Pro)";
break;
case LIST_LOW:
mt = "Palm Database (LIST)";
break;
case MOBILEDB_LOW:
mt = "Palm Database (MobileDB)";
break;
case SUPERMEMO_LOW:
mt = "Palm Database (SuperMemo)";
break;
case THINKDB_LOW:
mt = "Palm Database (ThinKDB)";
break;
case TIDES_LOW:
mt = "Palm Database (Tides)";
break;
case TOMERAIDER_LOW:
mt = "Palm Database (TomeRaider)";
break;
case WEASEL_LOW:
mt = "Palm Database (Weasel)";
}
break;
case BDICTY_LOW:
mt = "Palm Database (BDicty)";
break;
case DB_LOW:
mt = "Palm Database (DB)";
break;
case EREADER0_LOW: case EREADER1_LOW:
switch (b[1]) {
case PLUCKER_HIGH:
mt = "Palm Database (Plucker)";
break;
case QUICKSHEET_HIGH:
mt = "Palm Database (QuickSheet)";
break;
case TEALMEAL_HIGH:
mt = "Palm Database (TealMeal)";
break;
case TEALPAINT_HIGH:
mt = "Palm Database (TailPaint)";
break;
default: // EREADER0_HIGH/EREADER1_HIGH
mt = "Palm Database (eReader)";
break;
case WORDSMITH_LOW:
mt = "Palm Database (WordSmith)";
}
break;
case FIREVIEWER_LOW:
mt = "Palm Database (FireViewer)";
break;
case HANDBASE_LOW:
mt = "Palm Database (HanDBase)";
break;
case INFOVIEW_LOW:
switch (b[1]) {
case TEALINFO_HIGH:
mt = "Palm Database (TealInfo)";
break;
default:
mt = "Palm Database (InfoView)";
break;
default: goto MOBI_OUT;
}
reportn(mt);
palmdb_name();
return;
} else goto _END;
break;
case ISILO_LOW:
mt = "Palm Database (iSilo)";
break;
case ISILO3_LOW:
mt = "Palm Database (iSilo 3)";
break;
case JFILE_LOW:
mt = "Palm Database (JFile)";
break;
case JFILEPRO_LOW:
mt = "Palm Database (JFile Pro)";
break;
case LIST_LOW:
mt = "Palm Database (LIST)";
break;
case MOBILEDB_LOW:
mt = "Palm Database (MobileDB)";
break;
case SUPERMEMO_LOW:
mt = "Palm Database (SuperMemo)";
break;
case THINKDB_LOW:
mt = "Palm Database (ThinKDB)";
break;
case TIDES_LOW:
mt = "Palm Database (Tides)";
break;
case TOMERAIDER_LOW:
mt = "Palm Database (TomeRaider)";
break;
case WEASEL_LOW:
mt = "Palm Database (Weasel)";
break;
case WORDSMITH_LOW:
mt = "Palm Database (WordSmith)";
break;
default: goto MOBI_OUT;
}
reportn(mt);
palmdb_name();
return;
MOBI_OUT:

if (_ddseek(0x101, SEEK_SET) == 0) { // Tar files
char b[sizeof(TAR)];
_ddread(&b, sizeof(TAR));
if (strcmp(b, TAR) == 0 ||
strcmp(b, GNUTAR) == 0) {
scan_tar();
return;
}
} else goto _END;
if (_ddseek(0x101, SEEK_SET)) goto _END; // Tar files
char btar[sizeof(TAR)];
_ddread(btar, sizeof(TAR));
if (strcmp(btar, TAR) == 0 || strcmp(btar, GNUTAR) == 0) {
scan_tar();
return;
}

if (_ddseek(0x8001, SEEK_SET) == 0) { // ISO files
char b[5];
_ddread(&b, 5);
if (strcmp(b, ISO) == 0) {
scan_iso(); return;
}
if (_ddseek(0x8001, SEEK_SET)) goto _END; // ISO files
char biso[5];
_ddread(biso, 5);
if (strncmp(biso, ISO, 5) == 0) {
scan_iso(); return;
}

if (_ddseek(0x8801, SEEK_SET)) goto _END;
_ddread(&b, 5);
if (strcmp(b, ISO) == 0) {
scan_iso(); return;
}
if (_ddseek(0x8801, SEEK_SET)) goto _END; // ISO files
_ddread(biso, 5);
if (strncmp(biso, ISO, 5) == 0) {
scan_iso(); return;
}

if (_ddseek(0x9001, SEEK_SET)) goto _END;
_ddread(&b, 5);
if (strcmp(b, ISO) == 0) {
scan_iso(); return;
}
} //else goto _END;
if (_ddseek(0x9001, SEEK_SET)) goto _END; // ISO files
_ddread(biso, 5);
if (strncmp(biso, ISO, 5) == 0) {
scan_iso(); return;
}

_END: // If file is smaller than our seeks and/or didn't find anything
//TODO: Detect text?
//TODO: Detect text?
report_unknown();
}
8 changes: 4 additions & 4 deletions src/ff.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ void scan(int *error) {
switch (s) {
case 0x00000100: {
uint8_t b[12];
_ddread(&b, sizeof(b));
_ddread(b, sizeof(b));
uint32_t *p = (uint32_t *)b;
switch (*p) { // b[0..4]
case 0x5349534D: // "MSIS"
Expand Down Expand Up @@ -182,7 +182,7 @@ void scan(int *error) {
case 0x14000000: case 0x18000000:
case 0x1C000000: case 0x20000000: {
uint32_t b[2];
_ddread(&b, sizeof(b));
_ddread(b, sizeof(b));
switch (*b) {
case 0x70797466: // "ftyp"
switch (*(b + 1)) {
Expand Down Expand Up @@ -304,7 +304,7 @@ void scan(int *error) {

case 0x46445025: { // "%PDF" | "-n.n" (n=digit)
uint8_t b[5];
_ddread(&b, 4);
_ddread(b, 4);
b[4] = 0;
reportf("PDF%s document\n", b);
return;
Expand Down Expand Up @@ -462,7 +462,7 @@ void scan(int *error) {
r = "WAD2";
WAD: { // Fixes "expression expected" on clang-alpine
int b[2]; // Reads as ints.
_ddread(&b, sizeof(b));
_ddread(b, sizeof(b));
reportf("%s, %d entries at %Xh\n", r, b[0], b[1]);
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ int _ddread(void *buffer, size_t size) {

int _ddseek(int position, int mode) {
#ifdef _WIN32
return SetFilePointer(f, position, NULL, mode) == 0xFFFFFFFF;
return SetFilePointer(f, position, NULL, mode) == INVALID_SET_FILE_POINTER;
#else
return fseek(f, position, mode);
#endif
Expand Down

0 comments on commit 8d3735f

Please # to comment.