uoff_t eof_offset;
struct stat last_parent_statbuf;
+ bool hdr_read:1;
bool log_errors:1;
bool marked:1;
bool strm_closed:1;
ret = lzma_code(&zstream->strm, LZMA_FINISH);
if (ret != LZMA_STREAM_END)
if (lzma_handle_error(zstream, ret) == 0)
- stream->istream.stream_errno = EPIPE;
+ stream->istream.stream_errno =
+ zstream->hdr_read ? EPIPE : EINVAL;
stream->istream.eof = TRUE;
}
return -1;
zstream->strm.next_out = stream->w_buffer + stream->pos;
zstream->strm.avail_out = out_size;
+ if (!zstream->hdr_read && size > LZMA_STREAM_HEADER_SIZE)
+ zstream->hdr_read = TRUE;
ret = lzma_code(&zstream->strm, LZMA_RUN);
out_size -= zstream->strm.avail_out;