Browse Source

Fixed AbstractMem bugs on files +2Gb

PascalCoin 3 years ago
parent
commit
a4ee22fec0

+ 4 - 4
src/libraries/abstractmem/UAbstractMem.pas

@@ -472,7 +472,7 @@ begin
   LZone.Clear;
   // @[APosition] - SizeOfAbstractMemPosition() = position to size
   LZone.position := APosition;
-  if Read(APosition - SizeOfAbstractMemPosition(),LZone.size,SizeOfAbstractMemPosition()) <> SizeOfAbstractMemPosition() then raise EAbstractMem.Create('Dispose: Cannot read size');
+  if Read(APosition - Int64(SizeOfAbstractMemPosition()),LZone.size,SizeOfAbstractMemPosition()) <> SizeOfAbstractMemPosition() then raise EAbstractMem.Create('Dispose: Cannot read size');
   Dispose(LZone);
 end;
 
@@ -522,7 +522,7 @@ begin
   end else begin
     AAMZone.Clear;
     AAMZone.position := APosition;
-    if Read(APosition - SizeOfAbstractMemPosition(),AAMZone.size,SizeOfAbstractMemPosition())<>SizeOfAbstractMemPosition() then Exit(False);
+    if Read(APosition - Int64(SizeOfAbstractMemPosition()),AAMZone.size,SizeOfAbstractMemPosition())<>SizeOfAbstractMemPosition() then Exit(False);
     Result := (AAMZone.position + AAMZone.size <= FNextAvailablePos)  And (IsValidUsedSize(AAMZone.size));
   end;
 end;
@@ -667,7 +667,7 @@ begin
       SaveHeader; // NextAvailablePos updated, save changes
     end;
     // Save size at first position
-    Write(Result.position - SizeOfAbstractMemPosition(),Result.size,SizeOfAbstractMemPosition());
+    Write(Result.position - Int64(SizeOfAbstractMemPosition()),Result.size,SizeOfAbstractMemPosition());
   Finally
     FLock.Release;
   End;
@@ -723,7 +723,7 @@ end;
 
 procedure TAbstractMem.SaveToStream(AStream: TStream);
 var LBuffer : TBytes;
-  i : Integer;
+  i : Int64;
   LNextStart : Int64;
 begin
   CheckInitialized(False);

+ 2 - 2
src/libraries/abstractmem/UCacheMem.pas

@@ -555,7 +555,7 @@ end;
 function TCacheMem.LoadDataExt(var ABuffer; AStartPos : Int64; ASize: Integer): Boolean;
   // Will return a Pointer to AStartPos
 
-  function _CaptureDataFromOnNeedDataProc(ACapturePosStart, ACaptureSize : Integer; var ACapturedData : TBytes; out ACapturedSize : Integer) : Boolean;
+  function _CaptureDataFromOnNeedDataProc(ACapturePosStart : Int64; ACaptureSize : Integer; var ACapturedData : TBytes; out ACapturedSize : Integer) : Boolean;
   {$IFDEF ABSTRACTMEM_TESTING_MODE}var i : integer;{$ENDIF}
   begin
     SetLength(ACapturedData,ACaptureSize);
@@ -702,7 +702,7 @@ end;
 procedure TCacheMem.SaveToCacheExt(const ABuffer; ASize: Integer; AStartPos: Int64; AMarkAsPendingToSave : Boolean);
 var
   LNewP, PCurrent, PToDelete : PCacheMemData;
-  LLastAddedPosition, LBytesCount : Integer;
+  LLastAddedPosition, LBytesCount : Int64;
 begin
   if ASize<0 then raise ECacheMem.Create(Format('Invalid save size %d',[ASize]));
   if ASize=0 then Exit;