diff options
Diffstat (limited to 'vendor/libz-sys/src/lib.rs')
-rw-r--r-- | vendor/libz-sys/src/lib.rs | 431 |
1 files changed, 431 insertions, 0 deletions
diff --git a/vendor/libz-sys/src/lib.rs b/vendor/libz-sys/src/lib.rs new file mode 100644 index 0000000..ae00583 --- /dev/null +++ b/vendor/libz-sys/src/lib.rs @@ -0,0 +1,431 @@ +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] + +use std::os::raw::{c_char, c_int, c_long, c_uchar, c_uint, c_ulong, c_void}; + +// Macro for variances between zlib-ng in native mode and either zlib or zlib-ng in zlib compat +// mode. Note in particular that zlib-ng in compat mode does *not* use the zng case. +#[cfg(not(zng))] +macro_rules! if_zng { + ($_zng:tt, $not_zng:tt) => { + $not_zng + }; +} + +#[cfg(zng)] +macro_rules! if_zng { + ($zng:tt, $_not_zng:tt) => { + $zng + }; +} + +// zlib uses unsigned long for various sizes; zlib-ng uses size_t. +type z_size = if_zng!(usize, c_ulong); + +// zlib stores Adler-32 and CRC-32 checksums in unsigned long; zlib-ng uses uint32_t. +type z_checksum = if_zng!(u32, c_ulong); + +pub type alloc_func = unsafe extern "C" fn(voidpf, uInt, uInt) -> voidpf; +pub type Bytef = u8; +pub type free_func = unsafe extern "C" fn(voidpf, voidpf); +#[cfg(any(zng, feature = "libc"))] +pub type gzFile = *mut gzFile_s; +pub type in_func = unsafe extern "C" fn(*mut c_void, *mut *const c_uchar) -> c_uint; +pub type out_func = unsafe extern "C" fn(*mut c_void, *mut c_uchar, c_uint) -> c_int; +pub type uInt = c_uint; +pub type uLong = c_ulong; +pub type uLongf = c_ulong; +pub type voidp = *mut c_void; +pub type voidpc = *const c_void; +pub type voidpf = *mut c_void; + +#[cfg(any(zng, feature = "libc"))] +pub enum gzFile_s {} +pub enum internal_state {} + +#[cfg(all( + not(zng), + feature = "libc", + not(all(target_family = "wasm", target_os = "unknown")) +))] +pub type z_off_t = libc::off_t; + +#[cfg(all( + not(zng), + feature = "libc", + all(target_family = "wasm", target_os = "unknown") +))] +pub type z_off_t = c_long; + +#[cfg(all(zng, windows, not(target_env = "gnu")))] +pub type z_off_t = i64; + +#[cfg(all(zng, not(all(windows, not(target_env = "gnu")))))] +pub type z_off_t = libc::off_t; + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct gz_header { + pub text: c_int, + pub time: uLong, + pub xflags: c_int, + pub os: c_int, + pub extra: *mut Bytef, + pub extra_len: uInt, + pub extra_max: uInt, + pub name: *mut Bytef, + pub name_max: uInt, + pub comment: *mut Bytef, + pub comm_max: uInt, + pub hcrc: c_int, + pub done: c_int, +} +pub type gz_headerp = *mut gz_header; + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct z_stream { + pub next_in: *mut Bytef, + pub avail_in: uInt, + pub total_in: z_size, + pub next_out: *mut Bytef, + pub avail_out: uInt, + pub total_out: z_size, + pub msg: *mut c_char, + pub state: *mut internal_state, + pub zalloc: alloc_func, + pub zfree: free_func, + pub opaque: voidpf, + pub data_type: c_int, + pub adler: z_checksum, + pub reserved: uLong, +} +pub type z_streamp = *mut z_stream; + +// Ideally, this should instead use a macro that parses the whole block of externs, and generates +// the appropriate link_name attributes, without duplicating the function names. However, ctest2 +// can't parse that. +#[cfg(not(zng))] +macro_rules! zng_prefix { + ($name:expr) => { + stringify!($name) + }; +} + +#[cfg(zng)] +macro_rules! zng_prefix { + ($name:expr) => { + concat!("zng_", stringify!($name)) + }; +} + +extern "C" { + #[link_name = zng_prefix!(adler32)] + pub fn adler32(adler: z_checksum, buf: *const Bytef, len: uInt) -> z_checksum; + #[link_name = zng_prefix!(crc32)] + pub fn crc32(crc: z_checksum, buf: *const Bytef, len: uInt) -> z_checksum; + #[link_name = zng_prefix!(deflate)] + pub fn deflate(strm: z_streamp, flush: c_int) -> c_int; + #[link_name = zng_prefix!(deflateBound)] + pub fn deflateBound(strm: z_streamp, sourceLen: uLong) -> uLong; + #[link_name = zng_prefix!(deflateCopy)] + pub fn deflateCopy(dest: z_streamp, source: z_streamp) -> c_int; + #[link_name = zng_prefix!(deflateEnd)] + pub fn deflateEnd(strm: z_streamp) -> c_int; + #[link_name = zng_prefix!(deflateParams)] + pub fn deflateParams(strm: z_streamp, level: c_int, strategy: c_int) -> c_int; + #[link_name = zng_prefix!(deflatePrime)] + pub fn deflatePrime(strm: z_streamp, bits: c_int, value: c_int) -> c_int; + #[link_name = zng_prefix!(deflateReset)] + pub fn deflateReset(strm: z_streamp) -> c_int; + #[link_name = zng_prefix!(deflateSetDictionary)] + pub fn deflateSetDictionary( + strm: z_streamp, + dictionary: *const Bytef, + dictLength: uInt, + ) -> c_int; + #[link_name = zng_prefix!(deflateSetHeader)] + pub fn deflateSetHeader(strm: z_streamp, head: gz_headerp) -> c_int; + #[link_name = zng_prefix!(deflateTune)] + pub fn deflateTune( + strm: z_streamp, + good_length: c_int, + max_lazy: c_int, + nice_length: c_int, + max_chain: c_int, + ) -> c_int; + #[link_name = zng_prefix!(inflate)] + pub fn inflate(strm: z_streamp, flush: c_int) -> c_int; + #[link_name = zng_prefix!(inflateBack)] + pub fn inflateBack( + strm: z_streamp, + _in: in_func, + in_desc: *mut c_void, + out: out_func, + out_desc: *mut c_void, + ) -> c_int; + #[link_name = zng_prefix!(inflateBackEnd)] + pub fn inflateBackEnd(strm: z_streamp) -> c_int; + #[link_name = zng_prefix!(inflateCopy)] + pub fn inflateCopy(dest: z_streamp, source: z_streamp) -> c_int; + #[link_name = zng_prefix!(inflateEnd)] + pub fn inflateEnd(strm: z_streamp) -> c_int; + #[link_name = zng_prefix!(inflateGetHeader)] + pub fn inflateGetHeader(strm: z_streamp, head: gz_headerp) -> c_int; + #[link_name = zng_prefix!(inflateMark)] + pub fn inflateMark(strm: z_streamp) -> c_long; + #[link_name = zng_prefix!(inflatePrime)] + pub fn inflatePrime(strm: z_streamp, bits: c_int, value: c_int) -> c_int; + #[link_name = zng_prefix!(inflateReset)] + pub fn inflateReset(strm: z_streamp) -> c_int; + #[link_name = zng_prefix!(inflateReset2)] + pub fn inflateReset2(strm: z_streamp, windowBits: c_int) -> c_int; + #[link_name = zng_prefix!(inflateSetDictionary)] + pub fn inflateSetDictionary( + strm: z_streamp, + dictionary: *const Bytef, + dictLength: uInt, + ) -> c_int; + #[link_name = zng_prefix!(inflateSync)] + pub fn inflateSync(strm: z_streamp) -> c_int; + #[link_name = zng_prefix!(zlibCompileFlags)] + pub fn zlibCompileFlags() -> uLong; + + // The above set of functions currently target 1.2.3.4 (what's present on Ubuntu + // 12.04, but there's some other APIs that were added later. Should figure out + // how to expose them... + // + // Added in 1.2.5.1 + // + // pub fn deflatePending(strm: z_streamp, + // pending: *mut c_uint, + // bits: *mut c_int) -> c_int; + // + // Addedin 1.2.7.1 + // pub fn inflateGetDictionary(strm: z_streamp, + // dictionary: *mut Bytef, + // dictLength: *mut uInt) -> c_int; + // + // Added in 1.2.3.5 + // pub fn gzbuffer(file: gzFile, size: c_uint) -> c_int; + // pub fn gzclose_r(file: gzFile) -> c_int; + // pub fn gzclose_w(file: gzFile) -> c_int; + // pub fn gzoffset(file: gzFile) -> z_off_t; +} + +extern "C" { + #[link_name = if_zng!("zlibng_version", "zlibVersion")] + pub fn zlibVersion() -> *const c_char; +} + +#[cfg(not(zng))] +extern "C" { + pub fn deflateInit_( + strm: z_streamp, + level: c_int, + version: *const c_char, + stream_size: c_int, + ) -> c_int; + pub fn deflateInit2_( + strm: z_streamp, + level: c_int, + method: c_int, + windowBits: c_int, + memLevel: c_int, + strategy: c_int, + version: *const c_char, + stream_size: c_int, + ) -> c_int; + pub fn inflateBackInit_( + strm: z_streamp, + windowBits: c_int, + window: *mut c_uchar, + version: *const c_char, + stream_size: c_int, + ) -> c_int; + pub fn inflateInit_(strm: z_streamp, version: *const c_char, stream_size: c_int) -> c_int; + pub fn inflateInit2_( + strm: z_streamp, + windowBits: c_int, + version: *const c_char, + stream_size: c_int, + ) -> c_int; +} + +#[cfg(zng)] +extern "C" { + pub fn zng_deflateInit(strm: z_streamp, level: c_int) -> c_int; + pub fn zng_deflateInit2( + strm: z_streamp, + level: c_int, + method: c_int, + windowBits: c_int, + memLevel: c_int, + strategy: c_int, + ) -> c_int; + pub fn zng_inflateBackInit(strm: z_streamp, windowBits: c_int, window: *mut c_uchar) -> c_int; + pub fn zng_inflateInit(strm: z_streamp) -> c_int; + pub fn zng_inflateInit2(strm: z_streamp, windowBits: c_int) -> c_int; +} + +// These methods are required to keep BC with original zlib API since zlib-ng 2.1 that changed API +#[cfg(zng)] +#[inline(always)] +pub unsafe fn inflateInit2_( + strm: z_streamp, + windowBits: c_int, + _version: *const c_char, + _stream_size: c_int, +) -> c_int { + zng_inflateInit2(strm, windowBits) +} + +#[cfg(zng)] +#[inline(always)] +pub unsafe fn inflateInit_(strm: z_streamp, _version: *const c_char, _stream_size: c_int) -> c_int { + zng_inflateInit(strm) +} + +#[cfg(zng)] +#[inline(always)] +pub unsafe fn inflateBackInit_( + strm: z_streamp, + windowBits: c_int, + window: *mut c_uchar, + _version: *const c_char, + _stream_size: c_int, +) -> c_int { + zng_inflateBackInit(strm, windowBits, window) +} + +#[cfg(zng)] +#[inline(always)] +pub unsafe fn deflateInit2_( + strm: z_streamp, + level: c_int, + method: c_int, + windowBits: c_int, + memLevel: c_int, + strategy: c_int, + _version: *const c_char, + _stream_size: c_int, +) -> c_int { + zng_deflateInit2(strm, level, method, windowBits, memLevel, strategy) +} + +#[cfg(zng)] +#[inline] +pub unsafe fn deflateInit_( + strm: z_streamp, + level: c_int, + _version: *const c_char, + _stream_size: c_int, +) -> c_int { + zng_deflateInit(strm, level) +} + +#[cfg(any(zng, feature = "libc"))] +extern "C" { + #[link_name = zng_prefix!(adler32_combine)] + pub fn adler32_combine(adler1: z_checksum, adler2: z_checksum, len2: z_off_t) -> z_checksum; + #[link_name = zng_prefix!(compress)] + pub fn compress( + dest: *mut Bytef, + destLen: *mut z_size, + source: *const Bytef, + sourceLen: z_size, + ) -> c_int; + #[link_name = zng_prefix!(compress2)] + pub fn compress2( + dest: *mut Bytef, + destLen: *mut z_size, + source: *const Bytef, + sourceLen: z_size, + level: c_int, + ) -> c_int; + #[link_name = zng_prefix!(compressBound)] + pub fn compressBound(sourceLen: z_size) -> z_size; + #[link_name = zng_prefix!(crc32_combine)] + pub fn crc32_combine(crc1: z_checksum, crc2: z_checksum, len2: z_off_t) -> z_checksum; + #[link_name = zng_prefix!(gzdirect)] + pub fn gzdirect(file: gzFile) -> c_int; + #[link_name = zng_prefix!(gzdopen)] + pub fn gzdopen(fd: c_int, mode: *const c_char) -> gzFile; + #[link_name = zng_prefix!(gzclearerr)] + pub fn gzclearerr(file: gzFile); + #[link_name = zng_prefix!(gzclose)] + pub fn gzclose(file: gzFile) -> c_int; + #[link_name = zng_prefix!(gzeof)] + pub fn gzeof(file: gzFile) -> c_int; + #[link_name = zng_prefix!(gzerror)] + pub fn gzerror(file: gzFile, errnum: *mut c_int) -> *const c_char; + #[link_name = zng_prefix!(gzflush)] + pub fn gzflush(file: gzFile, flush: c_int) -> c_int; + #[link_name = zng_prefix!(gzgetc)] + pub fn gzgetc(file: gzFile) -> c_int; + #[link_name = zng_prefix!(gzgets)] + pub fn gzgets(file: gzFile, buf: *mut c_char, len: c_int) -> *mut c_char; + #[link_name = zng_prefix!(gzopen)] + pub fn gzopen(path: *const c_char, mode: *const c_char) -> gzFile; + #[link_name = zng_prefix!(gzputc)] + pub fn gzputc(file: gzFile, c: c_int) -> c_int; + #[link_name = zng_prefix!(gzputs)] + pub fn gzputs(file: gzFile, s: *const c_char) -> c_int; + #[link_name = zng_prefix!(gzread)] + pub fn gzread(file: gzFile, buf: voidp, len: c_uint) -> c_int; + #[link_name = zng_prefix!(gzrewind)] + pub fn gzrewind(file: gzFile) -> c_int; + #[link_name = zng_prefix!(gzseek)] + pub fn gzseek(file: gzFile, offset: z_off_t, whence: c_int) -> z_off_t; + #[link_name = zng_prefix!(gzsetparams)] + pub fn gzsetparams(file: gzFile, level: c_int, strategy: c_int) -> c_int; + #[link_name = zng_prefix!(gztell)] + pub fn gztell(file: gzFile) -> z_off_t; + #[link_name = zng_prefix!(gzungetc)] + pub fn gzungetc(c: c_int, file: gzFile) -> c_int; + #[link_name = zng_prefix!(gzwrite)] + pub fn gzwrite(file: gzFile, buf: voidpc, len: c_uint) -> c_int; + #[link_name = zng_prefix!(uncompress)] + pub fn uncompress( + dest: *mut Bytef, + destLen: *mut z_size, + source: *const Bytef, + sourceLen: z_size, + ) -> c_int; +} + +pub const Z_NO_FLUSH: c_int = 0; +pub const Z_PARTIAL_FLUSH: c_int = 1; +pub const Z_SYNC_FLUSH: c_int = 2; +pub const Z_FULL_FLUSH: c_int = 3; +pub const Z_FINISH: c_int = 4; +pub const Z_BLOCK: c_int = 5; +pub const Z_TREES: c_int = 6; + +pub const Z_OK: c_int = 0; +pub const Z_STREAM_END: c_int = 1; +pub const Z_NEED_DICT: c_int = 2; +pub const Z_ERRNO: c_int = -1; +pub const Z_STREAM_ERROR: c_int = -2; +pub const Z_DATA_ERROR: c_int = -3; +pub const Z_MEM_ERROR: c_int = -4; +pub const Z_BUF_ERROR: c_int = -5; +pub const Z_VERSION_ERROR: c_int = -6; + +pub const Z_NO_COMPRESSION: c_int = 0; +pub const Z_BEST_SPEED: c_int = 1; +pub const Z_BEST_COMPRESSION: c_int = 9; +pub const Z_DEFAULT_COMPRESSION: c_int = -1; + +pub const Z_FILTERED: c_int = 1; +pub const Z_HUFFMAN_ONLY: c_int = 2; +pub const Z_RLE: c_int = 3; +pub const Z_FIXED: c_int = 4; +pub const Z_DEFAULT_STRATEGY: c_int = 0; + +pub const Z_BINARY: c_int = 0; +pub const Z_TEXT: c_int = 1; +pub const Z_ASCII: c_int = Z_TEXT; +pub const Z_UNKNOWN: c_int = 2; + +pub const Z_DEFLATED: c_int = 8; |