Просмотр исходного кода

AmiCommon: DiskFree/DiskSize for >2GB
AROS: fast BPTR Pointer (ABIv0)

git-svn-id: trunk@29222 -

marcus 10 лет назад
Родитель
Сommit
96ac520e73
1 измененных файлов с 17 добавлено и 5 удалено
  1. 17 5
      rtl/amicommon/dos.pp

+ 17 - 5
rtl/amicommon/dos.pp

@@ -104,17 +104,29 @@ end;
 
 function BADDR(bval: LongInt): Pointer; Inline;
 begin
+  {$if defined(AROS) or (not defined(AROS_FLAVOUR_BINCOMPAT))}
+  BADDR := Pointer(bval);
+  {$else}
   BADDR:=Pointer(bval Shl 2);
+  {$endif}
 end;
 
 function BSTR2STRING(s : Pointer): PChar; Inline;
 begin
+  {$if defined(AROS) or (not defined(AROS_FLAVOUR_BINCOMPAT))}
+  BSTR2STRING:=PChar(s);
+  {$else}
   BSTR2STRING:=PChar(BADDR(PtrInt(s)))+1;
+  {$endif}
 end;
 
 function BSTR2STRING(s : LongInt): PChar; Inline;
 begin
+  {$if defined(AROS) or (not defined(AROS_FLAVOUR_BINCOMPAT))}
+  BSTR2STRING:=PChar(s);
+  {$else}
   BSTR2STRING:=PChar(BADDR(s))+1;
+  {$endif}
 end;
 
 function IsLeapYear(Source : Word) : Boolean;
@@ -525,7 +537,7 @@ Function DiskFree(Drive: Byte): int64;
 Var
   MyLock      : LongInt;
   Inf         : pInfoData;
-  Free        : Longint;
+  Free        : Int64;
   myproc      : pProcess;
   OldWinPtr   : Pointer;
 Begin
@@ -539,8 +551,8 @@ Begin
   MyLock := dosLock(devicenames[deviceids[Drive]],SHARED_LOCK);
   If MyLock <> 0 then begin
      if Info(MyLock,Inf) <> 0 then begin
-        Free := (Inf^.id_NumBlocks * Inf^.id_BytesPerBlock) -
-                (Inf^.id_NumBlocksUsed * Inf^.id_BytesPerBlock);
+        Free := (Int64(Inf^.id_NumBlocks) * Inf^.id_BytesPerBlock) -
+                (Int64(Inf^.id_NumBlocksUsed) * Inf^.id_BytesPerBlock);
      end;
      Unlock(MyLock);
   end;
@@ -556,7 +568,7 @@ Function DiskSize(Drive: Byte): int64;
 Var
   MyLock      : LongInt;
   Inf         : pInfoData;
-  Size        : Longint;
+  Size        : Int64;
   myproc      : pProcess;
   OldWinPtr   : Pointer;
 Begin
@@ -570,7 +582,7 @@ Begin
   MyLock := dosLock(devicenames[deviceids[Drive]],SHARED_LOCK);
   If MyLock <> 0 then begin
      if Info(MyLock,Inf) <> 0 then begin
-        Size := (Inf^.id_NumBlocks * Inf^.id_BytesPerBlock);
+        Size := (Int64(Inf^.id_NumBlocks) * Inf^.id_BytesPerBlock);
      end;
      Unlock(MyLock);
   end;