1use libc::{c_char, c_uchar, c_void, size_t};
2use std::u64;
3
4#[cfg(target_env = "msvc")]
5#[doc(hidden)]
6pub type __enum_ty = libc::c_int;
7#[cfg(not(target_env = "msvc"))]
8#[doc(hidden)]
9pub type __enum_ty = libc::c_uint;
10pub type lzma_bool = c_uchar;
11pub type lzma_ret = __enum_ty;
12pub type lzma_action = __enum_ty;
13type lzma_reserved_enum = __enum_ty;
14pub type lzma_check = __enum_ty;
15pub type lzma_vli = u64;
16pub type lzma_mode = __enum_ty;
17pub type lzma_match_finder = __enum_ty;
18
19pub const LZMA_OK: lzma_ret = 0;
20pub const LZMA_STREAM_END: lzma_ret = 1;
21pub const LZMA_NO_CHECK: lzma_ret = 2;
22pub const LZMA_UNSUPPORTED_CHECK: lzma_ret = 3;
23pub const LZMA_GET_CHECK: lzma_ret = 4;
24pub const LZMA_MEM_ERROR: lzma_ret = 5;
25pub const LZMA_MEMLIMIT_ERROR: lzma_ret = 6;
26pub const LZMA_FORMAT_ERROR: lzma_ret = 7;
27pub const LZMA_OPTIONS_ERROR: lzma_ret = 8;
28pub const LZMA_DATA_ERROR: lzma_ret = 9;
29pub const LZMA_BUF_ERROR: lzma_ret = 10;
30pub const LZMA_PROG_ERROR: lzma_ret = 11;
31pub const LZMA_SEEK_NEEDED: lzma_ret = 12;
32
33pub const LZMA_RUN: lzma_action = 0;
34pub const LZMA_SYNC_FLUSH: lzma_action = 1;
35pub const LZMA_FULL_FLUSH: lzma_action = 2;
36pub const LZMA_FULL_BARRIER: lzma_action = 4;
37pub const LZMA_FINISH: lzma_action = 3;
38
39pub const LZMA_CHECK_NONE: lzma_check = 0;
40pub const LZMA_CHECK_CRC32: lzma_check = 1;
41pub const LZMA_CHECK_CRC64: lzma_check = 4;
42pub const LZMA_CHECK_SHA256: lzma_check = 10;
43
44pub const LZMA_MODE_FAST: lzma_mode = 1;
45pub const LZMA_MODE_NORMAL: lzma_mode = 2;
46
47pub const LZMA_MF_HC3: lzma_match_finder = 0x03;
48pub const LZMA_MF_HC4: lzma_match_finder = 0x04;
49pub const LZMA_MF_BT2: lzma_match_finder = 0x12;
50pub const LZMA_MF_BT3: lzma_match_finder = 0x13;
51pub const LZMA_MF_BT4: lzma_match_finder = 0x14;
52
53pub const LZMA_TELL_NO_CHECK: u32 = 0x01;
54pub const LZMA_TELL_UNSUPPORTED_CHECK: u32 = 0x02;
55pub const LZMA_TELL_ANY_CHECK: u32 = 0x04;
56pub const LZMA_IGNORE_CHECK: u32 = 0x10;
57pub const LZMA_CONCATENATED: u32 = 0x08;
58
59pub const LZMA_PRESET_DEFAULT: u32 = 6;
60pub const LZMA_PRESET_LEVEL_MASK: u32 = 0x1f;
61pub const LZMA_PRESET_EXTREME: u32 = 1 << 31;
62
63pub const LZMA_DICT_SIZE_MIN: u32 = 4096;
64pub const LZMA_DICT_SIZE_DEFAULT: u32 = 1 << 23;
65
66pub const LZMA_LCLP_MIN: u32 = 0;
67pub const LZMA_LCLP_MAX: u32 = 4;
68pub const LZMA_LC_DEFAULT: u32 = 3;
69
70pub const LZMA_LP_DEFAULT: u32 = 0;
71
72pub const LZMA_PB_MIN: u32 = 0;
73pub const LZMA_PB_MAX: u32 = 4;
74pub const LZMA_PB_DEFAULT: u32 = 2;
75
76pub const LZMA_BACKWARD_SIZE_MIN: lzma_vli = 4;
77pub const LZMA_BACKWARD_SIZE_MAX: lzma_vli = 1 << 34;
78
79pub const LZMA_VLI_MAX: lzma_vli = u64::MAX / 2;
80pub const LZMA_VLI_UNKNOWN: lzma_vli = u64::MAX;
81pub const LZMA_VLI_BYTES_MAX: usize = 9;
82
83pub const LZMA_FILTER_X86: lzma_vli = 0x04;
84pub const LZMA_FILTER_POWERPC: lzma_vli = 0x05;
85pub const LZMA_FILTER_IA64: lzma_vli = 0x06;
86pub const LZMA_FILTER_ARM: lzma_vli = 0x07;
87pub const LZMA_FILTER_ARMTHUMB: lzma_vli = 0x08;
88pub const LZMA_FILTER_SPARC: lzma_vli = 0x09;
89pub const LZMA_FILTER_ARM64: lzma_vli = 0x0A;
90pub const LZMA_FILTER_DELTA: lzma_vli = 0x03;
91pub const LZMA_FILTER_RISCV: lzma_vli = 0x0B;
92pub const LZMA_FILTER_LZMA1: lzma_vli = 0x4000000000000001;
93pub const LZMA_FILTER_LZMA2: lzma_vli = 0x21;
94
95#[repr(C)]
96pub struct lzma_allocator {
97 pub alloc: Option<extern "C" fn(*mut c_void, size_t, size_t) -> *mut c_void>,
98 pub free: Option<extern "C" fn(*mut c_void, *mut c_void)>,
99 pub opaque: *mut c_void,
100}
101
102pub enum lzma_internal {}
103
104#[repr(C)]
105pub struct lzma_stream {
106 pub next_in: *const u8,
107 pub avail_in: size_t,
108 pub total_in: u64,
109 pub next_out: *mut u8,
110 pub avail_out: size_t,
111 pub total_out: u64,
112 pub allocator: *const lzma_allocator,
113
114 internal: *mut lzma_internal,
115 reserved_ptr1: *mut c_void,
116 reserved_ptr2: *mut c_void,
117 reserved_ptr3: *mut c_void,
118 reserved_ptr4: *mut c_void,
119 reserved_int1: u64,
120 reserved_int2: u64,
121 reserved_int3: size_t,
122 reserved_int4: size_t,
123 reserved_enum1: lzma_reserved_enum,
124 reserved_enum2: lzma_reserved_enum,
125}
126
127#[repr(C)]
128pub struct lzma_filter {
129 pub id: lzma_vli,
130 pub options: *mut c_void,
131}
132
133#[cfg(feature = "parallel")]
134#[repr(C)]
135pub struct lzma_mt {
136 pub flags: u32,
137 pub threads: u32,
138 pub block_size: u64,
139 pub timeout: u32,
140 pub preset: u32,
141 pub filters: *const lzma_filter,
142 pub check: lzma_check,
143
144 reserved_enum1: lzma_reserved_enum,
145 reserved_enum2: lzma_reserved_enum,
146 reserved_enum3: lzma_reserved_enum,
147 reserved_int1: u32,
148 reserved_int2: u32,
149 reserved_int3: u32,
150 reserved_int4: u32,
151 pub memlimit_threading: u64,
152 pub memlimit_stop: u64,
153 reserved_int7: u64,
154 reserved_int8: u64,
155 reserved_ptr1: *mut c_void,
156 reserved_ptr2: *mut c_void,
157 reserved_ptr3: *mut c_void,
158 reserved_ptr4: *mut c_void,
159}
160
161#[repr(C)]
162#[derive(Copy, Clone)]
163pub struct lzma_options_lzma {
164 pub dict_size: u32,
165 pub preset_dict: *const u8,
166 pub preset_dict_size: u32,
167 pub lc: u32,
168 pub lp: u32,
169 pub pb: u32,
170 pub mode: lzma_mode,
171 pub nice_len: u32,
172 pub mf: lzma_match_finder,
173 pub depth: u32,
174
175 reserved_int1: u32,
176 reserved_int2: u32,
177 reserved_int3: u32,
178 reserved_int4: u32,
179 reserved_int5: u32,
180 reserved_int6: u32,
181 reserved_int7: u32,
182 reserved_int8: u32,
183 reserved_enum1: lzma_reserved_enum,
184 reserved_enum2: lzma_reserved_enum,
185 reserved_enum3: lzma_reserved_enum,
186 reserved_enum4: lzma_reserved_enum,
187 reserved_ptr1: *mut c_void,
188 reserved_ptr2: *mut c_void,
189}
190
191#[repr(C)]
192pub struct lzma_stream_flags {
193 pub version: u32,
194 pub backward_size: lzma_vli,
195 pub check: lzma_check,
196
197 reserved_enum1: lzma_reserved_enum,
198 reserved_enum2: lzma_reserved_enum,
199 reserved_enum3: lzma_reserved_enum,
200 reserved_enum4: lzma_reserved_enum,
201 reserved_bool1: lzma_bool,
202 reserved_bool2: lzma_bool,
203 reserved_bool3: lzma_bool,
204 reserved_bool4: lzma_bool,
205 reserved_bool5: lzma_bool,
206 reserved_bool6: lzma_bool,
207 reserved_bool7: lzma_bool,
208 reserved_bool8: lzma_bool,
209 reserved_int1: u32,
210 reserved_int2: u32,
211}
212
213#[repr(C)]
214pub struct lzma_options_bcj {
215 pub start_offset: u32,
216}
217
218extern "C" {
219 pub fn lzma_code(strm: *mut lzma_stream, action: lzma_action) -> lzma_ret;
220 pub fn lzma_end(strm: *mut lzma_stream);
221 pub fn lzma_get_progress(strm: *mut lzma_stream, progress_in: *mut u64, progress_out: *mut u64);
222 pub fn lzma_memusage(strm: *const lzma_stream) -> u64;
223 pub fn lzma_memlimit_get(strm: *const lzma_stream) -> u64;
224 pub fn lzma_memlimit_set(strm: *mut lzma_stream, memlimit: u64) -> lzma_ret;
225
226 pub fn lzma_easy_encoder_memusage(preset: u32) -> u64;
227 pub fn lzma_easy_decoder_memusage(preset: u32) -> u64;
228 pub fn lzma_easy_encoder(strm: *mut lzma_stream, preset: u32, check: lzma_check) -> lzma_ret;
229 pub fn lzma_easy_buffer_encode(
230 preset: u32,
231 check: lzma_check,
232 allocator: *const lzma_allocator,
233 input: *const u8,
234 in_size: size_t,
235 out: *mut u8,
236 out_pos: *mut size_t,
237 out_size: size_t,
238 ) -> lzma_ret;
239
240 pub fn lzma_stream_encoder(
241 strm: *mut lzma_stream,
242 filters: *const lzma_filter,
243 check: lzma_check,
244 ) -> lzma_ret;
245 #[cfg(feature = "parallel")]
246 pub fn lzma_stream_encoder_mt_memusage(options: *const lzma_mt) -> u64;
247 #[cfg(feature = "parallel")]
248 pub fn lzma_stream_encoder_mt(strm: *mut lzma_stream, options: *const lzma_mt) -> lzma_ret;
249 #[cfg(feature = "parallel")]
250 pub fn lzma_stream_decoder_mt(strm: *mut lzma_stream, options: *const lzma_mt) -> lzma_ret;
251 #[cfg(feature = "parallel")]
252 pub fn lzma_mt_block_size(filters: *const crate::lzma_filter) -> u64;
253
254 pub fn lzma_alone_encoder(
255 strm: *mut lzma_stream,
256 options: *const lzma_options_lzma,
257 ) -> lzma_ret;
258
259 pub fn lzma_stream_buffer_bound(uncompressed_size: size_t) -> size_t;
260 pub fn lzma_stream_buffer_encode(
261 filters: *mut lzma_filter,
262 check: lzma_check,
263 allocator: *const lzma_allocator,
264 input: *const u8,
265 in_size: size_t,
266 out: *mut u8,
267 out_pos: *mut size_t,
268 out_size: size_t,
269 ) -> lzma_ret;
270
271 pub fn lzma_stream_decoder(strm: *mut lzma_stream, memlimit: u64, flags: u32) -> lzma_ret;
272 pub fn lzma_auto_decoder(strm: *mut lzma_stream, memlimit: u64, flags: u32) -> lzma_ret;
273 pub fn lzma_alone_decoder(strm: *mut lzma_stream, memlimit: u64) -> lzma_ret;
274 pub fn lzma_lzip_decoder(strm: *mut lzma_stream, memlimit: u64, flags: u32) -> lzma_ret;
275 pub fn lzma_stream_buffer_decode(
276 memlimit: *mut u64,
277 flags: u32,
278 allocator: *const lzma_allocator,
279 input: *const u8,
280 in_pos: *mut size_t,
281 in_size: size_t,
282 out: *mut u8,
283 out_pos: *mut size_t,
284 out_size: size_t,
285 ) -> lzma_ret;
286
287 pub fn lzma_check_is_supported(check: lzma_check) -> lzma_bool;
288 pub fn lzma_check_size(check: lzma_check) -> u32;
289
290 pub fn lzma_crc32(buf: *const u8, size: size_t, crc: u32) -> u32;
291 pub fn lzma_crc64(buf: *const u8, size: size_t, crc: u64) -> u64;
292 pub fn lzma_get_check(strm: *const lzma_stream) -> lzma_check;
293
294 pub fn lzma_filter_encoder_is_supported(id: lzma_vli) -> lzma_bool;
295 pub fn lzma_filter_decoder_is_supported(id: lzma_vli) -> lzma_bool;
296 pub fn lzma_filters_copy(
297 src: *const lzma_filter,
298 dest: *mut lzma_filter,
299 allocator: *const lzma_allocator,
300 ) -> lzma_ret;
301 pub fn lzma_raw_encoder_memusage(filters: *const lzma_filter) -> u64;
302 pub fn lzma_raw_decoder_memusage(filters: *const lzma_filter) -> u64;
303 pub fn lzma_raw_encoder(strm: *mut lzma_stream, filters: *const lzma_filter) -> lzma_ret;
304 pub fn lzma_raw_decoder(strm: *mut lzma_stream, filters: *const lzma_filter) -> lzma_ret;
305 pub fn lzma_filters_update(strm: *mut lzma_stream, filters: *const lzma_filter) -> lzma_ret;
306 pub fn lzma_raw_buffer_encode(
307 filters: *const lzma_filter,
308 allocator: *const lzma_allocator,
309 input: *const u8,
310 in_size: size_t,
311 out: *mut u8,
312 out_pos: *mut size_t,
313 out_size: size_t,
314 ) -> lzma_ret;
315 pub fn lzma_raw_buffer_decode(
316 filters: *const lzma_filter,
317 allocator: *const lzma_allocator,
318 input: *const u8,
319 in_pos: *mut size_t,
320 in_size: size_t,
321 out: *mut u8,
322 out_pos: *mut size_t,
323 out_size: size_t,
324 ) -> lzma_ret;
325 pub fn lzma_properties_size(size: *mut u32, filter: *const lzma_filter) -> lzma_ret;
326 pub fn lzma_properties_encode(filter: *const lzma_filter, props: *mut u8) -> lzma_ret;
327 pub fn lzma_properties_decode(
328 filter: *mut lzma_filter,
329 allocator: *const lzma_allocator,
330 props: *const u8,
331 props_size: size_t,
332 ) -> lzma_ret;
333 pub fn lzma_physmem() -> u64;
334 pub fn lzma_cputhreads() -> u32;
335
336 pub fn lzma_stream_header_encode(options: *const lzma_stream_flags, out: *mut u8) -> lzma_ret;
337 pub fn lzma_stream_footer_encode(options: *const lzma_stream_flags, out: *mut u8) -> lzma_ret;
338 pub fn lzma_stream_header_decode(options: *mut lzma_stream_flags, input: *const u8)
339 -> lzma_ret;
340 pub fn lzma_stream_footer_decode(options: *mut lzma_stream_flags, input: *const u8)
341 -> lzma_ret;
342 pub fn lzma_stream_flags_compare(
343 a: *const lzma_stream_flags,
344 b: *const lzma_stream_flags,
345 ) -> lzma_ret;
346
347 pub fn lzma_version_number() -> u32;
348 pub fn lzma_version_string() -> *const c_char;
349
350 pub fn lzma_vli_encode(
351 vli: lzma_vli,
352 vli_pos: *mut size_t,
353 out: *mut u8,
354 out_pos: *mut size_t,
355 out_size: size_t,
356 ) -> lzma_ret;
357 pub fn lzma_vli_decode(
358 vli: *mut lzma_vli,
359 vli_pos: *mut size_t,
360 input: *const u8,
361 in_pos: *mut size_t,
362 in_size: size_t,
363 ) -> lzma_ret;
364 pub fn lzma_vli_size(vli: lzma_vli) -> u32;
365
366 pub fn lzma_lzma_preset(options: *mut lzma_options_lzma, preset: u32) -> lzma_bool;
367 pub fn lzma_mf_is_supported(mf: lzma_match_finder) -> lzma_bool;
368}