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(md.track == 1)
- md.pregap = 150;
- else
- sec2msf(msf2sec(ti[md.track-1].length) + md.pregap, ti[md.track-1].length);
+ SysPrintf("chd: %s\n", meta);
+
+ if (md.track == 1) {
+ 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;
if (dest != cdbuffer) // copy avoid HACK
memcpy(dest, chd_img->buffer[chd_img->sector_in_hunk],
CD_FRAMESIZE_RAW);
if (dest != cdbuffer) // copy avoid HACK
memcpy(dest, chd_img->buffer[chd_img->sector_in_hunk],
CD_FRAMESIZE_RAW);
boolean isMode1ISO = FALSE;
char alt_bin_filename[MAXPATHLEN];
const char *bin_filename;
boolean isMode1ISO = FALSE;
char alt_bin_filename[MAXPATHLEN];
const char *bin_filename;
- sprintf(image_str, "Loaded CD Image: %s", GetIsoFile());
+ snprintf(image_str, sizeof(image_str) - 6*4 - 1,
+ "Loaded CD Image: %s", GetIsoFile());
strcat(image_str, "[+chd]");
CDR_getBuffer = ISOgetBuffer_chd;
cdimg_read_func = cdread_chd;
strcat(image_str, "[+chd]");
CDR_getBuffer = ISOgetBuffer_chd;
cdimg_read_func = cdread_chd;
}
ret = cdimg_read_func(cdHandle, 0, cdbuffer, sector);
}
ret = cdimg_read_func(cdHandle, 0, cdbuffer, sector);
return 0;
if (subHandle != NULL) {
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 */
return 0;
if (subHandle != NULL) {
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 */