Browse Source

* diskfree doserror fix (merged)

peter 25 years ago
parent
commit
f07f30990e
1 changed files with 46 additions and 39 deletions
  1. 46 39
      rtl/go32v2/dos.pp

+ 46 - 39
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)