mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-13 02:09:28 +02:00
* support for modifiable attributes. Mantis #26850
git-svn-id: trunk@29467 -
This commit is contained in:
parent
d47aae933c
commit
bf33284b2f
@ -33,6 +33,38 @@ Const
|
|||||||
CENTRAL_FILE_HEADER_SIGNATURE = $02014B50;
|
CENTRAL_FILE_HEADER_SIGNATURE = $02014B50;
|
||||||
ZIP64_HEADER_ID = $0001;
|
ZIP64_HEADER_ID = $0001;
|
||||||
|
|
||||||
|
const
|
||||||
|
OS_FAT = 0; //MS-DOS and OS/2 (FAT/VFAT/FAT32)
|
||||||
|
OS_UNIX = 3;
|
||||||
|
OS_OS2 = 6; //OS/2 HPFS
|
||||||
|
OS_NTFS = 10;
|
||||||
|
OS_VFAT = 14;
|
||||||
|
OS_OSX = 19;
|
||||||
|
|
||||||
|
UNIX_MASK = $F000;
|
||||||
|
UNIX_FIFO = $1000;
|
||||||
|
UNIX_CHAR = $2000;
|
||||||
|
UNIX_DIR = $4000;
|
||||||
|
UNIX_BLK = $6000;
|
||||||
|
UNIX_FILE = $8000;
|
||||||
|
UNIX_LINK = $A000;
|
||||||
|
UNIX_SOCK = $C000;
|
||||||
|
|
||||||
|
|
||||||
|
UNIX_RUSR = $0100;
|
||||||
|
UNIX_WUSR = $0080;
|
||||||
|
UNIX_XUSR = $0040;
|
||||||
|
|
||||||
|
UNIX_RGRP = $0020;
|
||||||
|
UNIX_WGRP = $0010;
|
||||||
|
UNIX_XGRP = $0008;
|
||||||
|
|
||||||
|
UNIX_ROTH = $0004;
|
||||||
|
UNIX_WOTH = $0002;
|
||||||
|
UNIX_XOTH = $0001;
|
||||||
|
|
||||||
|
UNIX_DEFAULT = UNIX_RUSR or UNIX_WUSR or UNIX_XUSR or UNIX_RGRP or UNIX_ROTH;
|
||||||
|
|
||||||
Type
|
Type
|
||||||
Local_File_Header_Type = Packed Record //1 per zipped file
|
Local_File_Header_Type = Packed Record //1 per zipped file
|
||||||
Signature : LongInt; //4 bytes
|
Signature : LongInt; //4 bytes
|
||||||
@ -692,37 +724,6 @@ begin
|
|||||||
DT:=ComposeDateTime(EncodeDate(Y,M,D),EncodeTime(H,N,S,MS));
|
DT:=ComposeDateTime(EncodeDate(Y,M,D),EncodeTime(H,N,S,MS));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
const
|
|
||||||
OS_FAT = 0; //MS-DOS and OS/2 (FAT/VFAT/FAT32)
|
|
||||||
OS_UNIX = 3;
|
|
||||||
OS_OS2 = 6; //OS/2 HPFS
|
|
||||||
OS_NTFS = 10;
|
|
||||||
OS_VFAT = 14;
|
|
||||||
OS_OSX = 19;
|
|
||||||
|
|
||||||
UNIX_MASK = $F000;
|
|
||||||
UNIX_FIFO = $1000;
|
|
||||||
UNIX_CHAR = $2000;
|
|
||||||
UNIX_DIR = $4000;
|
|
||||||
UNIX_BLK = $6000;
|
|
||||||
UNIX_FILE = $8000;
|
|
||||||
UNIX_LINK = $A000;
|
|
||||||
UNIX_SOCK = $C000;
|
|
||||||
|
|
||||||
|
|
||||||
UNIX_RUSR = $0100;
|
|
||||||
UNIX_WUSR = $0080;
|
|
||||||
UNIX_XUSR = $0040;
|
|
||||||
|
|
||||||
UNIX_RGRP = $0020;
|
|
||||||
UNIX_WGRP = $0010;
|
|
||||||
UNIX_XGRP = $0008;
|
|
||||||
|
|
||||||
UNIX_ROTH = $0004;
|
|
||||||
UNIX_WOTH = $0002;
|
|
||||||
UNIX_XOTH = $0001;
|
|
||||||
|
|
||||||
UNIX_DEFAULT = UNIX_RUSR or UNIX_WUSR or UNIX_XUSR or UNIX_RGRP or UNIX_ROTH;
|
|
||||||
|
|
||||||
|
|
||||||
function ZipUnixAttrsToFatAttrs(const Name: String; Attrs: Longint): Longint;
|
function ZipUnixAttrsToFatAttrs(const Name: String; Attrs: Longint): Longint;
|
||||||
@ -1357,17 +1358,20 @@ Begin
|
|||||||
Raise EZipError.CreateFmt(SErrFileDoesNotExist,[F.DiskFileName]);
|
Raise EZipError.CreateFmt(SErrFileDoesNotExist,[F.DiskFileName]);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
If (F.ArchiveFileName='') then
|
If (F.ArchiveFileName='') then
|
||||||
Raise EZipError.CreateFmt(SErrMissingArchiveName,[I]);
|
Raise EZipError.CreateFmt(SErrMissingArchiveName,[I]);
|
||||||
F.Size:=F.Stream.Size;
|
F.Size:=F.Stream.Size;
|
||||||
{$IFDEF UNIX}
|
if (F.Attributes = 0) then
|
||||||
F.Attributes := UNIX_FILE or UNIX_DEFAULT;
|
begin
|
||||||
{$ELSE}
|
{$IFDEF UNIX}
|
||||||
F.Attributes := faArchive;
|
F.Attributes := UNIX_FILE or UNIX_DEFAULT;
|
||||||
{$ENDIF}
|
{$ELSE}
|
||||||
|
F.Attributes := faArchive;
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -2634,6 +2638,8 @@ begin
|
|||||||
FCompressionLevel:=cldefault;
|
FCompressionLevel:=cldefault;
|
||||||
FDateTime:=now;
|
FDateTime:=now;
|
||||||
FNeedsZip64:=false;
|
FNeedsZip64:=false;
|
||||||
|
FAttributes:=0;
|
||||||
|
|
||||||
inherited create(ACollection);
|
inherited create(ACollection);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user