Clear the temporary infile where possible as well when we have falen back to it.

This commit is contained in:
ckolivas 2011-03-15 11:27:07 +11:00
parent 65a681a254
commit e26d0d1381
3 changed files with 11 additions and 0 deletions

View file

@ -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;

View file

@ -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

View file

@ -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);