Hi! - bugfix for INT21/440b (change NetRetry if DX is _non_zero). - small code optimization.
--- Begin Message ---diff -ruNp old/kernel/ioctl.c new/kernel/ioctl.c --- old/kernel/ioctl.c 2004-04-13 13:38:00.000000000 +0000 +++ new/kernel/ioctl.c 2004-04-24 07:59:16.000000000 +0000 @@ -280,12 +280,10 @@ COUNT DosDevIOctl(lregs * r) r->AX = 0; /* (lock/unlock logical/physical volume) */ break; /* simulate success for MS-DOS 7+ SCANDISK etc. --LG */ } - if (((r->AL == 0x04) && !(dpbp->dpb_device->dh_attr & ATTR_IOCTL)) - || ((r->AL == 0x05) && !(dpbp->dpb_device->dh_attr & ATTR_IOCTL)) - || ((r->AL == 0x11) - && !(dpbp->dpb_device->dh_attr & ATTR_QRYIOCTL)) - || ((r->AL == 0x0d) - && !(dpbp->dpb_device->dh_attr & ATTR_GENIOCTL))) + if ((UBYTE)(~1 & r->AL) == 0x04 /* AL==4 or 5 */ + && !(dpbp->dpb_device->dh_attr & ATTR_IOCTL) || + r->AL == 0x11 && !(dpbp->dpb_device->dh_attr & ATTR_QRYIOCTL) || + r->AL == 0x0d && !(dpbp->dpb_device->dh_attr & ATTR_GENIOCTL)) { return DE_INVLDFUNC; } @@ -302,12 +300,11 @@ COUNT DosDevIOctl(lregs * r) { r->AX = (CharReqHdr.r_status & S_BUSY) ? 1 : 0; } - - else if (r->AL == 0x04 || r->AL == 0x05) + else if ((UBYTE)(~1 & r->AL) == 0x04) /* AL==4 or 5 */ { r->AX = CharReqHdr.r_count; } - else if (r->AL == 0x0d || r->AL == 0x11) + else /*if (r->AL == 0x0d || r->AL == 0x11)*/ { r->AX = CharReqHdr.r_status; } @@ -346,10 +343,9 @@ COUNT DosDevIOctl(lregs * r) break; case 0x0b: - /* skip, it's a special case. */ - NetDelay = r->CX; - if (!r->DX) + if (r->DX) /* skip, it's a special case */ NetRetry = r->DX; + NetDelay = r->CX; break; default: @@ -357,4 +353,3 @@ COUNT DosDevIOctl(lregs * r) } return SUCCESS; } -
--- End Message ---
