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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
c6a6bf42232b Zip: cosmetic
David Demelier <markand@malikania.fr>
parents: 286
diff changeset
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
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
375
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
376 /**
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
377 * Get the number of entries in the archive.
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
378 *
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
379 * @param flags the optional flags
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
380 * @return the number of entries
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
381 */
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
382 ZipInt64 numEntries(ZipFlags flags = 0) const;
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
383
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
384 /**
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
385 * Revert changes on the file.
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
386 *
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
387 * @param index the index
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
388 */
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
389 void unchange(ZipUint64 index);
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
390
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
391 /**
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
392 * Revert all changes.
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
393 */
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
394 void unchangeAll();
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
395
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
396 /**
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
397 * Revert changes to archive.
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
398 */
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
399 void unchangeArchive();
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
400
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
401 /**
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
402 * Set the defaut password.
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
403 *
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
404 * @param password the password or empty to unset it
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
405 */
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
406 void setDefaultPassword(const std::string &password = "");
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
407
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
408 /**
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
409 * Set an archive flag.
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
410 *
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
411 * @param flag the flag to set
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
412 * @param value the value
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
413 */
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
414 void setFlag(ZipFlags flag, int value);
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
415
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
416 /**
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
417 * Get an archive flag.
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
418 *
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
419 * @param which which flag
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
420 * @param flags the optional flags
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
421 * @return the value
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
422 */
286
2ff6559c5f1d Zip: add more tests
David Demelier <markand@malikania.fr>
parents: 285
diff changeset
423 int getFlag(ZipFlags which, ZipFlags flags = 0) const;
285
David Demelier <markand@malikania.fr>
parents: 281
diff changeset
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_