This commit is contained in:
EH 2026-06-19 02:57:05 +00:00 committed by GitHub
commit b9aaefb15a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 33 additions and 5 deletions

View file

@ -270,6 +270,7 @@ begin
end
else begin
FTarStream := TAbVirtualMemoryStream.Create;
TAbVirtualMemoryStream(FTarStream).SwapFileDirectory := ExtractFileDir(FArchiveName);
{ Decompress and send to tar LoadArchive }
DecompressToStream(FTarStream);
SwapToTar;

View file

@ -300,6 +300,7 @@ begin
end
else begin
FTarStream := TAbVirtualMemoryStream.Create;
TAbVirtualMemoryStream(FTarStream).SwapFileDirectory := ExtractFileDir(FArchiveName);
{ Decompress and send to tar LoadArchive }
DecompressToStream(FTarStream);
SwapToTar;

View file

@ -1097,6 +1097,7 @@ begin
end
else begin
FTarStream := TAbVirtualMemoryStream.Create;
TAbVirtualMemoryStream(FTarStream).SwapFileDirectory := ExtractFileDir(FArchiveName);
GzHelp.ReadHeader;
repeat
GzHelp.ExtractItemData(FTarStream);

View file

@ -172,6 +172,7 @@ begin
FLzmaStream := FStream;
FLzmaItem := FItemList;
FTarStream := TAbVirtualMemoryStream.Create;
TAbVirtualMemoryStream(FTarStream).SwapFileDirectory := ExtractFileDir(aArchiveName);
FTarList := TAbArchiveList.Create(True);
end;
{ -------------------------------------------------------------------------- }

View file

@ -517,10 +517,21 @@ var
hFile: System.THandle;
TempPath : String;
begin
{ Default to the system temp directory; upgrade to Dir if it exists and is
writable. Using the archive's own directory avoids /tmp tmpfs size limits
when packing large archives. }
TempPath := AbGetTempDirectory;
if mbDirectoryExists(Dir) then
TempPath := IncludeTrailingPathDelimiter(Dir)
else
TempPath := AbGetTempDirectory;
begin
{ Quick writeability probe: try to create and immediately remove a file. }
hFile := mbFileCreate(IncludeTrailingPathDelimiter(Dir) + '~probe');
if hFile <> feInvalidHandle then
begin
FileClose(hFile);
mbDeleteFile(IncludeTrailingPathDelimiter(Dir) + '~probe');
TempPath := IncludeTrailingPathDelimiter(Dir);
end;
end;
Result := GetTempName(TempPath + 'VMS');

View file

@ -435,8 +435,16 @@ begin
if (vmsSwapHandle <= 0) then begin
vmsSwapHandle := 0;
mbDeleteFile(vmsSwapFileName);
raise EAbVMSErrorOpenSwap.Create( vmsSwapFileName );
raise EAbVMSErrorOpenSwap.Create( vmsSwapFileName );
end;
{ On POSIX systems, unlink the file immediately after opening so that
the kernel reclaims disk space automatically if the process crashes
before the destructor runs. The handle remains valid for read/write
until it is closed normally by vmsSwapFileDestroy. }
{$IF DEFINED(UNIX)}
mbDeleteFile(vmsSwapFileName);
vmsSwapFileName := '';
{$ENDIF}
vmsSwapFileSize := 0;
end;
end;
@ -445,7 +453,10 @@ procedure TAbVirtualMemoryStream.vmsSwapFileDestroy;
begin
if (vmsSwapHandle <> 0) then begin
FileClose(vmsSwapHandle);
mbDeleteFile(vmsSwapFileName);
{ On POSIX the file was already unlinked in vmsSwapFileCreate, so
vmsSwapFileName is empty and there is nothing left to delete. }
if (vmsSwapFileName <> '') then
mbDeleteFile(vmsSwapFileName);
vmsSwapHandle := 0;
end;
end;

View file

@ -293,6 +293,7 @@ begin
end
else begin
FTarStream := TAbVirtualMemoryStream.Create;
TAbVirtualMemoryStream(FTarStream).SwapFileDirectory := ExtractFileDir(FArchiveName);
{ Decompress and send to tar LoadArchive }
DecompressToStream(FTarStream);
SwapToTar;

View file

@ -291,6 +291,7 @@ begin
end
else begin
FTarStream := TAbVirtualMemoryStream.Create;
TAbVirtualMemoryStream(FTarStream).SwapFileDirectory := ExtractFileDir(FArchiveName);
{ Decompress and send to tar LoadArchive }
DecompressToStream(FTarStream);
SwapToTar;