1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #pragma once
- #include "openmpt/all/BuildSettings.hpp"
- #include "openmpt/base/Endian.hpp"
- #include "archive.h"
- OPENMPT_NAMESPACE_BEGIN
- #if defined(MPT_WITH_ZLIB) || defined(MPT_WITH_MINIZ)
- class CGzipArchive : public ArchiveBase
- {
- public:
- struct GZheader
- {
- uint8le magic1;
- uint8le magic2;
- uint8le method;
- uint8le flags;
- uint32le mtime;
- uint8le xflags;
- uint8le os;
- };
- struct GZtrailer
- {
- uint32le crc32_;
- uint32le isize;
- };
- protected:
- enum MagicBytes
- {
- GZ_HMAGIC1 = 0x1F,
- GZ_HMAGIC2 = 0x8B,
- GZ_HMDEFLATE = 0x08,
- };
- enum HeaderFlags
- {
- GZ_FTEXT = 0x01,
- GZ_FHCRC = 0x02,
- GZ_FEXTRA = 0x04,
- GZ_FNAME = 0x08,
- GZ_FCOMMENT = 0x10,
- GZ_FRESERVED = (~(GZ_FTEXT | GZ_FHCRC | GZ_FEXTRA | GZ_FNAME | GZ_FCOMMENT))
- };
- GZheader header;
- public:
- bool ExtractFile(std::size_t index) override;
- CGzipArchive(const FileReader &file);
- ~CGzipArchive() override;
- };
- MPT_BINARY_STRUCT(CGzipArchive::GZheader, 10)
- MPT_BINARY_STRUCT(CGzipArchive::GZtrailer, 8)
- #endif
- OPENMPT_NAMESPACE_END
|