diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 6b9a3c0..78c3d26 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -32,10 +32,10 @@ jobs: run: cargo install cross --git https://github.com/cross-rs/cross --rev 6d097fb - name: Build - run: cross build --target ${{ matrix.target }} -vv + run: cross build --target ${{ matrix.target }} --release -vv - name: Test - run: cross test --target ${{ matrix.target }} -vv + run: cross test --target ${{ matrix.target }} --release -vv test-wasm32-emscripten: runs-on: ubuntu-latest @@ -60,7 +60,7 @@ jobs: uses: mymindstorm/setup-emsdk@v14 - name: Build - run: cargo build --target wasm32-unknown-emscripten --no-default-features --features ${{ matrix.build }} + run: cargo build --release --target wasm32-unknown-emscripten --no-default-features --features ${{ matrix.build }} test-native: runs-on: ${{ matrix.os }} @@ -97,9 +97,9 @@ jobs: run: brew install automake autoconf coreutils libtool nasm - name: Test (shared) - run: cargo test --no-default-features --features shared --lib -vv + run: cargo test --release --no-default-features --features shared --lib -vv - name: Test (static) run: | cargo clean # ensure we're starting fresh, no funny business - cargo test --no-default-features --features static -vv + cargo test --release --no-default-features --features static -vv diff --git a/src/igzip/read.rs b/src/igzip/read.rs index 75e3744..cc93165 100644 --- a/src/igzip/read.rs +++ b/src/igzip/read.rs @@ -64,26 +64,25 @@ impl io::Read for Encoder { #[inline] fn read(&mut self, buf: &mut [u8]) -> io::Result { // Check if there is data left in out_buf, otherwise refill; if end state, return 0 - if self.stream.stream.internal_state.state != isal::isal_zstate_state_ZSTATE_END { - if self.stream.stream.avail_in == 0 { - // Read out next buf len worth to compress; filling intermediate out_buf - self.stream.stream.avail_in = self.inner.read(&mut self.in_buf)? as _; - self.stream.stream.next_in = self.in_buf.as_mut_ptr(); - self.stream.stream.end_of_stream = - (self.stream.stream.avail_in < self.in_buf.len() as _) as _; - } + if self.stream.stream.internal_state.state != isal::isal_zstate_state_ZSTATE_END + && (self.stream.stream.avail_in == 0 + || self.stream.stream.internal_state.state + != isal::isal_zstate_state_ZSTATE_TMP_FLUSH_ICF_BUFFER) + { + // Read out next buf len worth to compress; filling intermediate out_buf + self.stream.stream.avail_in = self.inner.read(&mut self.in_buf)? as _; + self.stream.stream.next_in = self.in_buf.as_mut_ptr(); + self.stream.stream.end_of_stream = + (self.stream.stream.avail_in < self.in_buf.len() as _) as _; + } - // compress this chunk into out_buf - self.stream.stream.avail_out = buf.len() as _; - self.stream.stream.next_out = buf.as_mut_ptr(); + self.stream.stream.avail_out = buf.len() as _; + self.stream.stream.next_out = buf.as_mut_ptr(); - self.stream.deflate()?; + self.stream.deflate()?; - let nbytes = buf.len() - self.stream.stream.avail_out as usize; - Ok(nbytes) - } else { - Ok(0) - } + let nbytes = buf.len() - self.stream.stream.avail_out as usize; + Ok(nbytes) } }