cdrom: report read errors correctly
authornotaz <notasas@gmail.com>
Sat, 22 Oct 2022 16:20:26 +0000 (19:20 +0300)
committernotaz <notasas@gmail.com>
Sat, 22 Oct 2022 16:20:26 +0000 (19:20 +0300)
libpcsxcore/cdriso.c
libpcsxcore/cdrom.c

index 246b6a0..2a31950 100644 (file)
@@ -1238,7 +1238,7 @@ static int cdread_2048(FILE *f, unsigned int base, void *dest, int sector)
        sec2msf(sector + 2 * 75, (char *)&cdbuffer[12]);
        cdbuffer[12 + 3] = 1;
 
-       return ret;
+       return 12*2 + ret;
 }
 
 static unsigned char * CALLBACK ISOgetBuffer_compr(void) {
@@ -1540,7 +1540,7 @@ static boolean CALLBACK ISOreadTrack(unsigned char *time) {
        }
 
        ret = cdimg_read_func(cdHandle, 0, cdbuffer, sector);
-       if (ret < 0)
+       if (ret < 12*2 + 2048)
                return 0;
 
        if (subHandle != NULL) {
index b3e238b..41dc151 100644 (file)
@@ -463,7 +463,8 @@ static int ReadTrack(const u8 *time) {
        CDR_LOG("ReadTrack *** %02x:%02x:%02x\n", tmp[0], tmp[1], tmp[2]);
 
        read_ok = CDR_readTrack(tmp);
-       memcpy(cdr.Prev, tmp, 3);
+       if (read_ok)
+               memcpy(cdr.Prev, tmp, 3);
 
        if (CheckSBI(time))
                return read_ok;
@@ -1253,7 +1254,6 @@ static void cdrReadInterrupt(void)
 
        if (!read_ok) {
                CDR_LOG_I("cdrReadInterrupt() Log: err\n");
-               memset(cdr.Transfer, 0, DATA_SIZE);
                cdrReadInterruptSetResult(cdr.StatP | STATUS_ERROR);
                return;
        }