uuu
uuu (Universal Update Utility), mfgtools 3.0
Loading...
Searching...
No Matches
zip.h
Go to the documentation of this file.
1/*
2* Copyright 2018 NXP.
3*
4* Redistribution and use in source and binary forms, with or without modification,
5* are permitted provided that the following conditions are met:
6*
7* Redistributions of source code must retain the above copyright notice, this
8* list of conditions and the following disclaimer.
9*
10* Redistributions in binary form must reproduce the above copyright notice, this
11* list of conditions and the following disclaimer in the documentation and/or
12* other materials provided with the distribution.
13*
14* Neither the name of the NXP Semiconductor nor the names of its
15* contributors may be used to endorse or promote products derived from this
16* software without specific prior written permission.
17*
18* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28* POSSIBILITY OF SUCH DAMAGE.
29*
30*/
31#pragma once
32
33#include "backfile.h"
34
35#include "zlib.h"
36
37#include <cstdint>
38#include <map>
39#include <memory>
40
41/* Allow opportunistic use of the C++17 fall-through attribute . */
42#if defined(__cplusplus) && __cplusplus >= 201703L
43#define FALLTHROUGH [[fallthrough]]
44#else
45#define FALLTHROUGH
46#endif
47
48class FileBuffer;
49
50#pragma pack(1)
52{
53 uint32_t sign;
54 uint32_t crc;
57};
58
60{
61 uint32_t sign;
63 uint16_t flags;
67 uint32_t crc;
72 uint8_t filename[0];
73};
75{
76 uint32_t sign;
77 uint16_t version;
79 uint16_t flags;
83 uint32_t crc;
89 uint16_t disk_number;
92 uint32_t offset;
93 uint8_t filename[0];
94};
95
97{
98 uint32_t sign;
99 uint16_t version;
101 uint16_t flags;
105 uint32_t crc;
111 uint16_t disk_number;
114 uint32_t offset;
115 uint8_t filename[0];
116};
118{
119 uint32_t sign;
123 uint16_t num_of_dir;
127 uint8_t comment[0];
128};
129
131{
132 uint32_t sign;
136};
137
139{
140 uint32_t sign;
141 uint64_t size_of_eocd;
142 uint16_t version;
145 uint32_t num_of_disk;
146 uint64_t total_ondisk;
147 uint64_t total;
148 uint64_t size;
149 uint64_t offset;
150};
151
153{
154 uint16_t tag;
155 uint16_t size;
156};
157
158#define EOCD_SIGNATURE 0x06054b50
159#define DIR_SIGNATURE 0x02014b50
160#define DATA_SIGNATURE 0x08074b50
161#define FILE_SIGNATURE 0x04034b50
162#define EOCD64_LOCATOR_SIGNATURE 0x07064b50
163#define EOCD64_SIGNATURE 0x06064b50
164
165class Zip;
166
168{
169public:
172
173 int decompress(Zip *pZip, std::shared_ptr<FileBuffer> p);
174
175private:
176 std::string m_filename;
177 uint32_t m_timestamp;
180 size_t m_offset;
181 z_stream m_strm;
182
183 friend Zip;
184};
185
186class Zip : public Backfile
187{
188public:
189 int BuildDirInfo();
190 bool check_file_exist(std::string filename);
191 int get_file_buff(std::string filename, std::shared_ptr<FileBuffer>p);
192 int Open(std::string filename);
193
194 std::map<std::string, Zip_file_Info> m_filemap;
195};
196
197
198#pragma pack()
Definition backfile.h:37
Definition buffer.h:164
size_t m_filesize
Definition zip.h:178
Zip_file_Info()
Definition zip.cpp:215
friend Zip
Definition zip.h:183
~Zip_file_Info()
Definition zip.cpp:220
z_stream m_strm
Definition zip.h:181
size_t m_compressedsize
Definition zip.h:179
uint32_t m_timestamp
Definition zip.h:177
size_t m_offset
Definition zip.h:180
std::string m_filename
Definition zip.h:176
int decompress(Zip *pZip, std::shared_ptr< FileBuffer > p)
Definition zip.cpp:225
Definition zip.h:187
int Open(std::string filename)
Definition zip.cpp:209
int BuildDirInfo()
Definition zip.cpp:42
bool check_file_exist(std::string filename)
Definition zip.cpp:176
std::map< std::string, Zip_file_Info > m_filemap
Definition zip.h:194
int get_file_buff(std::string filename, std::shared_ptr< FileBuffer >p)
Definition zip.cpp:190
Definition zip.h:97
uint16_t flags
Definition zip.h:101
uint16_t last_modify_date
Definition zip.h:104
uint8_t filename[0]
Definition zip.h:115
uint16_t version_mini_extract
Definition zip.h:100
uint16_t internal_file_attr
Definition zip.h:112
uint16_t version
Definition zip.h:99
uint16_t file_comment_length
Definition zip.h:110
uint16_t extrafield_length
Definition zip.h:109
uint16_t last_modify_time
Definition zip.h:103
uint32_t external_file_attr
Definition zip.h:113
uint16_t disk_number
Definition zip.h:111
uint32_t compressed_size
Definition zip.h:106
uint32_t offset
Definition zip.h:114
uint32_t crc
Definition zip.h:105
uint32_t sign
Definition zip.h:98
uint32_t uncompressed_size
Definition zip.h:107
uint16_t file_name_length
Definition zip.h:108
uint16_t compress_method
Definition zip.h:102
Definition zip.h:131
uint32_t total_num_disks
Definition zip.h:135
uint64_t offset_of_eocd
Definition zip.h:134
uint32_t num_of_thisdisk
Definition zip.h:133
uint32_t sign
Definition zip.h:132
Definition zip.h:139
uint16_t version
Definition zip.h:142
uint16_t version_mini_extract
Definition zip.h:143
uint64_t total
Definition zip.h:147
uint64_t size
Definition zip.h:148
uint64_t total_ondisk
Definition zip.h:146
uint32_t num_of_dir_ondisk
Definition zip.h:144
uint64_t size_of_eocd
Definition zip.h:141
uint64_t offset
Definition zip.h:149
uint32_t sign
Definition zip.h:140
uint32_t num_of_disk
Definition zip.h:145
Definition zip.h:75
uint16_t file_comment_length
Definition zip.h:88
uint16_t flags
Definition zip.h:79
uint32_t uncompressed_size
Definition zip.h:85
uint16_t disk_number
Definition zip.h:89
uint32_t compressed_size
Definition zip.h:84
uint32_t sign
Definition zip.h:76
uint16_t file_name_length
Definition zip.h:86
uint16_t version_mini_extract
Definition zip.h:78
uint16_t internal_file_attr
Definition zip.h:90
uint16_t extrafield_length
Definition zip.h:87
uint32_t offset
Definition zip.h:92
uint16_t compress_method
Definition zip.h:80
uint8_t filename[0]
Definition zip.h:93
uint16_t last_modify_date
Definition zip.h:82
uint32_t crc
Definition zip.h:83
uint32_t external_file_attr
Definition zip.h:91
uint16_t version
Definition zip.h:77
uint16_t last_modify_time
Definition zip.h:81
Definition zip.h:52
uint32_t uncompressed_size
Definition zip.h:56
uint32_t crc
Definition zip.h:54
uint32_t sign
Definition zip.h:53
uint32_t compressed_size
Definition zip.h:55
Definition zip.h:118
uint32_t offset_of_central_dir
Definition zip.h:125
uint16_t num_of_dir_ondisk
Definition zip.h:122
uint16_t num_of_thisdisk
Definition zip.h:120
uint16_t length_of_comment
Definition zip.h:126
uint8_t comment[0]
Definition zip.h:127
uint16_t start_disk_of_dir
Definition zip.h:121
uint16_t num_of_dir
Definition zip.h:123
uint32_t sign
Definition zip.h:119
uint32_t size_of_central_dir
Definition zip.h:124
Definition zip.h:153
uint16_t tag
Definition zip.h:154
uint16_t size
Definition zip.h:155
Definition zip.h:60
uint16_t version_mini_extract
Definition zip.h:62
uint16_t flags
Definition zip.h:63
uint32_t uncompressed_size
Definition zip.h:69
uint32_t compressed_size
Definition zip.h:68
uint8_t filename[0]
Definition zip.h:72
uint16_t file_name_length
Definition zip.h:70
uint32_t sign
Definition zip.h:61
uint16_t compress_method
Definition zip.h:64
uint16_t last_modify_date
Definition zip.h:66
uint16_t last_modify_time
Definition zip.h:65
uint16_t extrafield_length
Definition zip.h:71
uint32_t crc
Definition zip.h:67