Mercurial > code
annotate C++/ZipArchive.h @ 297:836903141476
Socket: provide experimental SSL support
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 15 Nov 2014 12:41:52 +0100 |
parents | 5806c767aec7 |
children | 4cff6aa6f271 |
rev | line source |
---|---|
281
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * ZipArchive.h -- wrapper around libzip |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr> |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef _ZIP_ARCHIVE_H_ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define _ZIP_ARCHIVE_H_ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <memory> |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <string> |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <zip.h> |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 using ZipStat = struct zip_stat; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 using ZipSourceCommand = enum zip_source_cmd; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 using ZipCallback = zip_source_callback; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 using ZipFlags = zip_flags_t; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 using ZipInt8 = zip_int8_t; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 using ZipUint8 = zip_uint8_t; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 using ZipInt16 = zip_int16_t; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 using ZipUint16 = zip_uint16_t; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 using ZipInt32 = zip_int32_t; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 using ZipUint32 = zip_uint32_t; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 using ZipInt64 = zip_int64_t; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 using ZipUint64 = zip_uint64_t; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 * @class ZipSource |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 * @brief Source for adding file |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 class ZipSource { |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 public: |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 * Default constructor. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 ZipSource() = default; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 * Virtual destructor. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 virtual ~ZipSource() = default; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 * Create a zip_source structure. Must not be null, throw an exception |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 * instead. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 * @return a zip_source ready to be used |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 * @post must not return null |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 virtual struct zip_source *source(struct zip *zip) const = 0; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 }; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 * @class ZipFile |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 * @brief File for reading |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 class ZipFile { |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 private: |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 std::unique_ptr<struct zip_file, int (*)(struct zip_file *)> m_handle; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 ZipFile(const ZipFile &) = delete; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 ZipFile &operator=(const ZipFile &) = delete; |
287 | 77 |
281
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 public: |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 * Create a ZipFile with a zip_file structure. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 * @param file the file ready to be used |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 inline ZipFile(struct zip_file *file) |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 : m_handle(file, zip_fclose) |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 { |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 } |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 * Move constructor defaulted. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 * @param other the other ZipFile |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 ZipFile(ZipFile &&other) = default; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 * Move operator defaulted. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 * @param other the other ZipFile |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 * @return *this |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 ZipFile &operator=(ZipFile &&) = default; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 * Read some data. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 * @param data the destination buffer |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 * @param length the length |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 * @return the number of bytes written or -1 on failure |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 inline int read(void *data, ZipUint64 length) noexcept |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 { |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 return zip_fread(m_handle.get(), data, length); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 } |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 * Read some data to a fixed size array. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 * @param data the array |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 * @return the number of bytes written or -1 on failure |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 template <size_t Size> |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 inline int read(char (&data)[Size]) noexcept |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 { |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 return read(data, Size); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 } |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 * Optimized function for reading all characters with only one allocation. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 * Ideal for combining with ZipArchive::stat. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 * @param length the length of the file |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 * @return the whole string |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 * @see ZipArchive::stat |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 std::string read(unsigned length) |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 { |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 std::string result; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 result.resize(length); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 auto count = read(&result[0], length); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 if (count < 0) |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 return ""; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 |
296
5806c767aec7
Zip: fix resize if read less than requested
David Demelier <markand@malikania.fr>
parents:
287
diff
changeset
|
146 result.resize(count); |
5806c767aec7
Zip: fix resize if read less than requested
David Demelier <markand@malikania.fr>
parents:
287
diff
changeset
|
147 |
281
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 return result; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 } |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 }; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 namespace source { |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 * @class Buffer |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 * @brief Create a source from a buffer |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 class Buffer : public ZipSource { |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 private: |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 std::string m_data; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 public: |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 * Buffer constructor. Moves the data. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 * @param data the data |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 Buffer(std::string data); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 * @copydoc ZipSource::source |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 struct zip_source *source(struct zip *archive) const override; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 }; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 * @class File |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 * @brief Create a source from a file on the disk |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 class File : public ZipSource { |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 private: |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 std::string m_path; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 ZipUint64 m_start; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 ZipInt64 m_length; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 public: |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 * File constructor. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 * @param path the path to the file |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 * @param start the beginning in the file |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 * @param length the maximum length |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 File(std::string path, ZipUint64 start = 0, ZipInt64 length = -1); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 * @copydoc ZipSource::source |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 struct zip_source *source(struct zip *archive) const override; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 }; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 } // !source |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 * @class ZipArchive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 * @brief Safe wrapper on the struct zip structure |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 class ZipArchive { |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 private: |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 using Handle = std::unique_ptr<struct zip, int (*)(struct zip *)>; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 Handle m_handle; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 ZipArchive(const ZipArchive &) = delete; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 ZipArchive &operator=(const ZipArchive &) = delete; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 public: |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 * Open an archive on the disk. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 * @param path the path |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 ZipArchive(const std::string &path, ZipFlags flags = 0); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 * Move constructor defaulted. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 * @param other the other ZipArchive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 ZipArchive(ZipArchive &&other) noexcept = default; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 * Move operator defaulted. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 * @param other the other ZipArchive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 * @return *this |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 ZipArchive &operator=(ZipArchive &&other) noexcept = default; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
242 * Set a comment on a file. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 * @param index the file index in the archive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 * @param text the text or empty to remove the comment |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 void setFileComment(ZipUint64 index, const std::string &text = "", ZipFlags flags = 0); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
251 * Get a comment from a file. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 * @param index the file index in the archive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 * @return the comment |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
256 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 std::string getFileComment(ZipUint64 index, ZipFlags flags = 0) const; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
259 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
260 * Set the archive comment. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
262 * @param comment the comment |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 void setComment(const std::string &comment); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
267 * Get the archive comment. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
268 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
269 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
270 * @return the comment |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
271 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
272 std::string getComment(ZipFlags flags = 0) const; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
273 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
274 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
275 * Locate a file on the archive. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
276 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
277 * @param name the name |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
278 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
279 * @return the index |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
280 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
281 ZipInt64 find(const std::string &name, ZipFlags flags = 0); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
282 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
283 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
284 * Get information about a file. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
285 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
286 * @param name the name |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
287 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
288 * @return the structure |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
289 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
290 ZipStat stat(const std::string &name, ZipFlags flags = 0); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
291 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
292 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 * Get information about a file. Overloaded function. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 * @param index the file index in the archive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 * @return the structure |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
299 ZipStat stat(ZipUint64 index, ZipFlags flags = 0); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 * Add a file to the archive. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 * @param source the source |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
305 * @param name the name entry in the archive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
306 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
307 * @return the new index in the archive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
308 * @see source::File |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
309 * @see source::Buffer |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
310 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
311 ZipInt64 add(const ZipSource &source, const std::string &name, ZipFlags flags = 0); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
312 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
313 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
314 * Add a directory to the archive. Not a directory from the disk. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
315 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 * @param directory the directory name |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 * @return the new index in the archive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
319 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
320 ZipInt64 addDirectory(const std::string &directory, ZipFlags flags = 0); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 * Replace an existing file in the archive. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 * @param source the source |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 * @param index the file index in the archiev |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
328 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
329 void replace(const ZipSource &source, ZipUint64 index, ZipFlags flags = 0); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
331 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
332 * Open a file in the archive. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 * @param name the name |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
335 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
336 * @param password the optional password |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 * @return the opened file |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
338 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
339 ZipFile open(const std::string &name, ZipFlags flags = 0, const std::string &password = ""); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
342 * Open a file in the archive. Overloaded function. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
343 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
344 * @param index the file index in the archive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
345 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
346 * @param password the optional password |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
347 * @return the opened file |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
348 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
349 ZipFile open(ZipUint64 index, ZipFlags flags = 0, const std::string &password = ""); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
350 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
351 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
352 * Rename an existing entry in the archive. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
353 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
354 * @param index the file index in the archive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
355 * @param name the new name |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
356 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
357 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
358 void rename(ZipUint64 index, const std::string &name, ZipFlags flags = 0); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
359 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
360 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
361 * Set file compression. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
362 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
363 * @param index the file index in the archive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
364 * @param comp the compression |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
365 * @param flags the optional flags |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
366 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
367 void setFileCompression(ZipUint64 index, ZipInt32 comp, ZipUint32 flags = 0); |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
368 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
369 /** |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
370 * Delete a file from the archive. |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
371 * |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
372 * @param index the file index in the archive |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
373 */ |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
374 void remove(ZipUint64 index); |
285 | 375 |
376 /** | |
377 * Get the number of entries in the archive. | |
378 * | |
379 * @param flags the optional flags | |
380 * @return the number of entries | |
381 */ | |
382 ZipInt64 numEntries(ZipFlags flags = 0) const; | |
383 | |
384 /** | |
385 * Revert changes on the file. | |
386 * | |
387 * @param index the index | |
388 */ | |
389 void unchange(ZipUint64 index); | |
390 | |
391 /** | |
392 * Revert all changes. | |
393 */ | |
394 void unchangeAll(); | |
395 | |
396 /** | |
397 * Revert changes to archive. | |
398 */ | |
399 void unchangeArchive(); | |
400 | |
401 /** | |
402 * Set the defaut password. | |
403 * | |
404 * @param password the password or empty to unset it | |
405 */ | |
406 void setDefaultPassword(const std::string &password = ""); | |
407 | |
408 /** | |
409 * Set an archive flag. | |
410 * | |
411 * @param flag the flag to set | |
412 * @param value the value | |
413 */ | |
414 void setFlag(ZipFlags flag, int value); | |
415 | |
416 /** | |
417 * Get an archive flag. | |
418 * | |
419 * @param which which flag | |
420 * @param flags the optional flags | |
421 * @return the value | |
422 */ | |
286 | 423 int getFlag(ZipFlags which, ZipFlags flags = 0) const; |
285 | 424 |
281
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
425 }; |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
426 |
88f9d8b406c6
Add Zip, safe wrapper around libzip
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
427 #endif // !_ZIP_ARCHIVE_H_ |