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:
Bart Oldeman 2004-04-13 20:37:30 +00:00
parent fed4d61e90
commit 74970d953b
1 changed files with 8 additions and 1 deletions

View File

@ -106,10 +106,17 @@ COUNT DosDevIOctl(lregs * r)
/* can't set the status of a file. */
if (!(flags & SFT_FDEVICE))
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 */
/* user. */
r->AL = s->sft_flags_lo = SFT_FDEVICE | r->DL;
s->sft_flags_lo = SFT_FDEVICE | r->DL;
break;
case 0x02: