From bf33284b2fc36ad8a9d88c5f75046e5e8d0b9515 Mon Sep 17 00:00:00 2001 From: marco Date: Tue, 13 Jan 2015 15:34:33 +0000 Subject: [PATCH] * support for modifiable attributes. Mantis #26850 git-svn-id: trunk@29467 - --- packages/paszlib/src/zipper.pp | 82 ++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 38 deletions(-) diff --git a/packages/paszlib/src/zipper.pp b/packages/paszlib/src/zipper.pp index e51f60d7d9..85faa04121 100644 --- a/packages/paszlib/src/zipper.pp +++ b/packages/paszlib/src/zipper.pp @@ -33,6 +33,38 @@ Const CENTRAL_FILE_HEADER_SIGNATURE = $02014B50; 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 Local_File_Header_Type = Packed Record //1 per zipped file Signature : LongInt; //4 bytes @@ -692,37 +724,6 @@ begin DT:=ComposeDateTime(EncodeDate(Y,M,D),EncodeTime(H,N,S,MS)); 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; @@ -1357,17 +1358,20 @@ Begin Raise EZipError.CreateFmt(SErrFileDoesNotExist,[F.DiskFileName]); end else - begin + begin If (F.ArchiveFileName='') then Raise EZipError.CreateFmt(SErrMissingArchiveName,[I]); F.Size:=F.Stream.Size; - {$IFDEF UNIX} - F.Attributes := UNIX_FILE or UNIX_DEFAULT; - {$ELSE} - F.Attributes := faArchive; - {$ENDIF} - end; + if (F.Attributes = 0) then + begin + {$IFDEF UNIX} + F.Attributes := UNIX_FILE or UNIX_DEFAULT; + {$ELSE} + F.Attributes := faArchive; + {$ENDIF} + end; end; + end; end; @@ -2634,6 +2638,8 @@ begin FCompressionLevel:=cldefault; FDateTime:=now; FNeedsZip64:=false; + FAttributes:=0; + inherited create(ACollection); end;