diff options
Diffstat (limited to 'rbutil/rbutilqt/zip/unzip_p.h')
-rw-r--r-- | rbutil/rbutilqt/zip/unzip_p.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/zip/unzip_p.h b/rbutil/rbutilqt/zip/unzip_p.h new file mode 100644 index 0000000000..c05ac67b47 --- /dev/null +++ b/rbutil/rbutilqt/zip/unzip_p.h | |||
@@ -0,0 +1,112 @@ | |||
1 | /**************************************************************************** | ||
2 | ** Filename: unzip_p.h | ||
3 | ** Last updated [dd/mm/yyyy]: 28/01/2007 | ||
4 | ** | ||
5 | ** pkzip 2.0 decompression. | ||
6 | ** | ||
7 | ** Some of the code has been inspired by other open source projects, | ||
8 | ** (mainly Info-Zip and Gilles Vollant's minizip). | ||
9 | ** Compression and decompression actually uses the zlib library. | ||
10 | ** | ||
11 | ** Copyright (C) 2007 Angius Fabrizio. All rights reserved. | ||
12 | ** | ||
13 | ** This file is part of the OSDaB project (http://osdab.sourceforge.net/). | ||
14 | ** | ||
15 | ** This file may be distributed and/or modified under the terms of the | ||
16 | ** GNU General Public License version 2 as published by the Free Software | ||
17 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
18 | ** packaging of this file. | ||
19 | ** | ||
20 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | ||
21 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | ||
22 | ** | ||
23 | ** See the file LICENSE.GPL that came with this software distribution or | ||
24 | ** visit http://www.gnu.org/copyleft/gpl.html for GPL licensing information. | ||
25 | ** | ||
26 | **********************************************************************/ | ||
27 | |||
28 | // | ||
29 | // W A R N I N G | ||
30 | // ------------- | ||
31 | // | ||
32 | // This file is not part of the Zip/UnZip API. It exists purely as an | ||
33 | // implementation detail. This header file may change from version to | ||
34 | // version without notice, or even be removed. | ||
35 | // | ||
36 | // We mean it. | ||
37 | // | ||
38 | |||
39 | #ifndef OSDAB_UNZIP_P__H | ||
40 | #define OSDAB_UNZIP_P__H | ||
41 | |||
42 | #include "unzip.h" | ||
43 | #include "zipentry_p.h" | ||
44 | |||
45 | #include <QtGlobal> | ||
46 | |||
47 | // zLib authors suggest using larger buffers (128K or 256K) for (de)compression (especially for inflate()) | ||
48 | // we use a 256K buffer here - if you want to use this code on a pre-iceage mainframe please change it ;) | ||
49 | #define UNZIP_READ_BUFFER (256*1024) | ||
50 | |||
51 | class UnzipPrivate | ||
52 | { | ||
53 | public: | ||
54 | UnzipPrivate(); | ||
55 | |||
56 | // Replace this with whatever else you use to store/retrieve the password. | ||
57 | QString password; | ||
58 | |||
59 | bool skipAllEncrypted; | ||
60 | |||
61 | QMap<QString,ZipEntryP*>* headers; | ||
62 | |||
63 | QIODevice* device; | ||
64 | |||
65 | char buffer1[UNZIP_READ_BUFFER]; | ||
66 | char buffer2[UNZIP_READ_BUFFER]; | ||
67 | |||
68 | unsigned char* uBuffer; | ||
69 | const quint32* crcTable; | ||
70 | |||
71 | // Central Directory (CD) offset | ||
72 | quint32 cdOffset; | ||
73 | // End of Central Directory (EOCD) offset | ||
74 | quint32 eocdOffset; | ||
75 | |||
76 | // Number of entries in the Central Directory (as to the EOCD record) | ||
77 | quint16 cdEntryCount; | ||
78 | |||
79 | // The number of detected entries that have been skipped because of a non compatible format | ||
80 | quint16 unsupportedEntryCount; | ||
81 | |||
82 | QString comment; | ||
83 | |||
84 | UnZip::ErrorCode openArchive(QIODevice* device); | ||
85 | |||
86 | UnZip::ErrorCode seekToCentralDirectory(); | ||
87 | UnZip::ErrorCode parseCentralDirectoryRecord(); | ||
88 | UnZip::ErrorCode parseLocalHeaderRecord(const QString& path, ZipEntryP& entry); | ||
89 | |||
90 | void closeArchive(); | ||
91 | |||
92 | UnZip::ErrorCode extractFile(const QString& path, ZipEntryP& entry, const QDir& dir, UnZip::ExtractionOptions options); | ||
93 | UnZip::ErrorCode extractFile(const QString& path, ZipEntryP& entry, QIODevice* device, UnZip::ExtractionOptions options); | ||
94 | |||
95 | UnZip::ErrorCode testPassword(quint32* keys, const QString& file, const ZipEntryP& header); | ||
96 | bool testKeys(const ZipEntryP& header, quint32* keys); | ||
97 | |||
98 | bool createDirectory(const QString& path); | ||
99 | |||
100 | inline void decryptBytes(quint32* keys, char* buffer, qint64 read); | ||
101 | |||
102 | inline quint32 getULong(const unsigned char* data, quint32 offset) const; | ||
103 | inline quint64 getULLong(const unsigned char* data, quint32 offset) const; | ||
104 | inline quint16 getUShort(const unsigned char* data, quint32 offset) const; | ||
105 | inline int decryptByte(quint32 key2) const; | ||
106 | inline void updateKeys(quint32* keys, int c) const; | ||
107 | inline void initKeys(const QString& pwd, quint32* keys) const; | ||
108 | |||
109 | inline QDateTime convertDateTime(const unsigned char date[2], const unsigned char time[2]) const; | ||
110 | }; | ||
111 | |||
112 | #endif // OSDAB_UNZIP_P__H | ||