FIX: Incorrect directory attributes when extract .zip archive (Posix)

This commit is contained in:
Alexander Koblov 2017-12-31 16:55:25 +00:00
commit d712d7c2e3
2 changed files with 12 additions and 2 deletions

View file

@ -84,6 +84,15 @@ const
S_ISGID = $0400;
S_ISVTX = $0200;
// Generic attributes
{$IF DEFINED(MSWINDOWS)}
GENERIC_ATTRIBUTE_FILE = FILE_ATTRIBUTE_ARCHIVE;
GENERIC_ATTRIBUTE_FOLDER = GENERIC_ATTRIBUTE_FILE or FILE_ATTRIBUTE_DIRECTORY;
{$ELSEIF DEFINED(UNIX)}
GENERIC_ATTRIBUTE_FILE = S_IRUSR or S_IWUSR or S_IRGRP or S_IROTH;
GENERIC_ATTRIBUTE_FOLDER = GENERIC_ATTRIBUTE_FILE or S_IFDIR or S_IXUGO;
{$ENDIF}
function WinToUnixFileAttr(Attr: TFileAttrs): TFileAttrs;
function UnixToWinFileAttr(Attr: TFileAttrs): TFileAttrs;
function UnixToWinFileAttr(const FileName: String; Attr: TFileAttrs): TFileAttrs;

View file

@ -151,6 +151,7 @@ uses
LazUTF8, uDebug, DCStrUtils, uDCUtils, uGlobs, DCOSUtils, uOSUtils, uShowMsg,
DCDateTimeUtils, uLng, uLog,
DCConvertEncoding,
DCFileAttributes,
FileUtil, uCryptProc,
uWcxArchiveListOperation,
uWcxArchiveCopyInOperation,
@ -703,7 +704,7 @@ begin
if (NameLength > 0) and (Header.FileName[NameLength] = PathDelim) then
begin
Delete(Header.FileName, NameLength, 1);
Header.FileAttr := Header.FileAttr or faFolder;
Header.FileAttr := Header.FileAttr or GENERIC_ATTRIBUTE_FOLDER;
end;
//**********************************************************************
@ -741,7 +742,7 @@ begin
try
Header.FileName := AllDirsList.List[I]^.Key;
Header.ArcName := ArchiveFileName;
Header.FileAttr := faFolder;
Header.FileAttr := GENERIC_ATTRIBUTE_FOLDER;
{$IFDEF MSWINDOWS}
WinToDosTime(mbFileAge(ArchiveFileName), Header.FileTime);
{$ELSE}