aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/openmpt-trunk/unarchiver/ungzip.h
diff options
context:
space:
mode:
authorJean-Francois Mauguit <jfmauguit@mac.com>2024-09-24 09:03:25 -0400
committerGitHub <noreply@github.com>2024-09-24 09:03:25 -0400
commitbab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/external_dependencies/openmpt-trunk/unarchiver/ungzip.h
parent4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff)
parent20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff)
downloadwinamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/unarchiver/ungzip.h')
-rw-r--r--Src/external_dependencies/openmpt-trunk/unarchiver/ungzip.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/unarchiver/ungzip.h b/Src/external_dependencies/openmpt-trunk/unarchiver/ungzip.h
new file mode 100644
index 00000000..85019141
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/unarchiver/ungzip.h
@@ -0,0 +1,74 @@
+/*
+ * ungzip.h
+ * --------
+ * Purpose: Header file for .gz loader
+ * Notes : (currently none)
+ * Authors: OpenMPT Devs
+ * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
+ */
+
+#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; // 0x1F
+ uint8le magic2; // 0x8B
+ uint8le method; // 0-7 = reserved, 8 = deflate
+ uint8le flags; // See GZ_F* constants
+ uint32le mtime; // UNIX time
+ uint8le xflags; // Available for use by specific compression methods. We ignore this.
+ uint8le os; // Which OS was used to compress the file? We also ignore this.
+ };
+
+ struct GZtrailer
+ {
+ uint32le crc32_; // CRC32 of decompressed data
+ uint32le isize; // Size of decompressed data modulo 2^32
+ };
+
+protected:
+ enum MagicBytes
+ {
+ GZ_HMAGIC1 = 0x1F,
+ GZ_HMAGIC2 = 0x8B,
+ GZ_HMDEFLATE = 0x08,
+ };
+
+ enum HeaderFlags
+ {
+ GZ_FTEXT = 0x01, // File is probably ASCII text (who cares)
+ GZ_FHCRC = 0x02, // CRC16 present
+ GZ_FEXTRA = 0x04, // Extra fields present
+ GZ_FNAME = 0x08, // Original filename present
+ GZ_FCOMMENT = 0x10, // Comment is present
+ 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 // MPT_WITH_ZLIB || MPT_WITH_MINIZ
+
+OPENMPT_NAMESPACE_END