qzip.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/gui/text/qzip.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7static inline uint readUInt(const uchar *data)-
8{-
9 return
never executed: return (data[0]) + (data[1]<<8) + (data[2]<<16) + (data[3]<<24);
(data[0]) + (data[1]<<8) + (data[2]<<16) + (data[3]<<24);
never executed: return (data[0]) + (data[1]<<8) + (data[2]<<16) + (data[3]<<24);
0
10}-
11-
12static inline ushort readUShort(const uchar *data)-
13{-
14 return
never executed: return (data[0]) + (data[1]<<8);
(data[0]) + (data[1]<<8);
never executed: return (data[0]) + (data[1]<<8);
0
15}-
16-
17static inline void writeUInt(uchar *data, uint i)-
18{-
19 data[0] = i & 0xff;-
20 data[1] = (i>>8) & 0xff;-
21 data[2] = (i>>16) & 0xff;-
22 data[3] = (i>>24) & 0xff;-
23}
never executed: end of block
0
24-
25static inline void writeUShort(uchar *data, ushort i)-
26{-
27 data[0] = i & 0xff;-
28 data[1] = (i>>8) & 0xff;-
29}
never executed: end of block
0
30-
31static inline void copyUInt(uchar *dest, const uchar *src)-
32{-
33 dest[0] = src[0];-
34 dest[1] = src[1];-
35 dest[2] = src[2];-
36 dest[3] = src[3];-
37}
never executed: end of block
0
38-
39static inline void copyUShort(uchar *dest, const uchar *src)-
40{-
41 dest[0] = src[0];-
42 dest[1] = src[1];-
43}
never executed: end of block
0
44-
45static void writeMSDosDate(uchar *dest, const QDateTime& dt)-
46{-
47 if (dt.isValid()
dt.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
48 quint16 time =-
49 (dt.time().hour() << 11)-
50 | (dt.time().minute() << 5)-
51 | (dt.time().second() >> 1);-
52-
53 dest[0] = time & 0xff;-
54 dest[1] = time >> 8;-
55-
56 quint16 date =-
57 ((dt.date().year() - 1980) << 9)-
58 | (dt.date().month() << 5)-
59 | (dt.date().day());-
60-
61 dest[2] = char(date);-
62 dest[3] = char(date >> 8);-
63 }
never executed: end of block
else {
0
64 dest[0] = 0;-
65 dest[1] = 0;-
66 dest[2] = 0;-
67 dest[3] = 0;-
68 }
never executed: end of block
0
69}-
70-
71static int inflate(Bytef *dest, ulong *destLen, const Bytef *source, ulong sourceLen)-
72{-
73 z_stream stream;-
74 int err;-
75-
76 stream.next_in = const_cast<Bytef*>(source);-
77 stream.avail_in = (uInt)sourceLen;-
78 if ((
(uLong)stream....n != sourceLenDescription
TRUEnever evaluated
FALSEnever evaluated
uLong)stream.avail_in != sourceLen
(uLong)stream....n != sourceLenDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
79 return
never executed: return (-5);
(-5);
never executed: return (-5);
0
80-
81 stream.next_out = dest;-
82 stream.avail_out = (uInt)*destLen;-
83 if ((
(uLong)stream....ut != *destLenDescription
TRUEnever evaluated
FALSEnever evaluated
uLong)stream.avail_out != *destLen
(uLong)stream....ut != *destLenDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
84 return
never executed: return (-5);
(-5);
never executed: return (-5);
0
85-
86 stream.zalloc = (alloc_func)0;-
87 stream.zfree = (free_func)0;-
88-
89 err = inflateInit2_((&stream), (-15), "1.2.8", (int)sizeof(z_stream));-
90 if (err != 0
err != 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
91 return
never executed: return err;
err;
never executed: return err;
0
92-
93 err = inflate(&stream, 4);-
94 if (err != 1
err != 1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
95 inflateEnd(&stream);-
96 if (err == 2
err == 2Description
TRUEnever evaluated
FALSEnever evaluated
|| (err == (-5)
err == (-5)Description
TRUEnever evaluated
FALSEnever evaluated
&& stream.avail_in == 0
stream.avail_in == 0Description
TRUEnever evaluated
FALSEnever evaluated
))
0
97 return
never executed: return (-3);
(-3);
never executed: return (-3);
0
98 return
never executed: return err;
err;
never executed: return err;
0
99 }-
100 *destLen = stream.total_out;-
101-
102 err = inflateEnd(&stream);-
103 return
never executed: return err;
err;
never executed: return err;
0
104}-
105-
106static int deflate (Bytef *dest, ulong *destLen, const Bytef *source, ulong sourceLen)-
107{-
108 z_stream stream;-
109 int err;-
110-
111 stream.next_in = const_cast<Bytef*>(source);-
112 stream.avail_in = (uInt)sourceLen;-
113 stream.next_out = dest;-
114 stream.avail_out = (uInt)*destLen;-
115 if ((
(uLong)stream....ut != *destLenDescription
TRUEnever evaluated
FALSEnever evaluated
uLong)stream.avail_out != *destLen
(uLong)stream....ut != *destLenDescription
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return (-5);
(-5);
never executed: return (-5);
0
116-
117 stream.zalloc = (alloc_func)0;-
118 stream.zfree = (free_func)0;-
119 stream.opaque = (voidpf)0;-
120-
121 err = deflateInit2_((&stream),((-1)),(8),(-15),(8), (0), "1.2.8", (int)sizeof(z_stream));-
122 if (err != 0
err != 0Description
TRUEnever evaluated
FALSEnever evaluated
) return
never executed: return err;
err;
never executed: return err;
0
123-
124 err = deflate(&stream, 4);-
125 if (err != 1
err != 1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
126 deflateEnd(&stream);-
127 return
never executed: return err == 0 ? (-5) : err;
err == 0
err == 0Description
TRUEnever evaluated
FALSEnever evaluated
? (-5) : err;
never executed: return err == 0 ? (-5) : err;
0
128 }-
129 *destLen = stream.total_out;-
130-
131 err = deflateEnd(&stream);-
132 return
never executed: return err;
err;
never executed: return err;
0
133}-
134-
135-
136namespace WindowsFileAttributes {-
137enum {-
138 Dir = 0x10,-
139 File = 0x80,-
140 TypeMask = 0x90,-
141-
142 ReadOnly = 0x01,-
143 PermMask = 0x01-
144};-
145}-
146-
147namespace UnixFileAttributes {-
148enum {-
149 Dir = 0040000,-
150 File = 0100000,-
151 SymLink = 0120000,-
152 TypeMask = 0170000,-
153-
154 ReadUser = 0400,-
155 WriteUser = 0200,-
156 ExeUser = 0100,-
157 ReadGroup = 0040,-
158 WriteGroup = 0020,-
159 ExeGroup = 0010,-
160 ReadOther = 0004,-
161 WriteOther = 0002,-
162 ExeOther = 0001,-
163 PermMask = 0777-
164};-
165}-
166-
167static QFile::Permissions modeToPermissions(quint32 mode)-
168{-
169 QFile::Permissions ret;-
170 if (mode & UnixFileAttributes::ReadUser
mode & UnixFil...utes::ReadUserDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
171 ret |= QFile::ReadOwner | QFile::ReadUser;
never executed: ret |= QFile::ReadOwner | QFile::ReadUser;
0
172 if (mode & UnixFileAttributes::WriteUser
mode & UnixFil...tes::WriteUserDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
173 ret |= QFile::WriteOwner | QFile::WriteUser;
never executed: ret |= QFile::WriteOwner | QFile::WriteUser;
0
174 if (mode & UnixFileAttributes::ExeUser
mode & UnixFil...butes::ExeUserDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
175 ret |= QFile::ExeOwner | QFile::ExeUser;
never executed: ret |= QFile::ExeOwner | QFile::ExeUser;
0
176 if (mode & UnixFileAttributes::ReadGroup
mode & UnixFil...tes::ReadGroupDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
177 ret |= QFile::ReadGroup;
never executed: ret |= QFile::ReadGroup;
0
178 if (mode & UnixFileAttributes::WriteGroup
mode & UnixFil...es::WriteGroupDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
179 ret |= QFile::WriteGroup;
never executed: ret |= QFile::WriteGroup;
0
180 if (mode & UnixFileAttributes::ExeGroup
mode & UnixFil...utes::ExeGroupDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
181 ret |= QFile::ExeGroup;
never executed: ret |= QFile::ExeGroup;
0
182 if (mode & UnixFileAttributes::ReadOther
mode & UnixFil...tes::ReadOtherDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
183 ret |= QFile::ReadOther;
never executed: ret |= QFile::ReadOther;
0
184 if (mode & UnixFileAttributes::WriteOther
mode & UnixFil...es::WriteOtherDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
185 ret |= QFile::WriteOther;
never executed: ret |= QFile::WriteOther;
0
186 if (mode & UnixFileAttributes::ExeOther
mode & UnixFil...utes::ExeOtherDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
187 ret |= QFile::ExeOther;
never executed: ret |= QFile::ExeOther;
0
188 return
never executed: return ret;
ret;
never executed: return ret;
0
189}-
190-
191static quint32 permissionsToMode(QFile::Permissions perms)-
192{-
193 quint32 mode = 0;-
194 if (perms & (QFile::ReadOwner | QFile::ReadUser)
perms & (QFile...ile::ReadUser)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
195 mode |= UnixFileAttributes::ReadUser;
never executed: mode |= UnixFileAttributes::ReadUser;
0
196 if (perms & (QFile::WriteOwner | QFile::WriteUser)
perms & (QFile...le::WriteUser)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
197 mode |= UnixFileAttributes::WriteUser;
never executed: mode |= UnixFileAttributes::WriteUser;
0
198 if (perms & (QFile::ExeOwner | QFile::ExeUser)
perms & (QFile...File::ExeUser)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
199 mode |= UnixFileAttributes::WriteUser;
never executed: mode |= UnixFileAttributes::WriteUser;
0
200 if (perms & QFile::ReadGroup
perms & QFile::ReadGroupDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
201 mode |= UnixFileAttributes::ReadGroup;
never executed: mode |= UnixFileAttributes::ReadGroup;
0
202 if (perms & QFile::WriteGroup
perms & QFile::WriteGroupDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
203 mode |= UnixFileAttributes::WriteGroup;
never executed: mode |= UnixFileAttributes::WriteGroup;
0
204 if (perms & QFile::ExeGroup
perms & QFile::ExeGroupDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
205 mode |= UnixFileAttributes::ExeGroup;
never executed: mode |= UnixFileAttributes::ExeGroup;
0
206 if (perms & QFile::ReadOther
perms & QFile::ReadOtherDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
207 mode |= UnixFileAttributes::ReadOther;
never executed: mode |= UnixFileAttributes::ReadOther;
0
208 if (perms & QFile::WriteOther
perms & QFile::WriteOtherDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
209 mode |= UnixFileAttributes::WriteOther;
never executed: mode |= UnixFileAttributes::WriteOther;
0
210 if (perms & QFile::ExeOther
perms & QFile::ExeOtherDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
211 mode |= UnixFileAttributes::ExeOther;
never executed: mode |= UnixFileAttributes::ExeOther;
0
212 return
never executed: return mode;
mode;
never executed: return mode;
0
213}-
214-
215static QDateTime readMSDosDate(const uchar *src)-
216{-
217 uint dosDate = readUInt(src);-
218 quint64 uDate;-
219 uDate = (quint64)(dosDate >> 16);-
220 uint tm_mday = (uDate & 0x1f);-
221 uint tm_mon = ((uDate & 0x1E0) >> 5);-
222 uint tm_year = (((uDate & 0x0FE00) >> 9) + 1980);-
223 uint tm_hour = ((dosDate & 0xF800) >> 11);-
224 uint tm_min = ((dosDate & 0x7E0) >> 5);-
225 uint tm_sec = ((dosDate & 0x1f) << 1);-
226-
227 return
never executed: return QDateTime(QDate(tm_year, tm_mon, tm_mday), QTime(tm_hour, tm_min, tm_sec));
QDateTime(QDate(tm_year, tm_mon, tm_mday), QTime(tm_hour, tm_min, tm_sec));
never executed: return QDateTime(QDate(tm_year, tm_mon, tm_mday), QTime(tm_hour, tm_min, tm_sec));
0
228}-
229-
230-
231-
232enum HostOS {-
233 HostFAT = 0,-
234 HostAMIGA = 1,-
235 HostVMS = 2,-
236 HostUnix = 3,-
237 HostVM_CMS = 4,-
238 HostAtari = 5,-
239 HostHPFS = 6,-
240 HostMac = 7,-
241 HostZ_System = 8,-
242 HostCPM = 9,-
243 HostTOPS20 = 10,-
244 HostNTFS = 11,-
245 HostQDOS = 12,-
246 HostAcorn = 13,-
247 HostVFAT = 14,-
248 HostMVS = 15,-
249 HostBeOS = 16,-
250 HostTandem = 17,-
251 HostOS400 = 18,-
252 HostOSX = 19-
253};-
254template<> class QTypeInfo<HostOS > { public: enum { isComplex = (((Q_PRIMITIVE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_PRIMITIVE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isRelocatable = !isStatic || ((Q_PRIMITIVE_TYPE) & Q_RELOCATABLE_TYPE), isLarge = (sizeof(HostOS)>sizeof(void*)), isPointer = false, isIntegral = QtPrivate::is_integral< HostOS >::value, isDummy = (((Q_PRIMITIVE_TYPE) & Q_DUMMY_TYPE) != 0), sizeOf = sizeof(HostOS) }; static inline const char *name() { return "HostOS"; } };-
255-
256enum GeneralPurposeFlag {-
257 Encrypted = 0x01,-
258 AlgTune1 = 0x02,-
259 AlgTune2 = 0x04,-
260 HasDataDescriptor = 0x08,-
261 PatchedData = 0x20,-
262 StrongEncrypted = 0x40,-
263 Utf8Names = 0x0800,-
264 CentralDirectoryEncrypted = 0x2000-
265};-
266template<> class QTypeInfo<GeneralPurposeFlag > { public: enum { isComplex = (((Q_PRIMITIVE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_PRIMITIVE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isRelocatable = !isStatic || ((Q_PRIMITIVE_TYPE) & Q_RELOCATABLE_TYPE), isLarge = (sizeof(GeneralPurposeFlag)>sizeof(void*)), isPointer = false, isIntegral = QtPrivate::is_integral< GeneralPurposeFlag >::value, isDummy = (((Q_PRIMITIVE_TYPE) & Q_DUMMY_TYPE) != 0), sizeOf = sizeof(GeneralPurposeFlag) }; static inline const char *name() { return "GeneralPurposeFlag"; } };-
267-
268enum CompressionMethod {-
269 CompressionMethodStored = 0,-
270 CompressionMethodShrunk = 1,-
271 CompressionMethodReduced1 = 2,-
272 CompressionMethodReduced2 = 3,-
273 CompressionMethodReduced3 = 4,-
274 CompressionMethodReduced4 = 5,-
275 CompressionMethodImploded = 6,-
276 CompressionMethodReservedTokenizing = 7,-
277 CompressionMethodDeflated = 8,-
278 CompressionMethodDeflated64 = 9,-
279 CompressionMethodPKImploding = 10,-
280-
281 CompressionMethodBZip2 = 12,-
282-
283 CompressionMethodLZMA = 14,-
284-
285 CompressionMethodTerse = 18,-
286 CompressionMethodLz77 = 19,-
287-
288 CompressionMethodJpeg = 96,-
289 CompressionMethodWavPack = 97,-
290 CompressionMethodPPMd = 98,-
291 CompressionMethodWzAES = 99-
292};-
293template<> class QTypeInfo<CompressionMethod > { public: enum { isComplex = (((Q_PRIMITIVE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_PRIMITIVE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isRelocatable = !isStatic || ((Q_PRIMITIVE_TYPE) & Q_RELOCATABLE_TYPE), isLarge = (sizeof(CompressionMethod)>sizeof(void*)), isPointer = false, isIntegral = QtPrivate::is_integral< CompressionMethod >::value, isDummy = (((Q_PRIMITIVE_TYPE) & Q_DUMMY_TYPE) != 0), sizeOf = sizeof(CompressionMethod) }; static inline const char *name() { return "CompressionMethod"; } };-
294-
295struct LocalFileHeader-
296{-
297 uchar signature[4];-
298 uchar version_needed[2];-
299 uchar general_purpose_bits[2];-
300 uchar compression_method[2];-
301 uchar last_mod_file[4];-
302 uchar crc_32[4];-
303 uchar compressed_size[4];-
304 uchar uncompressed_size[4];-
305 uchar file_name_length[2];-
306 uchar extra_field_length[2];-
307};-
308template<> class QTypeInfo<LocalFileHeader > { public: enum { isComplex = (((Q_PRIMITIVE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_PRIMITIVE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isRelocatable = !isStatic || ((Q_PRIMITIVE_TYPE) & Q_RELOCATABLE_TYPE), isLarge = (sizeof(LocalFileHeader)>sizeof(void*)), isPointer = false, isIntegral = QtPrivate::is_integral< LocalFileHeader >::value, isDummy = (((Q_PRIMITIVE_TYPE) & Q_DUMMY_TYPE) != 0), sizeOf = sizeof(LocalFileHeader) }; static inline const char *name() { return "LocalFileHeader"; } };-
309-
310struct DataDescriptor-
311{-
312 uchar crc_32[4];-
313 uchar compressed_size[4];-
314 uchar uncompressed_size[4];-
315};-
316template<> class QTypeInfo<DataDescriptor > { public: enum { isComplex = (((Q_PRIMITIVE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_PRIMITIVE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isRelocatable = !isStatic || ((Q_PRIMITIVE_TYPE) & Q_RELOCATABLE_TYPE), isLarge = (sizeof(DataDescriptor)>sizeof(void*)), isPointer = false, isIntegral = QtPrivate::is_integral< DataDescriptor >::value, isDummy = (((Q_PRIMITIVE_TYPE) & Q_DUMMY_TYPE) != 0), sizeOf = sizeof(DataDescriptor) }; static inline const char *name() { return "DataDescriptor"; } };-
317-
318struct CentralFileHeader-
319{-
320 uchar signature[4];-
321 uchar version_made[2];-
322 uchar version_needed[2];-
323 uchar general_purpose_bits[2];-
324 uchar compression_method[2];-
325 uchar last_mod_file[4];-
326 uchar crc_32[4];-
327 uchar compressed_size[4];-
328 uchar uncompressed_size[4];-
329 uchar file_name_length[2];-
330 uchar extra_field_length[2];-
331 uchar file_comment_length[2];-
332 uchar disk_start[2];-
333 uchar internal_file_attributes[2];-
334 uchar external_file_attributes[4];-
335 uchar offset_local_header[4];-
336 LocalFileHeader toLocalHeader() const;-
337};-
338template<> class QTypeInfo<CentralFileHeader > { public: enum { isComplex = (((Q_PRIMITIVE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_PRIMITIVE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isRelocatable = !isStatic || ((Q_PRIMITIVE_TYPE) & Q_RELOCATABLE_TYPE), isLarge = (sizeof(CentralFileHeader)>sizeof(void*)), isPointer = false, isIntegral = QtPrivate::is_integral< CentralFileHeader >::value, isDummy = (((Q_PRIMITIVE_TYPE) & Q_DUMMY_TYPE) != 0), sizeOf = sizeof(CentralFileHeader) }; static inline const char *name() { return "CentralFileHeader"; } };-
339-
340struct EndOfDirectory-
341{-
342 uchar signature[4];-
343 uchar this_disk[2];-
344 uchar start_of_directory_disk[2];-
345 uchar num_dir_entries_this_disk[2];-
346 uchar num_dir_entries[2];-
347 uchar directory_size[4];-
348 uchar dir_start_offset[4];-
349 uchar comment_length[2];-
350};-
351template<> class QTypeInfo<EndOfDirectory > { public: enum { isComplex = (((Q_PRIMITIVE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_PRIMITIVE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isRelocatable = !isStatic || ((Q_PRIMITIVE_TYPE) & Q_RELOCATABLE_TYPE), isLarge = (sizeof(EndOfDirectory)>sizeof(void*)), isPointer = false, isIntegral = QtPrivate::is_integral< EndOfDirectory >::value, isDummy = (((Q_PRIMITIVE_TYPE) & Q_DUMMY_TYPE) != 0), sizeOf = sizeof(EndOfDirectory) }; static inline const char *name() { return "EndOfDirectory"; } };-
352-
353struct FileHeader-
354{-
355 CentralFileHeader h;-
356 QByteArray file_name;-
357 QByteArray extra_field;-
358 QByteArray file_comment;-
359};-
360template<> class QTypeInfo<FileHeader > { public: enum { isComplex = (((Q_MOVABLE_TYPE) & Q_PRIMITIVE_TYPE) == 0), isStatic = (((Q_MOVABLE_TYPE) & (Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE)) == 0), isRelocatable = !isStatic || ((Q_MOVABLE_TYPE) & Q_RELOCATABLE_TYPE), isLarge = (sizeof(FileHeader)>sizeof(void*)), isPointer = false, isIntegral = QtPrivate::is_integral< FileHeader >::value, isDummy = (((Q_MOVABLE_TYPE) & Q_DUMMY_TYPE) != 0), sizeOf = sizeof(FileHeader) }; static inline const char *name() { return "FileHeader"; } };-
361-
362class QZipPrivate-
363{-
364public:-
365 QZipPrivate(QIODevice *device, bool ownDev)-
366 : device(device), ownDevice(ownDev), dirtyFileTree(true), start_of_directory(0)-
367 {-
368 }
never executed: end of block
0
369-
370 ~QZipPrivate()-
371 {-
372 if (ownDevice
ownDeviceDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
373 delete device;
never executed: delete device;
0
374 }
never executed: end of block
0
375-
376 QZipReader::FileInfo fillFileInfo(int index) const;-
377-
378 QIODevice *device;-
379 bool ownDevice;-
380 bool dirtyFileTree;-
381 QVector<FileHeader> fileHeaders;-
382 QByteArray comment;-
383 uint start_of_directory;-
384};-
385-
386QZipReader::FileInfo QZipPrivate::fillFileInfo(int index) const-
387{-
388 QZipReader::FileInfo fileInfo;-
389 FileHeader header = fileHeaders.at(index);-
390 quint32 mode = readUInt(header.h.external_file_attributes);-
391 const HostOS hostOS = HostOS(readUShort(header.h.version_made) >> 8);-
392 switch (hostOS) {-
393 case
never executed: case HostUnix:
HostUnix:
never executed: case HostUnix:
0
394 mode = (mode >> 16) & 0xffff;-
395 switch (mode & UnixFileAttributes::TypeMask) {-
396 case
never executed: case UnixFileAttributes::SymLink:
UnixFileAttributes::SymLink:
never executed: case UnixFileAttributes::SymLink:
0
397 fileInfo.isSymLink = true;-
398 break;
never executed: break;
0
399 case
never executed: case UnixFileAttributes::Dir:
UnixFileAttributes::Dir:
never executed: case UnixFileAttributes::Dir:
0
400 fileInfo.isDir = true;-
401 break;
never executed: break;
0
402 case
never executed: case UnixFileAttributes::File:
UnixFileAttributes::File:
never executed: case UnixFileAttributes::File:
0
403 default
never executed: default:
:
never executed: default:
0
404 fileInfo.isFile = true;-
405 break;
never executed: break;
0
406 }-
407 fileInfo.permissions = modeToPermissions(mode);-
408 break;
never executed: break;
0
409 case
never executed: case HostFAT:
HostFAT:
never executed: case HostFAT:
0
410 case
never executed: case HostNTFS:
HostNTFS:
never executed: case HostNTFS:
0
411 case
never executed: case HostHPFS:
HostHPFS:
never executed: case HostHPFS:
0
412 case
never executed: case HostVFAT:
HostVFAT:
never executed: case HostVFAT:
0
413 switch (mode & WindowsFileAttributes::TypeMask) {-
414 case
never executed: case WindowsFileAttributes::Dir:
WindowsFileAttributes::Dir:
never executed: case WindowsFileAttributes::Dir:
0
415 fileInfo.isDir = true;-
416 break;
never executed: break;
0
417 case
never executed: case WindowsFileAttributes::File:
WindowsFileAttributes::File:
never executed: case WindowsFileAttributes::File:
0
418 default
never executed: default:
:
never executed: default:
0
419 fileInfo.isFile = true;-
420 break;
never executed: break;
0
421 }-
422 fileInfo.permissions |= QFile::ReadOwner | QFile::ReadUser | QFile::ReadGroup | QFile::ReadOther;-
423 if ((
(mode & Window...ReadOnly) == 0Description
TRUEnever evaluated
FALSEnever evaluated
mode & WindowsFileAttributes::ReadOnly) == 0
(mode & Window...ReadOnly) == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
424 fileInfo.permissions |= QFile::WriteOwner | QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther;
never executed: fileInfo.permissions |= QFile::WriteOwner | QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther;
0
425 if (fileInfo.isDir
fileInfo.isDirDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
426 fileInfo.permissions |= QFile::ExeOwner | QFile::ExeUser | QFile::ExeGroup | QFile::ExeOther;
never executed: fileInfo.permissions |= QFile::ExeOwner | QFile::ExeUser | QFile::ExeGroup | QFile::ExeOther;
0
427 break;
never executed: break;
0
428 default
never executed: default:
:
never executed: default:
0
429 QMessageLogger(__FILE__, 481, __PRETTY_FUNCTION__).warning("QZip: Zip entry format at %d is not supported.", index);-
430 return
never executed: return fileInfo;
fileInfo;
never executed: return fileInfo;
0
431 }-
432-
433 ushort general_purpose_bits = readUShort(header.h.general_purpose_bits);-
434-
435 const bool inUtf8 = (general_purpose_bits & Utf8Names) != 0;-
436 fileInfo.filePath = inUtf8
inUtf8Description
TRUEnever evaluated
FALSEnever evaluated
? QString::fromUtf8(header.file_name) : QString::fromLocal8Bit(header.file_name);
0
437 fileInfo.crc = readUInt(header.h.crc_32);-
438 fileInfo.size = readUInt(header.h.uncompressed_size);-
439 fileInfo.lastModified = readMSDosDate(header.h.last_mod_file);-
440-
441-
442 fileInfo.filePath = QDir::fromNativeSeparators(fileInfo.filePath);-
443 while (!fileInfo.filePath.isEmpty()
!fileInfo.filePath.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
&& (fileInfo.filePath.at(0) == QLatin1Char('.')
fileInfo.fileP...atin1Char('.')Description
TRUEnever evaluated
FALSEnever evaluated
|| fileInfo.filePath.at(0) == QLatin1Char('/')
fileInfo.fileP...atin1Char('/')Description
TRUEnever evaluated
FALSEnever evaluated
))
0
444 fileInfo.filePath = fileInfo.filePath.mid(1);
never executed: fileInfo.filePath = fileInfo.filePath.mid(1);
0
445 while (!fileInfo.filePath.isEmpty()
!fileInfo.filePath.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
&& fileInfo.filePath.at(fileInfo.filePath.size() - 1) == QLatin1Char('/')
fileInfo.fileP...atin1Char('/')Description
TRUEnever evaluated
FALSEnever evaluated
)
0
446 fileInfo.filePath.chop(1);
never executed: fileInfo.filePath.chop(1);
0
447-
448 return
never executed: return fileInfo;
fileInfo;
never executed: return fileInfo;
0
449}-
450-
451class QZipReaderPrivate : public QZipPrivate-
452{-
453public:-
454 QZipReaderPrivate(QIODevice *device, bool ownDev)-
455 : QZipPrivate(device, ownDev), status(QZipReader::NoError)-
456 {-
457 }
never executed: end of block
0
458-
459 void scanFiles();-
460-
461 QZipReader::Status status;-
462};-
463-
464class QZipWriterPrivate : public QZipPrivate-
465{-
466public:-
467 QZipWriterPrivate(QIODevice *device, bool ownDev)-
468 : QZipPrivate(device, ownDev),-
469 status(QZipWriter::NoError),-
470 permissions(QFile::ReadOwner | QFile::WriteOwner),-
471 compressionPolicy(QZipWriter::AlwaysCompress)-
472 {-
473 }
never executed: end of block
0
474-
475 QZipWriter::Status status;-
476 QFile::Permissions permissions;-
477 QZipWriter::CompressionPolicy compressionPolicy;-
478-
479 enum EntryType { Directory, File, Symlink };-
480-
481 void addEntry(EntryType type, const QString &fileName, const QByteArray &contents);-
482};-
483-
484LocalFileHeader CentralFileHeader::toLocalHeader() const-
485{-
486 LocalFileHeader h;-
487 writeUInt(h.signature, 0x04034b50);-
488 copyUShort(h.version_needed, version_needed);-
489 copyUShort(h.general_purpose_bits, general_purpose_bits);-
490 copyUShort(h.compression_method, compression_method);-
491 copyUInt(h.last_mod_file, last_mod_file);-
492 copyUInt(h.crc_32, crc_32);-
493 copyUInt(h.compressed_size, compressed_size);-
494 copyUInt(h.uncompressed_size, uncompressed_size);-
495 copyUShort(h.file_name_length, file_name_length);-
496 copyUShort(h.extra_field_length, extra_field_length);-
497 return
never executed: return h;
h;
never executed: return h;
0
498}-
499-
500void QZipReaderPrivate::scanFiles()-
501{-
502 if (!dirtyFileTree
!dirtyFileTreeDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
503 return;
never executed: return;
0
504-
505 if (! (device->isOpen()
device->isOpen()Description
TRUEnever evaluated
FALSEnever evaluated
|| device->open(QIODevice::ReadOnly)
device->open(Q...ice::ReadOnly)Description
TRUEnever evaluated
FALSEnever evaluated
)) {
0
506 status = QZipReader::FileOpenError;-
507 return;
never executed: return;
0
508 }-
509-
510 if ((
(device->openM...ReadOnly) == 0Description
TRUEnever evaluated
FALSEnever evaluated
device->openMode() & QIODevice::ReadOnly) == 0
(device->openM...ReadOnly) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
511 status = QZipReader::FileReadError;-
512 return;
never executed: return;
0
513 }-
514-
515 dirtyFileTree = false;-
516 uchar tmp[4];-
517 device->read((char *)tmp, 4);-
518 if (readUInt(tmp) != 0x04034b50
readUInt(tmp) != 0x04034b50Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
519 QMessageLogger(__FILE__, 571, __PRETTY_FUNCTION__).warning() << "QZip: not a zip file!";-
520 return;
never executed: return;
0
521 }-
522-
523-
524 int i = 0;-
525 int start_of_directory = -1;-
526 int num_dir_entries = 0;-
527 EndOfDirectory eod;-
528 while (start_of_directory == -1
start_of_directory == -1Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
529 const int pos = device->size() - int(sizeof(EndOfDirectory)) - i;-
530 if (pos < 0
pos < 0Description
TRUEnever evaluated
FALSEnever evaluated
|| i > 65535
i > 65535Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
531 QMessageLogger(__FILE__, 583, __PRETTY_FUNCTION__).warning() << "QZip: EndOfDirectory not found";-
532 return;
never executed: return;
0
533 }-
534-
535 device->seek(pos);-
536 device->read((char *)&eod, sizeof(EndOfDirectory));-
537 if (readUInt(eod.signature) == 0x06054b50
readUInt(eod.s... == 0x06054b50Description
TRUEnever evaluated
FALSEnever evaluated
)
0
538 break;
never executed: break;
0
539 ++i;-
540 }
never executed: end of block
0
541-
542-
543 start_of_directory = readUInt(eod.dir_start_offset);-
544 num_dir_entries = readUShort(eod.num_dir_entries);-
545 if (0) QMessageLogger(__FILE__, 597, __PRETTY_FUNCTION__).debug("start_of_directory at %d, num_dir_entries=%d", start_of_directory, num_dir_entries);
dead code: QMessageLogger(__FILE__, 597, __PRETTY_FUNCTION__).debug("start_of_directory at %d, num_dir_entries=%d", start_of_directory, num_dir_entries);
-
546 int comment_length = readUShort(eod.comment_length);-
547 if (comment_length != i
comment_length != iDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
548 QMessageLogger(__FILE__, 600, __PRETTY_FUNCTION__).warning() << "QZip: failed to parse zip file.";
never executed: QMessageLogger(__FILE__, 600, __PRETTY_FUNCTION__).warning() << "QZip: failed to parse zip file.";
0
549 comment = device->read(qMin(comment_length, i));-
550-
551-
552 device->seek(start_of_directory);-
553 for (i = 0; i < num_dir_entries
i < num_dir_entriesDescription
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
554 FileHeader header;-
555 int read = device->read((char *) &header.h, sizeof(CentralFileHeader));-
556 if (read < (int)sizeof(CentralFileHeader)
read < (int)si...ralFileHeader)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
557 QMessageLogger(__FILE__, 609, __PRETTY_FUNCTION__).warning() << "QZip: Failed to read complete header, index may be incomplete";-
558 break;
never executed: break;
0
559 }-
560 if (readUInt(header.h.signature) != 0x02014b50
readUInt(heade... != 0x02014b50Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
561 QMessageLogger(__FILE__, 613, __PRETTY_FUNCTION__).warning() << "QZip: invalid header signature, index may be incomplete";-
562 break;
never executed: break;
0
563 }-
564-
565 int l = readUShort(header.h.file_name_length);-
566 header.file_name = device->read(l);-
567 if (header.file_name.length() != l
header.file_name.length() != lDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
568 QMessageLogger(__FILE__, 620, __PRETTY_FUNCTION__).warning() << "QZip: Failed to read filename from zip index, index may be incomplete";-
569 break;
never executed: break;
0
570 }-
571 l = readUShort(header.h.extra_field_length);-
572 header.extra_field = device->read(l);-
573 if (header.extra_field.length() != l
header.extra_f....length() != lDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
574 QMessageLogger(__FILE__, 626, __PRETTY_FUNCTION__).warning() << "QZip: Failed to read extra field in zip file, skipping file, index may be incomplete";-
575 break;
never executed: break;
0
576 }-
577 l = readUShort(header.h.file_comment_length);-
578 header.file_comment = device->read(l);-
579 if (header.file_comment.length() != l
header.file_co....length() != lDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
580 QMessageLogger(__FILE__, 632, __PRETTY_FUNCTION__).warning() << "QZip: Failed to read read file comment, index may be incomplete";-
581 break;
never executed: break;
0
582 }-
583-
584 if (0) QMessageLogger(__FILE__, 636, __PRETTY_FUNCTION__).debug("found file '%s'", header.file_name.data());
dead code: QMessageLogger(__FILE__, 636, __PRETTY_FUNCTION__).debug("found file '%s'", header.file_name.data());
-
585 fileHeaders.append(header);-
586 }
never executed: end of block
0
587}
never executed: end of block
0
588-
589void QZipWriterPrivate::addEntry(EntryType type, const QString &fileName, const QByteArray &contents )-
590{-
591-
592 static const char *const entryTypes[] = {-
593 "directory",-
594 "file ",-
595 "symlink " };-
596 if (0) QMessageLogger(__FILE__, 648, __PRETTY_FUNCTION__).debug() << "adding" << entryTypes[type] <<":" << fileName.toUtf8().data() << (type == 2 ? QByteArray(" -> " + contents).constData() : "");
dead code: QMessageLogger(__FILE__, 648, __PRETTY_FUNCTION__).debug() << "adding" << entryTypes[type] <<":" << fileName.toUtf8().data() << (type == 2 ? QByteArray(" -> " + contents).constData() : "");
-
597-
598-
599 if (! (device->isOpen()
device->isOpen()Description
TRUEnever evaluated
FALSEnever evaluated
|| device->open(QIODevice::WriteOnly)
device->open(Q...ce::WriteOnly)Description
TRUEnever evaluated
FALSEnever evaluated
)) {
0
600 status = QZipWriter::FileOpenError;-
601 return;
never executed: return;
0
602 }-
603 device->seek(start_of_directory);-
604-
605-
606 QZipWriter::CompressionPolicy compression = compressionPolicy;-
607 if (compressionPolicy == QZipWriter::AutoCompress
compressionPol...::AutoCompressDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
608 if (contents.length() < 64
contents.length() < 64Description
TRUEnever evaluated
FALSEnever evaluated
)
0
609 compression = QZipWriter::NeverCompress;
never executed: compression = QZipWriter::NeverCompress;
0
610 else-
611 compression = QZipWriter::AlwaysCompress;
never executed: compression = QZipWriter::AlwaysCompress;
0
612 }-
613-
614 FileHeader header;-
615 memset(&header.h, 0, sizeof(CentralFileHeader));-
616 writeUInt(header.h.signature, 0x02014b50);-
617-
618 writeUShort(header.h.version_needed, 20);-
619 writeUInt(header.h.uncompressed_size, contents.length());-
620 writeMSDosDate(header.h.last_mod_file, QDateTime::currentDateTime());-
621 QByteArray data = contents;-
622 if (compression == QZipWriter::AlwaysCompress
compression ==...AlwaysCompressDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
623 writeUShort(header.h.compression_method, CompressionMethodDeflated);-
624-
625 ulong len = contents.length();-
626-
627 len += (len >> 12) + (len >> 14) + 11;-
628 int res;-
629 do {-
630 data.resize(len);-
631 res = deflate((uchar*)data.data(), &len, (const uchar*)contents.constData(), contents.length());-
632-
633 switch (res) {-
634 case
never executed: case 0:
0:
never executed: case 0:
0
635 data.resize(len);-
636 break;
never executed: break;
0
637 case
never executed: case (-4):
(-4):
never executed: case (-4):
0
638 QMessageLogger(__FILE__, 690, __PRETTY_FUNCTION__).warning("QZip: Z_MEM_ERROR: Not enough memory to compress file, skipping");-
639 data.resize(0);-
640 break;
never executed: break;
0
641 case
never executed: case (-5):
(-5):
never executed: case (-5):
0
642 len *= 2;-
643 break;
never executed: break;
0
644 }-
645 }
never executed: end of block
while (res == (-5)
res == (-5)Description
TRUEnever evaluated
FALSEnever evaluated
);
0
646 }
never executed: end of block
0
647-
648 writeUInt(header.h.compressed_size, data.length());-
649 uint crc_32 = ::crc32(0, 0, 0);-
650 crc_32 = ::crc32(crc_32, (const uchar *)contents.constData(), contents.length());-
651 writeUInt(header.h.crc_32, crc_32);-
652-
653-
654 ushort general_purpose_bits = Utf8Names;-
655 writeUShort(header.h.general_purpose_bits, general_purpose_bits);-
656-
657 const bool inUtf8 = (general_purpose_bits & Utf8Names) != 0;-
658 header.file_name = inUtf8
inUtf8Description
TRUEnever evaluated
FALSEnever evaluated
? fileName.toUtf8() : fileName.toLocal8Bit();
0
659 if (header.file_name.size() > 0xffff
header.file_na...ize() > 0xffffDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
660 QMessageLogger(__FILE__, 712, __PRETTY_FUNCTION__).warning("QZip: Filename is too long, chopping it to 65535 bytes");-
661 header.file_name = header.file_name.left(0xffff);-
662 }
never executed: end of block
0
663 if (header.file_comment.size() + header.file_name.size() > 0xffff
header.file_co...ize() > 0xffffDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
664 QMessageLogger(__FILE__, 716, __PRETTY_FUNCTION__).warning("QZip: File comment is too long, chopping it to 65535 bytes");-
665 header.file_comment.truncate(0xffff - header.file_name.size());-
666 }
never executed: end of block
0
667 writeUShort(header.h.file_name_length, header.file_name.length());-
668-
669-
670 writeUShort(header.h.version_made, HostUnix << 8);-
671-
672-
673 quint32 mode = permissionsToMode(permissions);-
674 switch (type) {-
675 case
never executed: case Symlink:
Symlink:
never executed: case Symlink:
0
676 mode |= UnixFileAttributes::SymLink;-
677 break;
never executed: break;
0
678 case
never executed: case Directory:
Directory:
never executed: case Directory:
0
679 mode |= UnixFileAttributes::Dir;-
680 break;
never executed: break;
0
681 case
never executed: case File:
File:
never executed: case File:
0
682 mode |= UnixFileAttributes::File;-
683 break;
never executed: break;
0
684 default
never executed: default:
:
never executed: default:
0
685 do { ((!(false)) ? qt_assert_x("Q_UNREACHABLE()", "Q_UNREACHABLE was reached",__FILE__,737) : qt_noop()); __builtin_unreachable(); } while (0);-
686 break;
never executed: break;
0
687 }-
688 writeUInt(header.h.external_file_attributes, mode << 16);-
689 writeUInt(header.h.offset_local_header, start_of_directory);-
690-
691-
692 fileHeaders.append(header);-
693-
694 LocalFileHeader h = header.h.toLocalHeader();-
695 device->write((const char *)&h, sizeof(LocalFileHeader));-
696 device->write(header.file_name);-
697 device->write(data);-
698 start_of_directory = device->pos();-
699 dirtyFileTree = true;-
700}
never executed: end of block
0
701QZipReader::QZipReader(const QString &archive, QIODevice::OpenMode mode)-
702{-
703 QScopedPointer<QFile> f(new QFile(archive));-
704 QZipReader::Status status;-
705 if (f->open(mode)
f->open(mode)Description
TRUEnever evaluated
FALSEnever evaluated
&& f->error() == QFile::NoError
f->error() == QFile::NoErrorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
706 status = NoError;
never executed: status = NoError;
0
707 else {-
708 if (f->error() == QFile::ReadError
f->error() == QFile::ReadErrorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
709 status = FileReadError;
never executed: status = FileReadError;
0
710 else if (f->error() == QFile::OpenError
f->error() == QFile::OpenErrorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
711 status = FileOpenError;
never executed: status = FileOpenError;
0
712 else if (f->error() == QFile::PermissionsError
f->error() == ...rmissionsErrorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
713 status = FilePermissionsError;
never executed: status = FilePermissionsError;
0
714 else-
715 status = FileError;
never executed: status = FileError;
0
716 }-
717-
718 d = new QZipReaderPrivate(f.data(), true);-
719 f.take();-
720 d->status = status;-
721}
never executed: end of block
0
722-
723-
724-
725-
726-
727-
728QZipReader::QZipReader(QIODevice *device)-
729 : d(new QZipReaderPrivate(device, false))-
730{-
731 ((!(device)) ? qt_assert("device",__FILE__,846) : qt_noop());-
732}
never executed: end of block
0
733-
734-
735-
736-
737QZipReader::~QZipReader()-
738{-
739 close();-
740 delete d;-
741}
never executed: end of block
0
742-
743-
744-
745-
746QIODevice* QZipReader::device() const-
747{-
748 return
never executed: return d->device;
d->device;
never executed: return d->device;
0
749}-
750-
751-
752-
753-
754bool QZipReader::isReadable() const-
755{-
756 return
never executed: return d->device->isReadable();
d->device->isReadable();
never executed: return d->device->isReadable();
0
757}-
758-
759-
760-
761-
762bool QZipReader::exists() const-
763{-
764 QFile *f = qobject_cast<QFile*> (d->device);-
765 if (f == 0
f == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
766 return
never executed: return true;
true;
never executed: return true;
0
767 return
never executed: return f->exists();
f->exists();
never executed: return f->exists();
0
768}-
769-
770-
771-
772-
773QVector<QZipReader::FileInfo> QZipReader::fileInfoList() const-
774{-
775 d->scanFiles();-
776 QVector<FileInfo> files;-
777 const int numFileHeaders = d->fileHeaders.size();-
778 files.reserve(numFileHeaders);-
779 for (int i = 0; i < numFileHeaders
i < numFileHeadersDescription
TRUEnever evaluated
FALSEnever evaluated
; ++i)
0
780 files.append(d->fillFileInfo(i));
never executed: files.append(d->fillFileInfo(i));
0
781 return
never executed: return files;
files;
never executed: return files;
0
782-
783}-
784-
785-
786-
787-
788int QZipReader::count() const-
789{-
790 d->scanFiles();-
791 return
never executed: return d->fileHeaders.count();
d->fileHeaders.count();
never executed: return d->fileHeaders.count();
0
792}-
793QZipReader::FileInfo QZipReader::entryInfoAt(int index) const-
794{-
795 d->scanFiles();-
796 if (index >= 0
index >= 0Description
TRUEnever evaluated
FALSEnever evaluated
&& index < d->fileHeaders.count()
index < d->fileHeaders.count()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
797 return
never executed: return d->fillFileInfo(index);
d->fillFileInfo(index);
never executed: return d->fillFileInfo(index);
0
798 return
never executed: return QZipReader::FileInfo();
QZipReader::FileInfo();
never executed: return QZipReader::FileInfo();
0
799}-
800-
801-
802-
803-
804QByteArray QZipReader::fileData(const QString &fileName) const-
805{-
806 d->scanFiles();-
807 int i;-
808 for (i = 0; i < d->fileHeaders.size()
i < d->fileHeaders.size()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
809 if (QString::fromLocal8Bit(d->fileHeaders.at(i).file_name) == fileName
QString::fromL...e) == fileNameDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
810 break;
never executed: break;
0
811 }
never executed: end of block
0
812 if (i == d->fileHeaders.size()
i == d->fileHeaders.size()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
813 return
never executed: return QByteArray();
QByteArray();
never executed: return QByteArray();
0
814-
815 FileHeader header = d->fileHeaders.at(i);-
816-
817 ushort version_needed = readUShort(header.h.version_needed);-
818 if (version_needed > 20
version_needed > 20Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
819 QMessageLogger(__FILE__, 942, __PRETTY_FUNCTION__).warning("QZip: .ZIP specification version %d implementationis needed to extract the data.", version_needed);-
820 return
never executed: return QByteArray();
QByteArray();
never executed: return QByteArray();
0
821 }-
822-
823 ushort general_purpose_bits = readUShort(header.h.general_purpose_bits);-
824 int compressed_size = readUInt(header.h.compressed_size);-
825 int uncompressed_size = readUInt(header.h.uncompressed_size);-
826 int start = readUInt(header.h.offset_local_header);-
827-
828-
829 d->device->seek(start);-
830 LocalFileHeader lh;-
831 d->device->read((char *)&lh, sizeof(LocalFileHeader));-
832 uint skip = readUShort(lh.file_name_length) + readUShort(lh.extra_field_length);-
833 d->device->seek(d->device->pos() + skip);-
834-
835 int compression_method = readUShort(lh.compression_method);-
836-
837-
838 if ((
(general_purpo...ncrypted) != 0Description
TRUEnever evaluated
FALSEnever evaluated
general_purpose_bits & Encrypted) != 0
(general_purpo...ncrypted) != 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
839 QMessageLogger(__FILE__, 962, __PRETTY_FUNCTION__).warning("QZip: Unsupported encryption method is needed to extract the data.");-
840 return
never executed: return QByteArray();
QByteArray();
never executed: return QByteArray();
0
841 }-
842-
843-
844 QByteArray compressed = d->device->read(compressed_size);-
845 if (compression_method == CompressionMethodStored
compression_me...onMethodStoredDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
846-
847 compressed.truncate(uncompressed_size);-
848 return
never executed: return compressed;
compressed;
never executed: return compressed;
0
849 } else if (compression_method == CompressionMethodDeflated
compression_me...MethodDeflatedDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
850-
851-
852 compressed.truncate(compressed_size);-
853 QByteArray baunzip;-
854 ulong len = qMax(uncompressed_size, 1);-
855 int res;-
856 do {-
857 baunzip.resize(len);-
858 res = inflate((uchar*)baunzip.data(), &len,-
859 (const uchar*)compressed.constData(), compressed_size);-
860-
861 switch (res) {-
862 case
never executed: case 0:
0:
never executed: case 0:
0
863 if ((
(int)len != baunzip.size()Description
TRUEnever evaluated
FALSEnever evaluated
int)len != baunzip.size()
(int)len != baunzip.size()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
864 baunzip.resize(len);
never executed: baunzip.resize(len);
0
865 break;
never executed: break;
0
866 case
never executed: case (-4):
(-4):
never executed: case (-4):
0
867 QMessageLogger(__FILE__, 990, __PRETTY_FUNCTION__).warning("QZip: Z_MEM_ERROR: Not enough memory");-
868 break;
never executed: break;
0
869 case
never executed: case (-5):
(-5):
never executed: case (-5):
0
870 len *= 2;-
871 break;
never executed: break;
0
872 case
never executed: case (-3):
(-3):
never executed: case (-3):
0
873 QMessageLogger(__FILE__, 996, __PRETTY_FUNCTION__).warning("QZip: Z_DATA_ERROR: Input data is corrupted");-
874 break;
never executed: break;
0
875 }-
876 }
never executed: end of block
while (res == (-5)
res == (-5)Description
TRUEnever evaluated
FALSEnever evaluated
);
0
877 return
never executed: return baunzip;
baunzip;
never executed: return baunzip;
0
878 }-
879-
880 QMessageLogger(__FILE__, 1003, __PRETTY_FUNCTION__).warning("QZip: Unsupported compression method %d is needed to extract the data.", compression_method);-
881 return
never executed: return QByteArray();
QByteArray();
never executed: return QByteArray();
0
882}-
883-
884-
885-
886-
887-
888-
889bool QZipReader::extractAll(const QString &destinationDir) const-
890{-
891 QDir baseDir(destinationDir);-
892-
893-
894 const QVector<FileInfo> allFiles = fileInfoList();-
895 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(allFiles)>::type> _container_((allFiles)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (const FileInfo &fi = *_container_.i; _container_.control; _container_.control = 0) {-
896 const QString absPath = destinationDir + QDir::separator() + fi.filePath;-
897 if (fi.isDir
fi.isDirDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
898 if (!baseDir.mkpath(fi.filePath)
!baseDir.mkpath(fi.filePath)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
899 return
never executed: return false;
false;
never executed: return false;
0
900 if (!QFile::setPermissions(absPath, fi.permissions)
!QFile::setPer...i.permissions)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
901 return
never executed: return false;
false;
never executed: return false;
0
902 }
never executed: end of block
0
903 }
never executed: end of block
0
904-
905-
906 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(allFiles)>::type> _container_((allFiles)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (const FileInfo &fi = *_container_.i; _container_.control; _container_.control = 0) {-
907 const QString absPath = destinationDir + QDir::separator() + fi.filePath;-
908 if (fi.isSymLink
fi.isSymLinkDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
909 QString destination = QFile::decodeName(fileData(fi.filePath));-
910 if (destination.isEmpty()
destination.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
)
0
911 return
never executed: return false;
false;
never executed: return false;
0
912 QFileInfo linkFi(absPath);-
913 if (!QFile::exists(linkFi.absolutePath())
!QFile::exists...bsolutePath())Description
TRUEnever evaluated
FALSEnever evaluated
)
0
914 QDir::root().mkpath(linkFi.absolutePath());
never executed: QDir::root().mkpath(linkFi.absolutePath());
0
915 if (!QFile::link(destination, absPath)
!QFile::link(d...tion, absPath)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
916 return
never executed: return false;
false;
never executed: return false;
0
917-
918-
919-
920-
921 }
never executed: end of block
0
922 }
never executed: end of block
0
923-
924 for (QForeachContainer<typename QtPrivate::remove_reference<decltype(allFiles)>::type> _container_((allFiles)); _container_.control && _container_.i != _container_.e; ++_container_.i, _container_.control ^= 1) for (const FileInfo &fi = *_container_.i; _container_.control; _container_.control = 0) {-
925 const QString absPath = destinationDir + QDir::separator() + fi.filePath;-
926 if (fi.isFile
fi.isFileDescription
TRUEnever evaluated
FALSEnever evaluated
) {
0
927 QFile f(absPath);-
928 if (!f.open(QIODevice::WriteOnly)
!f.open(QIODevice::WriteOnly)Description
TRUEnever evaluated
FALSEnever evaluated
)
0
929 return
never executed: return false;
false;
never executed: return false;
0
930 f.write(fileData(fi.filePath));-
931 f.setPermissions(fi.permissions);-
932 f.close();-
933 }
never executed: end of block
0
934 }
never executed: end of block
0
935-
936 return
never executed: return true;
true;
never executed: return true;
0
937}-
938QZipReader::Status QZipReader::status() const-
939{-
940 return
never executed: return d->status;
d->status;
never executed: return d->status;
0
941}-
942-
943-
944-
945-
946void QZipReader::close()-
947{-
948 d->device->close();-
949}
never executed: end of block
0
950QZipWriter::QZipWriter(const QString &fileName, QIODevice::OpenMode mode)-
951{-
952 QScopedPointer<QFile> f(new QFile(fileName));-
953 QZipWriter::Status status;-
954 if (f->open(mode)
f->open(mode)Description
TRUEnever evaluated
FALSEnever evaluated
&& f->error() == QFile::NoError
f->error() == QFile::NoErrorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
955 status = QZipWriter::NoError;
never executed: status = QZipWriter::NoError;
0
956 else {-
957 if (f->error() == QFile::WriteError
f->error() == ...le::WriteErrorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
958 status = QZipWriter::FileWriteError;
never executed: status = QZipWriter::FileWriteError;
0
959 else if (f->error() == QFile::OpenError
f->error() == QFile::OpenErrorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
960 status = QZipWriter::FileOpenError;
never executed: status = QZipWriter::FileOpenError;
0
961 else if (f->error() == QFile::PermissionsError
f->error() == ...rmissionsErrorDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
962 status = QZipWriter::FilePermissionsError;
never executed: status = QZipWriter::FilePermissionsError;
0
963 else-
964 status = QZipWriter::FileError;
never executed: status = QZipWriter::FileError;
0
965 }-
966-
967 d = new QZipWriterPrivate(f.data(), true);-
968 f.take();-
969 d->status = status;-
970}
never executed: end of block
0
971-
972-
973-
974-
975-
976-
977QZipWriter::QZipWriter(QIODevice *device)-
978 : d(new QZipWriterPrivate(device, false))-
979{-
980 ((!(device)) ? qt_assert("device",__FILE__,1141) : qt_noop());-
981}
never executed: end of block
0
982-
983QZipWriter::~QZipWriter()-
984{-
985 close();-
986 delete d;-
987}
never executed: end of block
0
988-
989-
990-
991-
992QIODevice* QZipWriter::device() const-
993{-
994 return
never executed: return d->device;
d->device;
never executed: return d->device;
0
995}-
996-
997-
998-
999-
1000bool QZipWriter::isWritable() const-
1001{-
1002 return
never executed: return d->device->isWritable();
d->device->isWritable();
never executed: return d->device->isWritable();
0
1003}-
1004-
1005-
1006-
1007-
1008bool QZipWriter::exists() const-
1009{-
1010 QFile *f = qobject_cast<QFile*> (d->device);-
1011 if (f == 0
f == 0Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1012 return
never executed: return true;
true;
never executed: return true;
0
1013 return
never executed: return f->exists();
f->exists();
never executed: return f->exists();
0
1014}-
1015QZipWriter::Status QZipWriter::status() const-
1016{-
1017 return
never executed: return d->status;
d->status;
never executed: return d->status;
0
1018}-
1019void QZipWriter::setCompressionPolicy(CompressionPolicy policy)-
1020{-
1021 d->compressionPolicy = policy;-
1022}
never executed: end of block
0
1023-
1024-
1025-
1026-
1027-
1028-
1029QZipWriter::CompressionPolicy QZipWriter::compressionPolicy() const-
1030{-
1031 return
never executed: return d->compressionPolicy;
d->compressionPolicy;
never executed: return d->compressionPolicy;
0
1032}-
1033void QZipWriter::setCreationPermissions(QFile::Permissions permissions)-
1034{-
1035 d->permissions = permissions;-
1036}
never executed: end of block
0
1037-
1038-
1039-
1040-
1041-
1042-
1043-
1044QFile::Permissions QZipWriter::creationPermissions() const-
1045{-
1046 return
never executed: return d->permissions;
d->permissions;
never executed: return d->permissions;
0
1047}-
1048void QZipWriter::addFile(const QString &fileName, const QByteArray &data)-
1049{-
1050 d->addEntry(QZipWriterPrivate::File, QDir::fromNativeSeparators(fileName), data);-
1051}
never executed: end of block
0
1052void QZipWriter::addFile(const QString &fileName, QIODevice *device)-
1053{-
1054 ((!(device)) ? qt_assert("device",__FILE__,1279) : qt_noop());-
1055 QIODevice::OpenMode mode = device->openMode();-
1056 bool opened = false;-
1057 if ((
(mode & QIODev...ReadOnly) == 0Description
TRUEnever evaluated
FALSEnever evaluated
mode & QIODevice::ReadOnly) == 0
(mode & QIODev...ReadOnly) == 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1058 opened = true;-
1059 if (! device->open(QIODevice::ReadOnly)
! device->open...ice::ReadOnly)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1060 d->status = FileOpenError;-
1061 return;
never executed: return;
0
1062 }-
1063 }
never executed: end of block
0
1064 d->addEntry(QZipWriterPrivate::File, QDir::fromNativeSeparators(fileName), device->readAll());-
1065 if (opened
openedDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
1066 device->close();
never executed: device->close();
0
1067}
never executed: end of block
0
1068-
1069-
1070-
1071-
1072-
1073void QZipWriter::addDirectory(const QString &dirName)-
1074{-
1075 QString name(QDir::fromNativeSeparators(dirName));-
1076-
1077 if (!name.endsWith(QLatin1Char('/'))
!name.endsWith...tin1Char('/'))Description
TRUEnever evaluated
FALSEnever evaluated
)
0
1078 name.append(QLatin1Char('/'));
never executed: name.append(QLatin1Char('/'));
0
1079 d->addEntry(QZipWriterPrivate::Directory, name, QByteArray());-
1080}
never executed: end of block
0
1081-
1082-
1083-
1084-
1085-
1086-
1087void QZipWriter::addSymLink(const QString &fileName, const QString &destination)-
1088{-
1089 d->addEntry(QZipWriterPrivate::Symlink, QDir::fromNativeSeparators(fileName), QFile::encodeName(destination));-
1090}
never executed: end of block
0
1091-
1092-
1093-
1094-
1095void QZipWriter::close()-
1096{-
1097 if (!(d->device->openMode() & QIODevice::WriteOnly)
!(d->device->o...ce::WriteOnly)Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
1098 d->device->close();-
1099 return;
never executed: return;
0
1100 }-
1101-
1102-
1103 d->device->seek(d->start_of_directory);-
1104-
1105 for (int i = 0; i < d->fileHeaders.size()
i < d->fileHeaders.size()Description
TRUEnever evaluated
FALSEnever evaluated
; ++i) {
0
1106 const FileHeader &header = d->fileHeaders.at(i);-
1107 d->device->write((const char *)&header.h, sizeof(CentralFileHeader));-
1108 d->device->write(header.file_name);-
1109 d->device->write(header.extra_field);-
1110 d->device->write(header.file_comment);-
1111 }
never executed: end of block
0
1112 int dir_size = d->device->pos() - d->start_of_directory;-
1113-
1114 EndOfDirectory eod;-
1115 memset(&eod, 0, sizeof(EndOfDirectory));-
1116 writeUInt(eod.signature, 0x06054b50);-
1117-
1118-
1119 writeUShort(eod.num_dir_entries_this_disk, d->fileHeaders.size());-
1120 writeUShort(eod.num_dir_entries, d->fileHeaders.size());-
1121 writeUInt(eod.directory_size, dir_size);-
1122 writeUInt(eod.dir_start_offset, d->start_of_directory);-
1123 writeUShort(eod.comment_length, d->comment.length());-
1124-
1125 d->device->write((const char *)&eod, sizeof(EndOfDirectory));-
1126 d->device->write(d->comment);-
1127 d->device->close();-
1128}
never executed: end of block
0
1129-
1130-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9