diff options
Diffstat (limited to 'decoder.cc')
-rw-r--r-- | decoder.cc | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -108,9 +108,14 @@ void LZ_decoder::flush_data() if( size > 0 ) { crc32.update( crc_, buffer + stream_pos, size ); - if( outfd >= 0 && - writeblock( outfd, buffer + stream_pos, size ) != size ) - throw Error( "Write error" ); + if( outfd >= 0 ) + { + const long long i = std::max( 0LL, outskip - stream_position() ); + const long long s = + std::min( outend - stream_position(), (long long)size ) - i; + if( s > 0 && writeblock( outfd, buffer + stream_pos + i, s ) != s ) + throw Error( "Write error" ); + } if( pos >= buffer_size ) { partial_data_pos += pos; pos = 0; } stream_pos = pos; } |