瀏覽代碼

* diskfree doserror fix (merged)

peter 25 年之前
父節點
當前提交
f07f30990e
共有 1 個文件被更改,包括 46 次插入39 次删除
  1. 46 39
      rtl/go32v2/dos.pp

+ 46 - 39
rtl/go32v2/dos.pp

@@ -464,47 +464,51 @@ VAR
 BEGIN
 BEGIN
  if (swap(dosversion)>=$070A) AND LFNSupport then
  if (swap(dosversion)>=$070A) AND LFNSupport then
   begin
   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
   end
  else
  else
   begin
   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;
 end;
 end;
 
 
@@ -1135,7 +1139,10 @@ End;
 end.
 end.
 {
 {
   $Log$
   $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
     * removed previous fsplit() patch as it's not the correct behaviour for
       LFNs. The code showing the bug could easily be adapted (merged)
       LFNs. The code showing the bug could easily be adapted (merged)