-static unsigned char* CALLBACK ISOgetBufferSub(void) {
- if ((subHandle != NULL || subChanMixed) && !subChanMissing) {
- return subbuffer;
+static unsigned char* CALLBACK ISOgetBufferSub(int sector) {
+ if (pregapOffset && sector >= pregapOffset) {
+ sector -= 2 * 75;
+ if (sector < pregapOffset) // ?
+ return NULL;
+ }
+
+ if (cdimg_read_sub_func != NULL) {
+ if (cdimg_read_sub_func(cdHandle, sector) != SUB_FRAMESIZE)
+ return NULL;
+ }
+ else if (subHandle != NULL) {
+ if (fseek(subHandle, sector * SUB_FRAMESIZE, SEEK_SET))
+ return NULL;
+ if (fread(subbuffer, 1, SUB_FRAMESIZE, subHandle) != SUB_FRAMESIZE)
+ return NULL;
+ }
+ else {
+ return NULL;