off_t psisoimg_offs, cdimg_base;
unsigned int t, cd_length;
unsigned int offsettab[8];
off_t psisoimg_offs, cdimg_base;
unsigned int t, cd_length;
unsigned int offsettab[8];
- ret = fseeko(cdHandle, pbp_hdr.psar_offs, SEEK_SET);
+ psar_offs = SWAP32(pbp_hdr.psar_offs);
+
+ ret = fseeko(cdHandle, psar_offs, SEEK_SET);
if (fread(psar_sig, 1, sizeof(psar_sig), cdHandle) != sizeof(psar_sig))
goto fail_io;
psar_sig[10] = 0;
if (strcmp(psar_sig, "PSTITLEIMG") == 0) {
// multidisk image?
if (fread(psar_sig, 1, sizeof(psar_sig), cdHandle) != sizeof(psar_sig))
goto fail_io;
psar_sig[10] = 0;
if (strcmp(psar_sig, "PSTITLEIMG") == 0) {
// multidisk image?
if (!strncmp(md.subtype, "RW", 2)) {
subChanMixed = TRUE;
if (!strcmp(md.subtype, "RW_RAW"))
subChanRaw = TRUE;
}
}
if (!strncmp(md.subtype, "RW", 2)) {
subChanMixed = TRUE;
if (!strcmp(md.subtype, "RW_RAW"))
subChanRaw = TRUE;
}
}
ti[md.track].type = !strncmp(md.type, "AUDIO", 5) ? CDDA : DATA;
sec2msf(frame_offset + md.pregap, ti[md.track].start);
sec2msf(md.frames, ti[md.track].length);
ti[md.track].type = !strncmp(md.type, "AUDIO", 5) ? CDDA : DATA;
sec2msf(frame_offset + md.pregap, ti[md.track].start);
sec2msf(md.frames, ti[md.track].length);
- frame_offset += md.pregap + md.frames + md.postgap;
- file_offset += md.frames + md.postgap;
+ // XXX: what about postgap?
+ frame_offset += md.frames;
+ file_offset += md.frames;
fseek(subHandle, sector * SUB_FRAMESIZE, SEEK_SET);
if (fread(subbuffer, 1, SUB_FRAMESIZE, subHandle) != SUB_FRAMESIZE)
/* Faulty subchannel data shouldn't cause a read failure */
fseek(subHandle, sector * SUB_FRAMESIZE, SEEK_SET);
if (fread(subbuffer, 1, SUB_FRAMESIZE, subHandle) != SUB_FRAMESIZE)
/* Faulty subchannel data shouldn't cause a read failure */