From c06572236c8ea10288cf55f4c07e5e081d628fad Mon Sep 17 00:00:00 2001 From: Amos Wenger Date: Fri, 26 Jan 2024 16:37:25 +0100 Subject: [PATCH] Switch to flate2 (with oxide backend) --- Cargo.lock | 109 +++--------------- Justfile | 2 +- crates/rc-zip/Cargo.toml | 9 +- crates/rc-zip/src/reader/sync/decoder.rs | 18 +-- crates/rc-zip/src/reader/sync/entry_reader.rs | 9 +- 5 files changed, 39 insertions(+), 108 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cc74cdc..a2862a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,22 +3,10 @@ version = 3 [[package]] -name = "adler32" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" - -[[package]] -name = "ahash" -version = "0.8.7" +name = "adler" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "android-tzdata" @@ -212,15 +200,6 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - [[package]] name = "crc32fast" version = "1.3.2" @@ -230,12 +209,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "dary_heap" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7762d17f1241643615821a8455a0b2c3e803784b058693d990b11f2dce25a0ca" - [[package]] name = "encode_unicode" version = "0.3.6" @@ -252,12 +225,13 @@ dependencies = [ ] [[package]] -name = "hashbrown" -version = "0.13.2" +name = "flate2" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ - "ahash", + "crc32fast", + "miniz_oxide", ] [[package]] @@ -359,30 +333,6 @@ version = "0.2.152" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" -[[package]] -name = "libflate" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7d5654ae1795afc7ff76f4365c2c8791b0feb18e8996a96adad8ffd7c3b2bf" -dependencies = [ - "adler32", - "core2", - "crc32fast", - "dary_heap", - "libflate_lz77", -] - -[[package]] -name = "libflate_lz77" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be5f52fb8c451576ec6b79d3f4deb327398bc05bbdbd99021a6e77a4c855d524" -dependencies = [ - "core2", - "hashbrown", - "rle-decode-fast", -] - [[package]] name = "libm" version = "0.2.8" @@ -407,6 +357,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + [[package]] name = "nom" version = "7.1.3" @@ -575,7 +534,7 @@ dependencies = [ "circular", "crc32fast", "encoding_rs", - "libflate", + "flate2", "nom", "oem_cp", "positioned-io", @@ -584,12 +543,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "rle-decode-fast" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" - [[package]] name = "ryu" version = "1.0.16" @@ -776,12 +729,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - [[package]] name = "wasm-bindgen" version = "0.2.90" @@ -932,23 +879,3 @@ name = "windows_x86_64_msvc" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "zerocopy" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] diff --git a/Justfile b/Justfile index 76ff70a..c09d602 100644 --- a/Justfile +++ b/Justfile @@ -8,7 +8,7 @@ check: # Run all tests locally test *args: - cargo nextest run {{args}} + cargo nextest run {{args}} --all-features # Run all tests with nextest and cargo-llvm-cov ci-test: diff --git a/crates/rc-zip/Cargo.toml b/crates/rc-zip/Cargo.toml index 559c1a6..eb4bcad 100644 --- a/crates/rc-zip/Cargo.toml +++ b/crates/rc-zip/Cargo.toml @@ -19,13 +19,14 @@ chrono = "0.4.33" encoding_rs = "0.8.33" crc32fast = "1.3.2" positioned-io = { workspace = true, optional = true } -libflate = { version = "2.0.0", optional = true } tracing = "0.1.40" oem_cp = "2.0.0" thiserror = "1.0.56" chardetng = "0.1.17" +flate2 = { version = "1.0.28", optional = true } [features] -default = ["sync", "file"] -sync = ["libflate"] -file = ["positioned-io"] \ No newline at end of file +default = ["sync", "file", "deflate"] +sync = [] +file = ["positioned-io"] +deflate = ["flate2"] diff --git a/crates/rc-zip/src/reader/sync/decoder.rs b/crates/rc-zip/src/reader/sync/decoder.rs index c084772..ea19da9 100644 --- a/crates/rc-zip/src/reader/sync/decoder.rs +++ b/crates/rc-zip/src/reader/sync/decoder.rs @@ -1,4 +1,6 @@ -use libflate::non_blocking::deflate; +#[cfg(feature = "deflate")] +use flate2::read::DeflateDecoder; + use std::{cmp, io}; pub trait Decoder: io::Read @@ -10,19 +12,19 @@ where fn into_inner(self: Box) -> R; /// Returns a mutable reference to the inner reader. - fn as_inner_mut(&mut self) -> &mut R; + fn get_mut(&mut self) -> &mut R; } -impl Decoder for deflate::Decoder +impl Decoder for DeflateDecoder where R: io::Read, { fn into_inner(self: Box) -> R { - deflate::Decoder::into_inner(*self) + DeflateDecoder::into_inner(*self) } - fn as_inner_mut(&mut self) -> &mut R { - deflate::Decoder::as_inner_mut(self) + fn get_mut(&mut self) -> &mut R { + DeflateDecoder::get_mut(self) } } @@ -59,7 +61,7 @@ where self.inner } - fn as_inner_mut(&mut self) -> &mut R { + fn get_mut(&mut self) -> &mut R { &mut self.inner } } @@ -80,7 +82,7 @@ impl LimitedReader { self.inner } - pub fn as_inner_mut(&mut self) -> &mut circular::Buffer { + pub fn get_mut(&mut self) -> &mut circular::Buffer { &mut self.inner } } diff --git a/crates/rc-zip/src/reader/sync/entry_reader.rs b/crates/rc-zip/src/reader/sync/entry_reader.rs index 81280d8..aca7cb6 100644 --- a/crates/rc-zip/src/reader/sync/entry_reader.rs +++ b/crates/rc-zip/src/reader/sync/entry_reader.rs @@ -7,7 +7,8 @@ use crate::{ transition, }; -use libflate::non_blocking::deflate; +#[cfg(feature = "deflate")] +use flate2::read::DeflateDecoder; use nom::Offset; use std::io; use tracing::trace; @@ -74,7 +75,7 @@ where let limited_reader = LimitedReader::new(buffer, self.inner.compressed_size); let decoder: Box> = match self.method { Method::Store => Box::new(StoreDecoder::new(limited_reader)), - Method::Deflate => Box::new(deflate::Decoder::new(limited_reader)), + Method::Deflate => Box::new(DeflateDecoder::new(limited_reader)), method => return Err(Error::Unsupported(UnsupportedError::UnsupportedCompressionMethod(method)).into()), }; @@ -97,7 +98,7 @@ where .. } => { { - let buffer = decoder.as_inner_mut().as_inner_mut(); + let buffer = decoder.get_mut().get_mut(); if !self.eof && buffer.available_space() > 0 { match self.rd.read(buffer.space())? { 0 => { @@ -135,7 +136,7 @@ where } Err(e) => match e.kind() { io::ErrorKind::UnexpectedEof => { - let buffer = decoder.as_inner_mut().as_inner_mut(); + let buffer = decoder.get_mut().get_mut(); if self.eof || buffer.available_space() == 0 { Err(e) } else {