diff options
author | Daniel Baumann <mail@daniel-baumann.ch> | 2015-11-07 10:16:13 +0000 |
---|---|---|
committer | Daniel Baumann <mail@daniel-baumann.ch> | 2015-11-07 10:16:13 +0000 |
commit | f8ec1a9b6de5ccde4220017676cbae1c16205fd1 (patch) | |
tree | c76650bdeec7078ff209e394b3d091bbbabb40f9 /decoder.cc | |
parent | Adding debian version 1.13~rc1-1. (diff) | |
download | lziprecover-f8ec1a9b6de5ccde4220017676cbae1c16205fd1.tar.xz lziprecover-f8ec1a9b6de5ccde4220017676cbae1c16205fd1.zip |
Merging upstream version 1.13~rc2.
Signed-off-by: Daniel Baumann <mail@daniel-baumann.ch>
Diffstat (limited to '')
-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; } |