mirror of
https://github.com/ckolivas/lrzip.git
synced 2025-12-06 07:12:00 +01:00
Create a flag to know when the temporary output buffer is in use, in preparation for when we use it on decompression.
This commit is contained in:
parent
2f87f62696
commit
6ac74aa9f0
|
|
@ -46,6 +46,7 @@
|
||||||
#define CHECK_FILE (control->flags & FLAG_CHECK)
|
#define CHECK_FILE (control->flags & FLAG_CHECK)
|
||||||
#define KEEP_BROKEN (control->flags & FLAG_KEEP_BROKEN)
|
#define KEEP_BROKEN (control->flags & FLAG_KEEP_BROKEN)
|
||||||
#define LZO_TEST (control->flags & FLAG_THRESHOLD)
|
#define LZO_TEST (control->flags & FLAG_THRESHOLD)
|
||||||
|
#define TMP_OUTBUF (control->flags & FLAG_TMP_OUTBUF)
|
||||||
|
|
||||||
#define print_output(format, args...) do {\
|
#define print_output(format, args...) do {\
|
||||||
fprintf(control->msgout, format, ##args); \
|
fprintf(control->msgout, format, ##args); \
|
||||||
|
|
|
||||||
4
lrzip.c
4
lrzip.c
|
|
@ -738,8 +738,8 @@ next_chunk:
|
||||||
* a pseudo-temporary file */
|
* a pseudo-temporary file */
|
||||||
static void open_tmpoutbuf(rzip_control *control)
|
static void open_tmpoutbuf(rzip_control *control)
|
||||||
{
|
{
|
||||||
|
control->flags |= FLAG_TMP_OUTBUF;
|
||||||
control->out_maxlen = control->maxram + control->page_size;
|
control->out_maxlen = control->maxram + control->page_size;
|
||||||
|
|
||||||
control->tmp_outbuf = malloc(control->out_maxlen);
|
control->tmp_outbuf = malloc(control->out_maxlen);
|
||||||
if (unlikely(!control->tmp_outbuf))
|
if (unlikely(!control->tmp_outbuf))
|
||||||
fatal("Failed to malloc tmp_outbuf in open_tmpoutbuf\n");
|
fatal("Failed to malloc tmp_outbuf in open_tmpoutbuf\n");
|
||||||
|
|
@ -838,6 +838,8 @@ void compress_file(rzip_control *control)
|
||||||
fatal("Failed to close fd_in\n");
|
fatal("Failed to close fd_in\n");
|
||||||
if (unlikely(!STDOUT && close(fd_out)))
|
if (unlikely(!STDOUT && close(fd_out)))
|
||||||
fatal("Failed to close fd_out\n");
|
fatal("Failed to close fd_out\n");
|
||||||
|
if (TMP_OUTBUF)
|
||||||
|
free(control->tmp_outbuf);
|
||||||
|
|
||||||
if (!KEEP_FILES) {
|
if (!KEEP_FILES) {
|
||||||
if (unlikely(unlink(control->infile)))
|
if (unlikely(unlink(control->infile)))
|
||||||
|
|
|
||||||
|
|
@ -120,6 +120,7 @@ typedef struct md5_ctx md5_ctx;
|
||||||
#define FLAG_CHECK (1 << 18)
|
#define FLAG_CHECK (1 << 18)
|
||||||
#define FLAG_KEEP_BROKEN (1 << 19)
|
#define FLAG_KEEP_BROKEN (1 << 19)
|
||||||
#define FLAG_THRESHOLD (1 << 20)
|
#define FLAG_THRESHOLD (1 << 20)
|
||||||
|
#define FLAG_TMP_OUTBUF (1 << 21)
|
||||||
|
|
||||||
#define NO_MD5 (!(HASH_CHECK) && !(HAS_MD5))
|
#define NO_MD5 (!(HASH_CHECK) && !(HAS_MD5))
|
||||||
|
|
||||||
|
|
|
||||||
1
main.c
1
main.c
|
|
@ -75,6 +75,7 @@
|
||||||
#define CHECK_FILE (control.flags & FLAG_CHECK)
|
#define CHECK_FILE (control.flags & FLAG_CHECK)
|
||||||
#define KEEP_BROKEN (control.flags & FLAG_KEEP_BROKEN)
|
#define KEEP_BROKEN (control.flags & FLAG_KEEP_BROKEN)
|
||||||
#define LZO_TEST (control.flags & FLAG_THRESHOLD)
|
#define LZO_TEST (control.flags & FLAG_THRESHOLD)
|
||||||
|
#define TMP_OUTBUF (control.flags & FLAG_TMP_OUTBUF)
|
||||||
|
|
||||||
#define print_output(format, args...) do {\
|
#define print_output(format, args...) do {\
|
||||||
fprintf(control.msgout, format, ##args); \
|
fprintf(control.msgout, format, ##args); \
|
||||||
|
|
|
||||||
2
rzip.c
2
rzip.c
|
|
@ -980,7 +980,7 @@ retry:
|
||||||
if (unlikely(write_1g(control, control->fd_out, md5_resblock, MD5_DIGEST_SIZE) != MD5_DIGEST_SIZE))
|
if (unlikely(write_1g(control, control->fd_out, md5_resblock, MD5_DIGEST_SIZE) != MD5_DIGEST_SIZE))
|
||||||
fatal("Failed to write md5 in rzip_fd\n");
|
fatal("Failed to write md5 in rzip_fd\n");
|
||||||
|
|
||||||
if (STDOUT)
|
if (TMP_OUTBUF)
|
||||||
flush_stdout(control);
|
flush_stdout(control);
|
||||||
|
|
||||||
gettimeofday(¤t, NULL);
|
gettimeofday(¤t, NULL);
|
||||||
|
|
|
||||||
8
stream.c
8
stream.c
|
|
@ -637,7 +637,7 @@ const i64 one_g = 1000 * 1024 * 1024;
|
||||||
|
|
||||||
ssize_t put_fdout(rzip_control *control, int fd, void *offset_buf, ssize_t ret)
|
ssize_t put_fdout(rzip_control *control, int fd, void *offset_buf, ssize_t ret)
|
||||||
{
|
{
|
||||||
if (!STDOUT || DECOMPRESS || TEST_ONLY)
|
if (!TMP_OUTBUF)
|
||||||
return write(fd, offset_buf, (size_t)ret);
|
return write(fd, offset_buf, (size_t)ret);
|
||||||
|
|
||||||
if (unlikely(control->out_ofs + ret > control->out_maxlen))
|
if (unlikely(control->out_ofs + ret > control->out_maxlen))
|
||||||
|
|
@ -769,7 +769,7 @@ static int seekto(rzip_control *control, struct stream_info *sinfo, i64 pos)
|
||||||
{
|
{
|
||||||
i64 spos = pos + sinfo->initial_pos;
|
i64 spos = pos + sinfo->initial_pos;
|
||||||
|
|
||||||
if (!(DECOMPRESS || TEST_ONLY) && STDOUT) {
|
if (TMP_OUTBUF) {
|
||||||
spos -= control->rel_ofs;
|
spos -= control->rel_ofs;
|
||||||
control->out_ofs = spos;
|
control->out_ofs = spos;
|
||||||
if (unlikely(spos > control->out_len || spos < 0)) {
|
if (unlikely(spos > control->out_len || spos < 0)) {
|
||||||
|
|
@ -790,7 +790,7 @@ static i64 get_seek(rzip_control *control, int fd)
|
||||||
{
|
{
|
||||||
i64 ret;
|
i64 ret;
|
||||||
|
|
||||||
if (!(DECOMPRESS || TEST_ONLY) && STDOUT)
|
if (TMP_OUTBUF)
|
||||||
return control->rel_ofs + control->out_ofs;
|
return control->rel_ofs + control->out_ofs;
|
||||||
ret = lseek(fd, 0, SEEK_CUR);
|
ret = lseek(fd, 0, SEEK_CUR);
|
||||||
if (unlikely(ret == -1))
|
if (unlikely(ret == -1))
|
||||||
|
|
@ -1107,7 +1107,7 @@ retry:
|
||||||
if (!ctis->chunks++) {
|
if (!ctis->chunks++) {
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
if (STDOUT) {
|
if (TMP_OUTBUF) {
|
||||||
if (!control->magic_written)
|
if (!control->magic_written)
|
||||||
write_stdout_header(control);
|
write_stdout_header(control);
|
||||||
flush_stdout(control);
|
flush_stdout(control);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue