aboutsummaryrefslogtreecommitdiff
path: root/dos
diff options
context:
space:
mode:
Diffstat (limited to 'dos')
-rw-r--r--dos/chud.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/dos/chud.c b/dos/chud.c
index 498d97b..f3b0beb 100644
--- a/dos/chud.c
+++ b/dos/chud.c
@@ -98,9 +98,8 @@ static int ioctl_read_abs_sector(uint8_t drive, void *buffer, uint32_t sector, i
regs.h.cl = CHUDISK_IOCTL_DISK_READ_ABS_SECTOR;
regs.x.dx = FP_OFF(&ciod);
- if (intdos(&regs, &regs) == 0) {
- return 0;
- } else {
+ intdos(&regs, &regs);
+ if (regs.x.cflag) {
struct DOSERROR err;
// Get the extended error from DOS, more useful than a simple EACCES
// and translate to watcom's errno
@@ -118,13 +117,19 @@ static int ioctl_read_abs_sector(uint8_t drive, void *buffer, uint32_t sector, i
case DOS_ERROR_READ_FAULT:
case DOS_ERROR_WRITE_FAULT:
case DOS_ERROR_GEN_FAILURE:
+ case DOS_ERROR_CRC:
errno = EIO;
break;
+ case DOS_ERROR_NOT_ENOUGH_MEMORY:
+ errno = ENOMEM;
+ break;
default:
errno = EFAULT;
break;
}
return -errno;
+ } else {
+ return 0; // No error
}
}