Ver Fonte

Change TFile.Position to Int64.

Jordan Russell há 2 meses atrás
pai
commit
95633ed353

+ 2 - 2
Projects/Src/Compiler.CompressionHandler.pas

@@ -145,7 +145,7 @@ begin
     FDestFileIsDiskSlice := False;
     FDestFile := TFile.Create(Filename, fdOpenExisting, faReadWrite, fsNone);
     FDestFile.SeekToEnd;
-    FSliceBaseOffset := FDestFile.Position.Lo;
+    FSliceBaseOffset := FDestFile.Position;
     FSliceBytesLeft := Cardinal(DiskSliceSize) - FSliceBaseOffset;
   end;
 end;
@@ -212,7 +212,7 @@ begin
     NewSlice('');
 
   FChunkFirstSlice := FCurSlice;
-  FChunkStartOffset := FDestFile.Position.Lo - FSliceBaseOffset;
+  FChunkStartOffset := FDestFile.Position - FSliceBaseOffset;
   FDestFile.WriteBuffer(ZLIBID, SizeOf(ZLIBID));
   Dec(FSliceBytesLeft, SizeOf(ZLIBID));
   FChunkBytesRead := To64(0);

+ 3 - 4
Projects/Src/Compiler.ExeUpdateFunc.pas

@@ -64,13 +64,12 @@ const
   OffsetOfDllCharacteristics = $46;
 var
   Header: TImageFileHeader;
-  Ofs: Cardinal;
   OptMagic, DllChars, OrigDllChars: Word;
 begin
   if SeekToPEHeader(F) then begin
     if (F.Read(Header, SizeOf(Header)) = SizeOf(Header)) and
        (Header.SizeOfOptionalHeader = 224) then begin
-      Ofs := F.Position.Lo;
+      const Ofs = F.Position;
       if (F.Read(OptMagic, SizeOf(OptMagic)) = SizeOf(OptMagic)) and
          (OptMagic = IMAGE_NT_OPTIONAL_HDR32_MAGIC) then begin
         { Update DllCharacteristics }
