9 #include "util/mutex.h" 16 const WORD ZIP_FILE_ENCRYPTED = 0x0001;
17 const WORD ZIP_INFO_IN_DATA_DESCRITOR = 0x0008;
31 # pragma pack( push, packing ) 36 uint16_t thisDiskNumber;
37 uint16_t startCentralDirDisk;
38 uint16_t entriesForThisDisk;
39 uint16_t entriesForWholeCentralDir;
40 uint32_t centralDirSize;
41 uint32_t offsetOfCentralDir;
48 uint16_t thisDiskNumber;
49 uint16_t startCentralDirDisk;
50 uint16_t entriesForThisDisk;
51 uint16_t entriesForWholeCentralDir;
52 uint32_t centralDirSize;
53 uint32_t offsetOfCentralDir;
63 WORD CompressionMethod;
73 WORD InternalAttributes;
74 DWORD ExternalAttributes;
75 DWORD LocalHeaderOffset;
82 DWORD UncompressedSize;
88 WORD VersionToExtract;
90 WORD CompressionMethod;
95 WORD ExtraFieldLength;
99 # pragma pack( pop, packing ) 107 const char* zipFileName;
109 DWORD fileDataPosition;
111 WORD CompressionMethod;
112 DWORD CompressedSize;
113 DWORD UncompressedSize;
114 #ifdef SAVE_ZIP_HEADER 120 : fileDataPosition(0), CompressedSize(0),UncompressedSize(0),CompressionMethod(0) , hashValue(0), zipFileName(
nullptr), fileNameLen(0)
122 #ifdef SAVE_ZIP_HEADER 128 void SetFileName(
const char* str, WORD len)
134 void RefreshHash(
bool ignoreCase)
137 hashValue = Hash(zipFileName, ignoreCase);
140 static uint32 Hash(
const char* str,
bool ignoreCase)
142 const size_t seed = 2166136261U;
143 const size_t prime = 16777619U;
144 const char diff =
'a' -
'A';
156 if (cur >=
'A' && cur <=
'Z')
191 bool IsZipData(
const char* src,
size_t size);
193 const SZIPFileHeader* GetFirstFileInfo(
const char* src, std::string* filename =
nullptr);
194 bool GetFirstFileData(
const char* src, std::string& out);
262 inline static DWORD TypeID() {
return 2; };
263 virtual DWORD GetType(){
return TypeID(); };
266 ATTRIBUTE_METHOD1(
CZipArchive, SetBaseDirectory_s,
const char*) { cls->SetBaseDirectory(p1);
return S_OK; }
268 ATTRIBUTE_METHOD1(
CZipArchive, GetRootDirectory_s,
const char**) { *p1 = cls->GetRootDirectory().c_str();
return S_OK; }
269 ATTRIBUTE_METHOD1(
CZipArchive, SetRootDirectory_s,
const char*) { cls->SetRootDirectory(p1);
return S_OK; }
276 virtual bool Open(
const string& sArchiveName,
int nPriority);
279 virtual void Close();
285 virtual bool DoesFileExist(
const string& filename);
310 bool OpenMemFile(
const char* buffer, DWORD nLen,
bool bDeleteBuffer=
true);
313 virtual DWORD GetFileSize(
FileHandle& handle);
316 virtual bool ReadFile(
FileHandle& handle,LPVOID lpBuffer,DWORD nNumberOfBytesToRead,LPDWORD lpNumberOfBytesRead);
324 virtual bool ReadFileRaw(
FileHandle& handle,LPVOID* lppBuffer,LPDWORD pnCompressedSize, LPDWORD pnUncompressedSize);
327 static bool Decompress(LPVOID lpCompressedBuffer, DWORD nCompressedSize, LPVOID lpUnCompressedBuffer, DWORD nUncompressedSize);
336 virtual void SetRootDirectory(
const string& filename);
339 const std::string& GetRootDirectory();
344 virtual void SetBaseDirectory(
const char * filename);
355 virtual void FindFiles(
CSearchResult& result,
const string& sRootPath,
const string& sFilePattern,
int nSubLevel);
363 bool GeneratePkgFile(
const char* filename);
364 bool GeneratePkgFile2(
const char* filename);
369 virtual bool IsIgnoreCase()
const {
return m_bIgnoreCase; }
372 vector<SZipFileEntryPtr> m_FileList;
376 vector<char> m_nameBlock;
381 bool m_bRelativePath;
394 bool OpenZipFile(
const string& filename);
396 bool OpenPkgFile(
const string& filename);
403 int LocateBlockWithSignature(DWORD signature,
long endLocation,
int minimumBlockSize,
int maximumVariableData);
411 bool _ReadEntries_pkg();
412 bool ReadEntries_pkg();
413 bool ReadEntries_pkg2();
file archiver base class.
Definition: Archive.h:24
an attribute class is a collection of attribute fields.
Definition: AttributeClass.h:10
const DWORD ZIP_CONST_ENDSIG
End of central directory record signature.
Definition: ZipArchive.h:25
a file handle in a Archive
Definition: FileHandle.h:13
Definition: handle.hpp:33
different physics engine has different winding order.
Definition: EventBinding.h:32
const int ZIP_CONST_ENDHDR
Size of end of central record (excluding variable fields)
Definition: ZipArchive.h:19
Definition: ZipArchive.h:181
Definition: ZipArchive.h:57
Both the zip and ParaEngine's pkg file encryption logics are supported.
Definition: ZipArchive.h:256
const int ZIP_CONST_CENSIG
Signature for central header.
Definition: ZipArchive.h:23
Definition: ZipArchive.h:78
Definition: ZipArchive.h:45
light-weighted file record header in memory.
Definition: ZipArchive.h:103
cross platform mutex
Definition: mutex.h:95
it represents the search result.
Definition: FileSearchResult.h:24
const int ZIP_CONST_LOCALHEADERSIG
local file header
Definition: ZipArchive.h:21
Definition: ZipArchive.h:34
Interface for read access to a file.
Definition: IFile.h:8