Files
easy7zip/CPP/7zip/Archive/Zip/ZipHeader.h
Igor Pavlov f08f4dcc3c 9.34
2016-05-28 00:16:51 +01:00

203 lines
6.1 KiB
C++

// ZipHeader.h
#ifndef __ARCHIVE_ZIP_HEADER_H
#define __ARCHIVE_ZIP_HEADER_H
#include "../../../Common/MyTypes.h"
namespace NArchive {
namespace NZip {
const unsigned kMarkerSize = 4;
namespace NSignature
{
const UInt32 kLocalFileHeader = 0x04034B50;
const UInt32 kDataDescriptor = 0x08074B50;
const UInt32 kCentralFileHeader = 0x02014B50;
const UInt32 kEcd = 0x06054B50;
const UInt32 kEcd64 = 0x06064B50;
const UInt32 kEcd64Locator = 0x07064B50;
// const UInt32 kSpan = 0x08074B50;
const UInt32 kNoSpan = 0x30304b50; // PK00, replaces kSpan, if there is only 1 segment
}
const unsigned kLocalHeaderSize = 4 + 26; // including signature
const unsigned kDataDescriptorSize = 4 + 12; // including signature
const unsigned kCentralHeaderSize = 4 + 42; // including signature
const unsigned kEcdSize = 22; // including signature
const unsigned kEcd64_MainSize = 44;
const unsigned kEcd64_FullSize = 12 + kEcd64_MainSize;
const unsigned kEcd64Locator_Size = 20;
namespace NFileHeader
{
namespace NCompressionMethod
{
enum EType
{
kStored = 0,
kShrunk = 1,
kReduced1 = 2,
kReduced2 = 3,
kReduced3 = 4,
kReduced4 = 5,
kImploded = 6,
kReservedTokenizing = 7, // reserved for tokenizing
kDeflated = 8,
kDeflated64 = 9,
kPKImploding = 10,
kBZip2 = 12,
kLZMA = 14,
kTerse = 18,
kLz77 = 19,
kJpeg = 0x60,
kWavPack = 0x61,
kPPMd = 0x62,
kWzAES = 0x63
};
const Byte kMadeByProgramVersion = 63;
const Byte kExtractVersion_Default = 10;
const Byte kExtractVersion_Dir = 20;
const Byte kExtractVersion_ZipCrypto = 20;
const Byte kExtractVersion_Deflate = 20;
const Byte kExtractVersion_Deflate64 = 21;
const Byte kExtractVersion_Zip64 = 45;
const Byte kExtractVersion_BZip2 = 46;
const Byte kExtractVersion_Aes = 51;
const Byte kExtractVersion_LZMA = 63;
const Byte kExtractVersion_PPMd = 63;
}
namespace NExtraID
{
enum
{
kZip64 = 0x01,
kNTFS = 0x0A,
kStrongEncrypt = 0x17,
kUnixTime = 0x5455,
kWzAES = 0x9901
};
}
namespace NNtfsExtra
{
const UInt16 kTagTime = 1;
enum
{
kMTime = 0,
kATime,
kCTime
};
}
namespace NUnixTime
{
enum
{
kMTime = 0,
kATime,
kCTime
};
}
namespace NFlags
{
const unsigned kEncrypted = 1 << 0;
const unsigned kLzmaEOS = 1 << 1;
const unsigned kDescriptorUsedMask = 1 << 3;
const unsigned kStrongEncrypted = 1 << 6;
const unsigned kUtf8 = 1 << 11;
const unsigned kImplodeDictionarySizeMask = 1 << 1;
const unsigned kImplodeLiteralsOnMask = 1 << 2;
const unsigned kDeflateTypeBitStart = 1;
const unsigned kNumDeflateTypeBits = 2;
const unsigned kNumDeflateTypes = (1 << kNumDeflateTypeBits);
const unsigned kDeflateTypeMask = (1 << kNumDeflateTypeBits) - 1;
}
namespace NHostOS
{
enum EEnum
{
kFAT = 0,
kAMIGA = 1,
kVMS = 2, // VAX/VMS
kUnix = 3,
kVM_CMS = 4,
kAtari = 5, // what if it's a minix filesystem? [cjh]
kHPFS = 6, // filesystem used by OS/2 (and NT 3.x)
kMac = 7,
kZ_System = 8,
kCPM = 9,
kTOPS20 = 10, // pkzip 2.50 NTFS
kNTFS = 11, // filesystem used by Windows NT
kQDOS = 12, // SMS/QDOS
kAcorn = 13, // Archimedes Acorn RISC OS
kVFAT = 14, // filesystem used by Windows 95, NT
kMVS = 15,
kBeOS = 16, // hybrid POSIX/database filesystem
kTandem = 17,
kOS400 = 18,
kOSX = 19
};
}
namespace NUnixAttrib
{
const UInt32 kIFMT = 0170000; // file type mask
const UInt32 kIFDIR = 0040000; // directory
const UInt32 kIFREG = 0100000; // regular file
const UInt32 kIFSOCK = 0140000; // socket (BSD, not SysV or Amiga)
const UInt32 kIFLNK = 0120000; // symbolic link (not SysV, Amiga)
const UInt32 kIFBLK = 0060000; // block special (not Amiga)
const UInt32 kIFCHR = 0020000; // character special (not Amiga)
const UInt32 kIFIFO = 0010000; // fifo (BCC, not MSC or Amiga)
const UInt32 kISUID = 04000; // set user id on execution
const UInt32 kISGID = 02000; // set group id on execution
const UInt32 kISVTX = 01000; // directory permissions control
const UInt32 kENFMT = kISGID; // record locking enforcement flag
const UInt32 kIRWXU = 00700; // read, write, execute: owner
const UInt32 kIRUSR = 00400; // read permission: owner
const UInt32 kIWUSR = 00200; // write permission: owner
const UInt32 kIXUSR = 00100; // execute permission: owner
const UInt32 kIRWXG = 00070; // read, write, execute: group
const UInt32 kIRGRP = 00040; // read permission: group
const UInt32 kIWGRP = 00020; // write permission: group
const UInt32 kIXGRP = 00010; // execute permission: group
const UInt32 kIRWXO = 00007; // read, write, execute: other
const UInt32 kIROTH = 00004; // read permission: other
const UInt32 kIWOTH = 00002; // write permission: other
const UInt32 kIXOTH = 00001; // execute permission: other
}
namespace NAmigaAttrib
{
const UInt32 kIFMT = 06000; // Amiga file type mask
const UInt32 kIFDIR = 04000; // Amiga directory
const UInt32 kIFREG = 02000; // Amiga regular file
const UInt32 kIHIDDEN = 00200; // to be supported in AmigaDOS 3.x
const UInt32 kISCRIPT = 00100; // executable script (text command file)
const UInt32 kIPURE = 00040; // allow loading into resident memory
const UInt32 kIARCHIVE = 00020; // not modified since bit was last set
const UInt32 kIREAD = 00010; // can be opened for reading
const UInt32 kIWRITE = 00004; // can be opened for writing
const UInt32 kIEXECUTE = 00002; // executable image, a loadable runfile
const UInt32 kIDELETE = 00001; // can be deleted
}
}
}}
#endif