mirror of https://github.com/FDOS/kernel.git
Correct int21/ax=4401: returned AL = old value, should set CY and DE_INVLDDATA
if DH!=0 (RBIL is a little confusing here). git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@878 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
fed4d61e90
commit
74970d953b
|
@ -106,10 +106,17 @@ COUNT DosDevIOctl(lregs * r)
|
||||||
/* can't set the status of a file. */
|
/* can't set the status of a file. */
|
||||||
if (!(flags & SFT_FDEVICE))
|
if (!(flags & SFT_FDEVICE))
|
||||||
return DE_INVLDFUNC;
|
return DE_INVLDFUNC;
|
||||||
|
/* RBIL says this is only for DOS < 6, but MSDOS 7.10 */
|
||||||
|
/* returns this as well... and some buggy program relies*/
|
||||||
|
/* on it :( */
|
||||||
|
if (r->DH != 0)
|
||||||
|
return DE_INVLDDATA;
|
||||||
|
|
||||||
|
/* Undocumented: AL should get the old value */
|
||||||
|
r->AL = s->sft_flags_lo;
|
||||||
/* Set it to what we got in the DL register from the */
|
/* Set it to what we got in the DL register from the */
|
||||||
/* user. */
|
/* user. */
|
||||||
r->AL = s->sft_flags_lo = SFT_FDEVICE | r->DL;
|
s->sft_flags_lo = SFT_FDEVICE | r->DL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x02:
|
case 0x02:
|
||||||
|
|
Loading…
Reference in New Issue