diff --git a/lrzip.c b/lrzip.c index be4b2eb..d99ed44 100644 --- a/lrzip.c +++ b/lrzip.c @@ -452,6 +452,14 @@ void clear_tmpinbuf(rzip_control *control) control->in_len = control->in_ofs = 0; } +void clear_tmpinfile(rzip_control *control) +{ + if (unlikely(lseek(control->fd_in, 0, SEEK_SET))) + fatal("Failed to lseek on fd_in in clear_tmpinfile\n"); + if (unlikely(ftruncate(control->fd_in, 0))) + fatal("Failed to truncate fd_in in clear_tmpinfile\n"); +} + void close_tmpinbuf(rzip_control *control) { control->flags &= ~FLAG_TMP_INBUF; diff --git a/lrzip.h b/lrzip.h index a4977aa..e01190c 100644 --- a/lrzip.h +++ b/lrzip.h @@ -37,5 +37,6 @@ void write_fdout(rzip_control *control, void *buf, i64 len); void flush_tmpoutbuf(rzip_control *control); void close_tmpoutbuf(rzip_control *control); void clear_tmpinbuf(rzip_control *control); +void clear_tmpinfile(rzip_control *control); void close_tmpinbuf(rzip_control *control); #endif diff --git a/runzip.c b/runzip.c index 808e0d4..e2d3417 100644 --- a/runzip.c +++ b/runzip.c @@ -327,6 +327,8 @@ i64 runzip_fd(rzip_control *control, int fd_in, int fd_out, int fd_hist, i64 exp dump_tmpoutfile(control, fd_out); if (TMP_INBUF) clear_tmpinbuf(control); + else if (STDIN) + clear_tmpinfile(control); } while (total < expected_size || (!expected_size && !control->eof)); gettimeofday(&end,NULL);