#zlib #interface #memory-safe #api #world #inflates

no-std libz-rs-sys

使用Rust编写的内存安全的zlib实现

5个不稳定版本

0.2.1 2024年7月8日
0.2.0 2024年6月12日
0.1.1 2024年4月22日
0.1.0 2024年4月16日
0.0.1 2024年2月23日

#133 in 压缩

Download history 58/week @ 2024-04-27 18/week @ 2024-05-04 12/week @ 2024-05-11 28/week @ 2024-05-18 13/week @ 2024-05-25 16/week @ 2024-06-01 149/week @ 2024-06-08 39/week @ 2024-06-15 20/week @ 2024-06-22 36/week @ 2024-06-29 168/week @ 2024-07-06 35/week @ 2024-07-13 41/week @ 2024-07-20 208/week @ 2024-07-27 179/week @ 2024-08-03 187/week @ 2024-08-10

每月下载量 620次
用于 flate2

Zlib 许可证

610KB
13K SLoC

此crate是zlib-rs的C API。API广泛等同于zlib-syszlib-ng-sys,但当前不提供gz*系列函数。

从Rust的角度来看,此API不太方便。请使用flate2 crate以获得更方便的zlib Rust接口。

示例

此示例压缩(“解压缩”)字符串"Hello, World!"然后再次解压缩(“膨胀”)。

let mut strm = libz_rs_sys::z_stream::default();

let version = libz_rs_sys::zlibVersion();
let stream_size = core::mem::size_of_val(&strm) as i32;

let level = 6; // the default compression level
let err = unsafe { libz_rs_sys::deflateInit_(&mut strm, level, version, stream_size) };
assert_eq!(err, libz_rs_sys::Z_OK);

let input = "Hello, World!";
strm.avail_in = input.len() as _;
strm.next_in = input.as_ptr();

let mut output = [0u8; 32];
strm.avail_out = output.len() as _;
strm.next_out = output.as_mut_ptr();

let err = unsafe { libz_rs_sys::deflate(&mut strm, libz_rs_sys::Z_FINISH) };
assert_eq!(err, libz_rs_sys::Z_STREAM_END);

let err = unsafe { libz_rs_sys::deflateEnd(&mut strm) };
assert_eq!(err, libz_rs_sys::Z_OK);

let deflated = &mut output[..strm.total_out as usize];

let mut strm = libz_rs_sys::z_stream::default();
let err = unsafe { libz_rs_sys::inflateInit_(&mut strm, version, stream_size) };
assert_eq!(err, libz_rs_sys::Z_OK);

strm.avail_in = deflated.len() as _;
strm.next_in = deflated.as_ptr();

let mut output = [0u8; 32];
strm.avail_out = output.len() as _;
strm.next_out = output.as_mut_ptr();

let err = unsafe { libz_rs_sys::inflate(&mut strm, libz_rs_sys::Z_FINISH) };
assert_eq!(err, libz_rs_sys::Z_STREAM_END);

let err = unsafe { libz_rs_sys::inflateEnd(&mut strm) };
assert_eq!(err, libz_rs_sys::Z_OK);

let inflated = &output[..strm.total_out as usize];

assert_eq!(inflated, input.as_bytes())

依赖项