@@ -236,12 +235,12 @@ procedure UpdateVersionInfo(const F: TCustomFile;
   end;
 
 var
-  ResOffset, ResSize: Cardinal;
+  ResSize: Cardinal;
   VersRes: Pointer;
 begin
   { Locate the resource }
   ResSize := SeekToResourceData(F, Cardinal(RT_VERSION), 1);
-  ResOffset := F.Position.Lo;
+  const ResOffset = F.Position;
 
   GetMem(VersRes, ResSize);
   try

+ 4 - 5
Projects/Src/Compiler.SetupCompiler.pas

@@ -6882,11 +6882,10 @@ var
     end;
 
   var
-    Pos: Cardinal;
     J: Integer;
     W: TCompressedBlockWriter;
   begin
-    Pos := F.Position.Lo;
+    const StartPosition = F.Position;
 
     F.WriteBuffer(SetupID, SizeOf(SetupID));
 
@@ -6998,7 +6997,7 @@ var
       W.Free;
     end;
 
-    Result := F.Position.Lo - Pos;
+    Result := F.Position - StartPosition;
   end;
 
   function CreateSetup0File: Longint;
@@ -8312,9 +8311,9 @@ begin
             FillChar(SetupLdrOffsetTable, SizeOf(SetupLdrOffsetTable), 0);
             SetupLdrOffsetTable.ID := SetupLdrOffsetTableID;
             SetupLdrOffsetTable.Version := SetupLdrOffsetTableVersion;
-            SetupLdrOffsetTable.Offset0 := ExeFile.Position.Lo;
+            SetupLdrOffsetTable.Offset0 := ExeFile.Position;
             SizeOfHeaders := WriteSetup0(ExeFile);
-            SetupLdrOffsetTable.OffsetEXE := ExeFile.Position.Lo;
+            SetupLdrOffsetTable.OffsetEXE := ExeFile.Position;
             CompressSetupE32(SetupE32, ExeFile, SetupLdrOffsetTable.UncompressedSizeEXE,
               SetupLdrOffsetTable.CRCEXE);
             SetupLdrOffsetTable.TotalSize := ExeFile.Size;

+ 1 - 1
Projects/Src/Setup.Install.pas

@@ -1016,7 +1016,7 @@ var
     F.WriteBuffer(UniqueValue, SizeOf(UniqueValue));
 
     UninstallerMsgTail.ID := UninstallerMsgTailID;
-    UninstallerMsgTail.Offset := F.Position.Lo;
+    UninstallerMsgTail.Offset := F.Position;
     WriteMsgData(F);
     F.WriteBuffer(UninstallerMsgTail, SizeOf(UninstallerMsgTail));
   end;

+ 3 - 2
Projects/Src/Setup.UninstallLog.pas

@@ -1246,9 +1246,10 @@ begin
     end;
     Flush;
 
-    if F.Position.Hi <> 0 then
+    const NewEndOffset = F.Position;
+    if NewEndOffset > High(UInt32) then
       InternalError('EndOffset range exceeded');
-    Header.EndOffset := F.Position.Lo;
+    Header.EndOffset := UInt32(NewEndOffset);
     F.Seek(0);
     Header.ID := UninstallLogID[InstallMode64Bit];
     WriteSafeHeaderString(Header.AppId, AppId, SizeOf(Header.AppId));

+ 7 - 11
Projects/Src/Shared.FileClass.pas

@@ -28,7 +28,7 @@ type
   private
     function GetCappedSize: Cardinal;
   protected
-    function GetPosition: Integer64; virtual; abstract;
+    function GetPosition: Int64; virtual; abstract;
     function GetSize: Int64; virtual; abstract;
   public
     class procedure RaiseError(ErrorCode: DWORD);
@@ -40,7 +40,7 @@ type
     procedure WriteAnsiString(const S: AnsiString);
     procedure WriteBuffer(const Buffer; Count: Cardinal); virtual; abstract;
     property CappedSize: Cardinal read GetCappedSize;
-    property Position: Integer64 read GetPosition;
+    property Position: Int64 read GetPosition;
     property Size: Int64 read GetSize;
   end;
 
@@ -52,7 +52,7 @@ type
     function CreateHandle(const AFilename: String;
       ACreateDisposition: TFileCreateDisposition; AAccess: TFileAccess;
       ASharing: TFileSharing): THandle; virtual;
-    function GetPosition: Integer64; override;
+    function GetPosition: Int64; override;
     function GetSize: Int64; override;
   public
     constructor Create(const AFilename: String;
@@ -76,7 +76,7 @@ type
     function ClipCount(DesiredCount: Cardinal): Cardinal;
   protected
     procedure AllocMemory(const ASize: Cardinal);
-    function GetPosition: Integer64; override;
+    function GetPosition: Int64; override;
     function GetSize: Int64; override;
   public
     constructor Create(const AFilename: String);
@@ -248,14 +248,10 @@ begin
     FILE_ATTRIBUTE_NORMAL, 0);
 end;
 
-function TFile.GetPosition: Integer64;
+function TFile.GetPosition: Int64;
 begin
-  { Store into an Int64 as it has 8-byte alignment, just in case the function
-    wants that (but it probably doesn't care) }
-  var LPosition: Int64;
-  if not SetFilePointerEx(FHandle, 0, @LPosition, FILE_CURRENT) then
+  if not SetFilePointerEx(FHandle, 0, @Result, FILE_CURRENT) then
     RaiseLastError;
-  Result := LPosition;
 end;
 
 function TFile.GetSize: Int64;
@@ -367,7 +363,7 @@ begin
     Result := DesiredCount;
 end;
 
-function TMemoryFile.GetPosition: Integer64;
+function TMemoryFile.GetPosition: Int64;
 begin
   Result := FPosition;
 end;