From f07f30990e1e154a694f77be6953538a0b515093 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 11 Oct 2000 15:38:03 +0000 Subject: [PATCH] * diskfree doserror fix (merged) --- rtl/go32v2/dos.pp | 85 +++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 39 deletions(-) diff --git a/rtl/go32v2/dos.pp b/rtl/go32v2/dos.pp index 93fbc68c1b..c34576adaa 100644 --- a/rtl/go32v2/dos.pp +++ b/rtl/go32v2/dos.pp @@ -464,47 +464,51 @@ VAR BEGIN if (swap(dosversion)>=$070A) AND LFNSupport then begin - S:='C:\'#0; - if Drive=0 then - begin - GetDir(Drive,S); - Setlength(S,4); - S[4]:=#0; - end - else - S[1]:=chr(Drive+64); - Rec.Strucversion:=0; - dosmemput(tb_segment,tb_offset,Rec,SIZEOF(ExtendedFat32FreeSpaceRec)); - dosmemput(tb_segment,tb_offset+Sizeof(ExtendedFat32FreeSpaceRec)+1,S[1],4); - dosregs.dx:=tb_offset+Sizeof(ExtendedFat32FreeSpaceRec)+1; - dosregs.ds:=tb_segment; - dosregs.di:=tb_offset; - dosregs.es:=tb_segment; - dosregs.cx:=Sizeof(ExtendedFat32FreeSpaceRec); - dosregs.ax:=$7303; - msdos(dosregs); - copyfromdos(rec,Sizeof(ExtendedFat32FreeSpaceRec)); - if Free then - Do_DiskData:=int64(rec.AvailAllocUnits)*rec.SecPerClus*rec.BytePerSec - else - Do_DiskData:=int64(rec.TotalAllocUnits)*rec.SecPerClus*rec.BytePerSec; - if doserror<>0 THEN {No error clausule in int except cf} - Do_DiskData:=-1; + S:='C:\'#0; + if Drive=0 then + begin + GetDir(Drive,S); + Setlength(S,4); + S[4]:=#0; + end + else + S[1]:=chr(Drive+64); + Rec.Strucversion:=0; + dosmemput(tb_segment,tb_offset,Rec,SIZEOF(ExtendedFat32FreeSpaceRec)); + dosmemput(tb_segment,tb_offset+Sizeof(ExtendedFat32FreeSpaceRec)+1,S[1],4); + dosregs.dx:=tb_offset+Sizeof(ExtendedFat32FreeSpaceRec)+1; + dosregs.ds:=tb_segment; + dosregs.di:=tb_offset; + dosregs.es:=tb_segment; + dosregs.cx:=Sizeof(ExtendedFat32FreeSpaceRec); + dosregs.ax:=$7303; + msdos(dosregs); + copyfromdos(rec,Sizeof(ExtendedFat32FreeSpaceRec)); + if dosregs.eax<>-1 THEN {No error clausule in int except cf} + begin + copyfromdos(rec,Sizeof(ExtendedFat32FreeSpaceRec)); + if Free then + Do_DiskData:=int64(rec.AvailAllocUnits)*rec.SecPerClus*rec.BytePerSec + else + Do_DiskData:=int64(rec.TotalAllocUnits)*rec.SecPerClus*rec.BytePerSec; + end + else + Do_DiskData:=-1; end else begin - dosregs.dl:=drive; - dosregs.ah:=$36; - msdos(dosregs); - if dosregs.ax<>$FFFF then - begin - if Free then - Do_DiskData:=int64(dosregs.ax)*dosregs.bx*dosregs.cx - else - Do_DiskData:=int64(dosregs.ax)*dosregs.cx*dosregs.dx; - end - else - do_diskdata:=-1; + dosregs.dl:=drive; + dosregs.ah:=$36; + msdos(dosregs); + if dosregs.ax<>$FFFF then + begin + if Free then + Do_DiskData:=int64(dosregs.ax)*dosregs.bx*dosregs.cx + else + Do_DiskData:=int64(dosregs.ax)*dosregs.cx*dosregs.dx; + end + else + do_diskdata:=-1; end; end; @@ -1135,7 +1139,10 @@ End; end. { $Log$ - Revision 1.9 2000-09-06 20:47:34 peter + Revision 1.10 2000-10-11 15:38:03 peter + * diskfree doserror fix (merged) + + Revision 1.9 2000/09/06 20:47:34 peter * removed previous fsplit() patch as it's not the correct behaviour for LFNs. The code showing the bug could easily be adapted (merged)