mirror of
https://github.com/ckolivas/lrzip.git
synced 2025-12-06 07:12:00 +01:00
Update copyright notices and style to 1TBS for return codes.
This commit is contained in:
parent
65e8ca4b03
commit
086265c83f
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2012 Con Kolivas
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
17
liblrzip.c
17
liblrzip.c
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2012 Con Kolivas
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <liblrzip_private.h>
|
#include <liblrzip_private.h>
|
||||||
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,20 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2012 Con Kolivas
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
50
lrzip.c
50
lrzip.c
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2006-2011 Con Kolivas
|
Copyright (C) 2006-2012 Con Kolivas
|
||||||
Copyright (C) 2011 Peter Hyman
|
Copyright (C) 2011 Peter Hyman
|
||||||
Copyright (C) 1998-2003 Andrew Tridgell
|
Copyright (C) 1998-2003 Andrew Tridgell
|
||||||
|
|
||||||
|
|
@ -258,7 +258,8 @@ bool read_magic(rzip_control *control, int fd_in, i64 *expected_size)
|
||||||
if (unlikely(read(fd_in, magic, 24) != 24))
|
if (unlikely(read(fd_in, magic, 24) != 24))
|
||||||
fatal_return(("Failed to read magic header\n"), false);
|
fatal_return(("Failed to read magic header\n"), false);
|
||||||
|
|
||||||
if (unlikely(!get_magic(control, magic))) return false;
|
if (unlikely(!get_magic(control, magic)))
|
||||||
|
return false;
|
||||||
*expected_size = control->st_size;
|
*expected_size = control->st_size;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -350,9 +351,11 @@ bool flush_tmpoutbuf(rzip_control *control)
|
||||||
if (!TEST_ONLY) {
|
if (!TEST_ONLY) {
|
||||||
print_maxverbose("Dumping buffer to physical file.\n");
|
print_maxverbose("Dumping buffer to physical file.\n");
|
||||||
if (STDOUT) {
|
if (STDOUT) {
|
||||||
if (unlikely(!fwrite_stdout(control, control->tmp_outbuf, control->out_len))) return false;
|
if (unlikely(!fwrite_stdout(control, control->tmp_outbuf, control->out_len)))
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
if (unlikely(!write_fdout(control, control->tmp_outbuf, control->out_len))) return false;
|
if (unlikely(!write_fdout(control, control->tmp_outbuf, control->out_len)))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
control->out_relofs += control->out_len;
|
control->out_relofs += control->out_len;
|
||||||
|
|
@ -679,12 +682,14 @@ bool decompress_file(rzip_control *control)
|
||||||
|
|
||||||
if (STDIN) {
|
if (STDIN) {
|
||||||
fd_in = open_tmpinfile(control);
|
fd_in = open_tmpinfile(control);
|
||||||
if (unlikely(fd_in == -1)) return false;
|
if (unlikely(fd_in == -1))
|
||||||
|
return false;
|
||||||
read_tmpinmagic(control);
|
read_tmpinmagic(control);
|
||||||
if (ENCRYPT)
|
if (ENCRYPT)
|
||||||
failure_return(("Cannot decompress encrypted file from STDIN\n"), false);
|
failure_return(("Cannot decompress encrypted file from STDIN\n"), false);
|
||||||
expected_size = control->st_size;
|
expected_size = control->st_size;
|
||||||
if (unlikely(!open_tmpinbuf(control))) return false;
|
if (unlikely(!open_tmpinbuf(control)))
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
fd_in = open(infilecopy, O_RDONLY);
|
fd_in = open(infilecopy, O_RDONLY);
|
||||||
if (unlikely(fd_in == -1)) {
|
if (unlikely(fd_in == -1)) {
|
||||||
|
|
@ -712,7 +717,8 @@ bool decompress_file(rzip_control *control)
|
||||||
|
|
||||||
/* Can't copy permissions from STDIN */
|
/* Can't copy permissions from STDIN */
|
||||||
if (!STDIN)
|
if (!STDIN)
|
||||||
if (unlikely(!preserve_perms(control, fd_in, fd_out))) return false;
|
if (unlikely(!preserve_perms(control, fd_in, fd_out)))
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
fd_out = open_tmpoutfile(control);
|
fd_out = open_tmpoutfile(control);
|
||||||
if (unlikely(fd_out == -1))
|
if (unlikely(fd_out == -1))
|
||||||
|
|
@ -725,10 +731,12 @@ bool decompress_file(rzip_control *control)
|
||||||
fatal_return(("Failed to unlink tmpfile: %s\n", control->outfile), false);
|
fatal_return(("Failed to unlink tmpfile: %s\n", control->outfile), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(!open_tmpoutbuf(control))) return false;
|
if (unlikely(!open_tmpoutbuf(control)))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!STDIN)
|
if (!STDIN)
|
||||||
if (unlikely(!read_magic(control, fd_in, &expected_size))) return false;
|
if (unlikely(!read_magic(control, fd_in, &expected_size)))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!STDOUT) {
|
if (!STDOUT) {
|
||||||
/* Check if there's enough free space on the device chosen to fit the
|
/* Check if there's enough free space on the device chosen to fit the
|
||||||
|
|
@ -755,14 +763,17 @@ bool decompress_file(rzip_control *control)
|
||||||
print_verbose("being used for integrity testing.\n");
|
print_verbose("being used for integrity testing.\n");
|
||||||
|
|
||||||
if (ENCRYPT)
|
if (ENCRYPT)
|
||||||
if (unlikely(!get_hash(control, 0))) return false;
|
if (unlikely(!get_hash(control, 0)))
|
||||||
|
return false;
|
||||||
|
|
||||||
print_progress("Decompressing...\n");
|
print_progress("Decompressing...\n");
|
||||||
|
|
||||||
if (unlikely(runzip_fd(control, fd_in, fd_out, fd_hist, expected_size) < 0)) return false;
|
if (unlikely(runzip_fd(control, fd_in, fd_out, fd_hist, expected_size) < 0))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (STDOUT && !TMP_OUTBUF)
|
if (STDOUT && !TMP_OUTBUF)
|
||||||
if (unlikely(!dump_tmpoutfile(control, fd_out))) return false;
|
if (unlikely(!dump_tmpoutfile(control, fd_out)))
|
||||||
|
return false;
|
||||||
|
|
||||||
/* if we get here, no fatal_return(( errors during decompression */
|
/* if we get here, no fatal_return(( errors during decompression */
|
||||||
print_progress("\r");
|
print_progress("\r");
|
||||||
|
|
@ -940,7 +951,8 @@ next_chunk:
|
||||||
|
|
||||||
if (unlikely(lseek(fd_in, stream_head[stream] + ofs, SEEK_SET)) == -1)
|
if (unlikely(lseek(fd_in, stream_head[stream] + ofs, SEEK_SET)) == -1)
|
||||||
fatal_goto(("Failed to seek to header data in get_fileinfo\n"), error);
|
fatal_goto(("Failed to seek to header data in get_fileinfo\n"), error);
|
||||||
if (unlikely(!get_header_info(control, fd_in, &ctype, &c_len, &u_len, &last_head, chunk_byte))) return false;
|
if (unlikely(!get_header_info(control, fd_in, &ctype, &c_len, &u_len, &last_head, chunk_byte)))
|
||||||
|
return false;
|
||||||
|
|
||||||
print_verbose("Stream: %d\n", stream);
|
print_verbose("Stream: %d\n", stream);
|
||||||
print_maxverbose("Offset: %lld\n", ofs);
|
print_maxverbose("Offset: %lld\n", ofs);
|
||||||
|
|
@ -953,7 +965,8 @@ next_chunk:
|
||||||
if (unlikely(head_off = lseek(fd_in, last_head + ofs, SEEK_SET)) == -1)
|
if (unlikely(head_off = lseek(fd_in, last_head + ofs, SEEK_SET)) == -1)
|
||||||
fatal_goto(("Failed to seek to header data in get_fileinfo\n"), error);
|
fatal_goto(("Failed to seek to header data in get_fileinfo\n"), error);
|
||||||
if (unlikely(!get_header_info(control, fd_in, &ctype, &c_len, &u_len,
|
if (unlikely(!get_header_info(control, fd_in, &ctype, &c_len, &u_len,
|
||||||
&last_head, chunk_byte))) return false;
|
&last_head, chunk_byte)))
|
||||||
|
return false;
|
||||||
if (unlikely(last_head < 0 || c_len < 0 || u_len < 0))
|
if (unlikely(last_head < 0 || c_len < 0 || u_len < 0))
|
||||||
failure_goto(("Entry negative, likely corrupted archive.\n"), error);
|
failure_goto(("Entry negative, likely corrupted archive.\n"), error);
|
||||||
print_verbose("%d\t", block);
|
print_verbose("%d\t", block);
|
||||||
|
|
@ -1080,7 +1093,8 @@ bool compress_file(rzip_control *control)
|
||||||
if (MD5_RELIABLE)
|
if (MD5_RELIABLE)
|
||||||
control->flags |= FLAG_MD5;
|
control->flags |= FLAG_MD5;
|
||||||
if (ENCRYPT)
|
if (ENCRYPT)
|
||||||
if (unlikely(!get_hash(control, 1))) return false;
|
if (unlikely(!get_hash(control, 1)))
|
||||||
|
return false;
|
||||||
memset(header, 0, sizeof(header));
|
memset(header, 0, sizeof(header));
|
||||||
|
|
||||||
if (!STDIN) {
|
if (!STDIN) {
|
||||||
|
|
@ -1200,7 +1214,8 @@ bool initialize_control(rzip_control *control)
|
||||||
control->suffix = strdup(".lrz");
|
control->suffix = strdup(".lrz");
|
||||||
control->compression_level = 7;
|
control->compression_level = 7;
|
||||||
control->ramsize = get_ram(control);
|
control->ramsize = get_ram(control);
|
||||||
if (unlikely(control->ramsize == -1)) return false;
|
if (unlikely(control->ramsize == -1))
|
||||||
|
return false;
|
||||||
/* for testing single CPU */
|
/* for testing single CPU */
|
||||||
control->threads = PROCESSORS; /* get CPUs for LZMA */
|
control->threads = PROCESSORS; /* get CPUs for LZMA */
|
||||||
control->page_size = PAGE_SIZE;
|
control->page_size = PAGE_SIZE;
|
||||||
|
|
@ -1213,7 +1228,8 @@ bool initialize_control(rzip_control *control)
|
||||||
fatal_return(("Failed to gettimeofday in main\n"), false);
|
fatal_return(("Failed to gettimeofday in main\n"), false);
|
||||||
control->secs = tv.tv_sec;
|
control->secs = tv.tv_sec;
|
||||||
control->encloops = nloops(control->secs, control->salt, control->salt + 1);
|
control->encloops = nloops(control->secs, control->salt, control->salt + 1);
|
||||||
if (unlikely(!get_rand(control, control->salt + 2, 6))) return false;
|
if (unlikely(!get_rand(control, control->salt + 2, 6)))
|
||||||
|
return false;
|
||||||
|
|
||||||
/* Get Temp Dir */
|
/* Get Temp Dir */
|
||||||
eptr = getenv("TMP");
|
eptr = getenv("TMP");
|
||||||
|
|
|
||||||
2
main.c
2
main.c
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2006-2011 Con Kolivas
|
Copyright (C) 2006-2012 Con Kolivas
|
||||||
Copyright (C) 2011 Peter Hyman
|
Copyright (C) 2011 Peter Hyman
|
||||||
Copyright (C) 1998-2003 Andrew Tridgell
|
Copyright (C) 1998-2003 Andrew Tridgell
|
||||||
|
|
||||||
|
|
|
||||||
26
runzip.c
26
runzip.c
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2006-2011 Con Kolivas
|
Copyright (C) 2006-2012 Con Kolivas
|
||||||
Copyright (C) 1998-2003 Andrew Tridgell
|
Copyright (C) 1998-2003 Andrew Tridgell
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
|
@ -146,7 +146,8 @@ static i64 read_header(rzip_control *control, void *ss, uchar *head)
|
||||||
if (control->major_version == 0 && control->minor_version == 4)
|
if (control->major_version == 0 && control->minor_version == 4)
|
||||||
chunk_bytes = 8;
|
chunk_bytes = 8;
|
||||||
*head = read_u8(control, ss, 0, &err);
|
*head = read_u8(control, ss, 0, &err);
|
||||||
if (err) return -1;
|
if (err)
|
||||||
|
return -1;
|
||||||
return read_vchars(control, ss, 0, chunk_bytes);
|
return read_vchars(control, ss, 0, chunk_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -209,7 +210,8 @@ static i64 unzip_match(rzip_control *control, void *ss, i64 len, uint32 *cksum,
|
||||||
|
|
||||||
/* Note the offset is in a different format v0.40+ */
|
/* Note the offset is in a different format v0.40+ */
|
||||||
offset = read_vchars(control, ss, 0, chunk_bytes);
|
offset = read_vchars(control, ss, 0, chunk_bytes);
|
||||||
if (unlikely(offset == -1)) return -1;
|
if (unlikely(offset == -1))
|
||||||
|
return -1;
|
||||||
if (unlikely(seekto_fdhist(control, cur_pos - offset) == -1))
|
if (unlikely(seekto_fdhist(control, cur_pos - offset) == -1))
|
||||||
fatal_return(("Seek failed by %d from %d on history file in unzip_match\n",
|
fatal_return(("Seek failed by %d from %d on history file in unzip_match\n",
|
||||||
offset, cur_pos), -1);
|
offset, cur_pos), -1);
|
||||||
|
|
@ -309,7 +311,8 @@ static i64 runzip_chunk(rzip_control *control, int fd_in, i64 expected_size, i64
|
||||||
|
|
||||||
while ((len = read_header(control, ss, &head)) || head) {
|
while ((len = read_header(control, ss, &head)) || head) {
|
||||||
i64 u;
|
i64 u;
|
||||||
if (unlikely(len == -1)) return -1;
|
if (unlikely(len == -1))
|
||||||
|
return -1;
|
||||||
switch (head) {
|
switch (head) {
|
||||||
case 0:
|
case 0:
|
||||||
u = unzip_literal(control, ss, len, &cksum);
|
u = unzip_literal(control, ss, len, &cksum);
|
||||||
|
|
@ -374,16 +377,20 @@ i64 runzip_fd(rzip_control *control, int fd_in, int fd_out, int fd_hist, i64 exp
|
||||||
|
|
||||||
do {
|
do {
|
||||||
u = runzip_chunk(control, fd_in, expected_size, total);
|
u = runzip_chunk(control, fd_in, expected_size, total);
|
||||||
if (unlikely(u == -1)) return -1;
|
if (unlikely(u == -1))
|
||||||
|
return -1;
|
||||||
total += u;
|
total += u;
|
||||||
if (TMP_OUTBUF)
|
if (TMP_OUTBUF)
|
||||||
{ if (unlikely(!flush_tmpoutbuf(control))) return -1; }
|
{ if (unlikely(!flush_tmpoutbuf(control)))
|
||||||
|
return -1; }
|
||||||
else if (STDOUT)
|
else if (STDOUT)
|
||||||
{ if (unlikely(!dump_tmpoutfile(control, fd_out))) return -1; }
|
{ if (unlikely(!dump_tmpoutfile(control, fd_out)))
|
||||||
|
return -1; }
|
||||||
if (TMP_INBUF)
|
if (TMP_INBUF)
|
||||||
clear_tmpinbuf(control);
|
clear_tmpinbuf(control);
|
||||||
else if (STDIN)
|
else if (STDIN)
|
||||||
if (unlikely(!clear_tmpinfile(control))) return -1;
|
if (unlikely(!clear_tmpinfile(control)))
|
||||||
|
return -1;
|
||||||
} while (total < expected_size || (!expected_size && !control->eof));
|
} while (total < expected_size || (!expected_size && !control->eof));
|
||||||
|
|
||||||
gettimeofday(&end,NULL);
|
gettimeofday(&end,NULL);
|
||||||
|
|
@ -406,7 +413,8 @@ i64 runzip_fd(rzip_control *control, int fd_in, int fd_out, int fd_hist, i64 exp
|
||||||
if (unlikely(read_1g(control, fd_in, md5_stored, MD5_DIGEST_SIZE) != MD5_DIGEST_SIZE))
|
if (unlikely(read_1g(control, fd_in, md5_stored, MD5_DIGEST_SIZE) != MD5_DIGEST_SIZE))
|
||||||
fatal_return(("Failed to read md5 data in runzip_fd\n"), -1);
|
fatal_return(("Failed to read md5 data in runzip_fd\n"), -1);
|
||||||
if (ENCRYPT)
|
if (ENCRYPT)
|
||||||
if (unlikely(!lrz_decrypt(control, md5_stored, MD5_DIGEST_SIZE, control->salt_pass))) return -1;
|
if (unlikely(!lrz_decrypt(control, md5_stored, MD5_DIGEST_SIZE, control->salt_pass)))
|
||||||
|
return -1;
|
||||||
for (i = 0; i < MD5_DIGEST_SIZE; i++)
|
for (i = 0; i < MD5_DIGEST_SIZE; i++)
|
||||||
if (md5_stored[i] != control->md5_resblock[i]) {
|
if (md5_stored[i] != control->md5_resblock[i]) {
|
||||||
print_output("MD5 CHECK FAILED.\nStored:");
|
print_output("MD5 CHECK FAILED.\nStored:");
|
||||||
|
|
|
||||||
59
rzip.c
59
rzip.c
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2006-2011 Con Kolivas
|
Copyright (C) 2006-2012 Con Kolivas
|
||||||
Copyright (C) 1998 Andrew Tridgell
|
Copyright (C) 1998 Andrew Tridgell
|
||||||
|
|
||||||
Modified to use flat hash, memory limit and variable hash culling
|
Modified to use flat hash, memory limit and variable hash culling
|
||||||
|
|
@ -177,7 +177,8 @@ static uchar *sliding_get_sb(rzip_control *control, struct sliding_buffer *sb, i
|
||||||
if (p >= sb->offset_high && p < (sb->offset_high + sb->size_high))
|
if (p >= sb->offset_high && p < (sb->offset_high + sb->size_high))
|
||||||
return (sb->buf_high + (p - sb->offset_high));
|
return (sb->buf_high + (p - sb->offset_high));
|
||||||
/* p is not within the low or high buffer range */
|
/* p is not within the low or high buffer range */
|
||||||
if (unlikely(!remap_high_sb(control, &control->sb, p))) return NULL;
|
if (unlikely(!remap_high_sb(control, &control->sb, p)))
|
||||||
|
return NULL;
|
||||||
return (sb->buf_high + (p - sb->offset_high));
|
return (sb->buf_high + (p - sb->offset_high));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -238,8 +239,10 @@ static inline bool put_vchars(rzip_control *control, void *ss, i64 s, int length
|
||||||
|
|
||||||
static bool put_header(rzip_control *control, void *ss, uchar head, i64 len)
|
static bool put_header(rzip_control *control, void *ss, uchar head, i64 len)
|
||||||
{
|
{
|
||||||
if (unlikely(!put_u8(control, ss, head))) return false;
|
if (unlikely(!put_u8(control, ss, head)))
|
||||||
if (unlikely(!put_vchars(control, ss, len, 2))) return false;
|
return false;
|
||||||
|
if (unlikely(!put_vchars(control, ss, len, 2)))
|
||||||
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -252,8 +255,10 @@ static bool put_match(rzip_control *control, struct rzip_state *st, i64 p, i64 o
|
||||||
n = 0xFFFF;
|
n = 0xFFFF;
|
||||||
|
|
||||||
ofs = (p - offset);
|
ofs = (p - offset);
|
||||||
if (unlikely(!put_header(control, st->ss, 1, n))) return false;
|
if (unlikely(!put_header(control, st->ss, 1, n)))
|
||||||
if (unlikely(!put_vchars(control, st->ss, ofs, st->chunk_bytes))) return false;
|
return false;
|
||||||
|
if (unlikely(!put_vchars(control, st->ss, ofs, st->chunk_bytes)))
|
||||||
|
return false;
|
||||||
|
|
||||||
st->stats.matches++;
|
st->stats.matches++;
|
||||||
st->stats.match_bytes += n;
|
st->stats.match_bytes += n;
|
||||||
|
|
@ -279,7 +284,8 @@ static int write_sbstream(rzip_control *control, void *ss, int stream, i64 p, i6
|
||||||
len -= n;
|
len -= n;
|
||||||
|
|
||||||
if (sinfo->s[stream].buflen == sinfo->bufsize)
|
if (sinfo->s[stream].buflen == sinfo->bufsize)
|
||||||
if (unlikely(!flush_buffer(control, sinfo, stream))) return -1;
|
if (unlikely(!flush_buffer(control, sinfo, stream)))
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -294,7 +300,8 @@ static bool put_literal(rzip_control *control, struct rzip_state *st, i64 last,
|
||||||
st->stats.literals++;
|
st->stats.literals++;
|
||||||
st->stats.literal_bytes += len;
|
st->stats.literal_bytes += len;
|
||||||
|
|
||||||
if (unlikely(!put_header(control, st->ss, 0, len))) return false;
|
if (unlikely(!put_header(control, st->ss, 0, len)))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (unlikely(len && write_sbstream(control, st->ss, 1, last, len)))
|
if (unlikely(len && write_sbstream(control, st->ss, 1, last, len)))
|
||||||
fatal_return(("Failed to write_stream in put_literal\n"), false);
|
fatal_return(("Failed to write_stream in put_literal\n"), false);
|
||||||
|
|
@ -425,10 +432,12 @@ static inline tag next_tag(rzip_control *control, struct rzip_state *st, i64 p,
|
||||||
uchar *u;
|
uchar *u;
|
||||||
|
|
||||||
u = control->get_sb(control, &control->sb, p - 1);
|
u = control->get_sb(control, &control->sb, p - 1);
|
||||||
if (unlikely(!u)) return -1;
|
if (unlikely(!u))
|
||||||
|
return -1;
|
||||||
t ^= st->hash_index[*u];
|
t ^= st->hash_index[*u];
|
||||||
u = control->get_sb(control, &control->sb, p + MINIMUM_MATCH - 1);
|
u = control->get_sb(control, &control->sb, p + MINIMUM_MATCH - 1);
|
||||||
if (unlikely(!u)) return -1;
|
if (unlikely(!u))
|
||||||
|
return -1;
|
||||||
t ^= st->hash_index[*u];
|
t ^= st->hash_index[*u];
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
@ -441,7 +450,8 @@ static inline tag full_tag(rzip_control *control, struct rzip_state *st, i64 p)
|
||||||
|
|
||||||
for (i = 0; i < MINIMUM_MATCH; i++) {
|
for (i = 0; i < MINIMUM_MATCH; i++) {
|
||||||
u = control->get_sb(control, &control->sb, p + i);
|
u = control->get_sb(control, &control->sb, p + i);
|
||||||
if (unlikely(!u)) return -1;
|
if (unlikely(!u))
|
||||||
|
return -1;
|
||||||
ret ^= st->hash_index[*u];
|
ret ^= st->hash_index[*u];
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -589,7 +599,8 @@ static bool hash_search(rzip_control *control, struct rzip_state *st, double pct
|
||||||
|
|
||||||
if (likely(end > 0)) {
|
if (likely(end > 0)) {
|
||||||
t = full_tag(control, st, p);
|
t = full_tag(control, st, p);
|
||||||
if (unlikely(t == -1)) return false;
|
if (unlikely(t == -1))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (p < end) {
|
while (p < end) {
|
||||||
|
|
@ -600,7 +611,8 @@ static bool hash_search(rzip_control *control, struct rzip_state *st, double pct
|
||||||
if (unlikely(sb->offset_search > sb->offset_low + sb->size_low))
|
if (unlikely(sb->offset_search > sb->offset_low + sb->size_low))
|
||||||
remap_low_sb(control, &control->sb);
|
remap_low_sb(control, &control->sb);
|
||||||
t = next_tag(control, st, p, t);
|
t = next_tag(control, st, p, t);
|
||||||
if (unlikely(t == -1)) return false;
|
if (unlikely(t == -1))
|
||||||
|
return false;
|
||||||
|
|
||||||
/* Don't look for a match if there are no tags with
|
/* Don't look for a match if there are no tags with
|
||||||
this number of bits in the hash table. */
|
this number of bits in the hash table. */
|
||||||
|
|
@ -627,13 +639,16 @@ static bool hash_search(rzip_control *control, struct rzip_state *st, double pct
|
||||||
if ((current.len >= GREAT_MATCH || p >= current.p + MINIMUM_MATCH)
|
if ((current.len >= GREAT_MATCH || p >= current.p + MINIMUM_MATCH)
|
||||||
&& current.len >= MINIMUM_MATCH) {
|
&& current.len >= MINIMUM_MATCH) {
|
||||||
if (st->last_match < current.p)
|
if (st->last_match < current.p)
|
||||||
if (unlikely(!put_literal(control, st, st->last_match, current.p))) return false;
|
if (unlikely(!put_literal(control, st, st->last_match, current.p)))
|
||||||
if (unlikely(!put_match(control, st, current.p, current.ofs, current.len))) return false;
|
return false;
|
||||||
|
if (unlikely(!put_match(control, st, current.p, current.ofs, current.len)))
|
||||||
|
return false;
|
||||||
st->last_match = current.p + current.len;
|
st->last_match = current.p + current.len;
|
||||||
current.p = p = st->last_match;
|
current.p = p = st->last_match;
|
||||||
current.len = 0;
|
current.len = 0;
|
||||||
t = full_tag(control, st, p);
|
t = full_tag(control, st, p);
|
||||||
if (unlikely(t == -1)) return false;
|
if (unlikely(t == -1))
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(p % 128 == 0)) {
|
if (unlikely(p % 128 == 0)) {
|
||||||
|
|
@ -689,8 +704,10 @@ static bool hash_search(rzip_control *control, struct rzip_state *st, double pct
|
||||||
free(ckbuf);
|
free(ckbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(!put_literal(control, st, 0, 0))) return false;
|
if (unlikely(!put_literal(control, st, 0, 0)))
|
||||||
if (unlikely(!put_u32(control, st->ss, st->cksum))) return false;
|
return false;
|
||||||
|
if (unlikely(!put_u32(control, st->ss, st->cksum)))
|
||||||
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -782,7 +799,8 @@ static bool rzip_chunk(rzip_control *control, struct rzip_state *st, int fd_in,
|
||||||
{
|
{
|
||||||
struct sliding_buffer *sb = &control->sb;
|
struct sliding_buffer *sb = &control->sb;
|
||||||
|
|
||||||
if (unlikely(!init_sliding_mmap(control, st, fd_in, offset))) return false;
|
if (unlikely(!init_sliding_mmap(control, st, fd_in, offset)))
|
||||||
|
return false;
|
||||||
|
|
||||||
st->ss = open_stream_out(control, fd_out, NUM_STREAMS, st->chunk_size, st->chunk_bytes);
|
st->ss = open_stream_out(control, fd_out, NUM_STREAMS, st->chunk_size, st->chunk_bytes);
|
||||||
if (unlikely(!st->ss))
|
if (unlikely(!st->ss))
|
||||||
|
|
@ -1137,7 +1155,8 @@ retry:
|
||||||
void rzip_control_free(rzip_control *control)
|
void rzip_control_free(rzip_control *control)
|
||||||
{
|
{
|
||||||
size_t x;
|
size_t x;
|
||||||
if (!control) return;
|
if (!control)
|
||||||
|
return;
|
||||||
|
|
||||||
free(control->tmpdir);
|
free(control->tmpdir);
|
||||||
free(control->outname);
|
free(control->outname);
|
||||||
|
|
|
||||||
52
stream.c
52
stream.c
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2011 Serge Belyshev
|
Copyright (C) 2011 Serge Belyshev
|
||||||
Copyright (C) 2006-2011 Con Kolivas
|
Copyright (C) 2006-2012 Con Kolivas
|
||||||
Copyright (C) 2011 Peter Hyman
|
Copyright (C) 2011 Peter Hyman
|
||||||
Copyright (C) 1998 Andrew Tridgell
|
Copyright (C) 1998 Andrew Tridgell
|
||||||
|
|
||||||
|
|
@ -180,7 +180,8 @@ static inline FILE *fake_fmemopen(rzip_control *control, void *buf, size_t bufle
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
rewind(in);
|
rewind(in);
|
||||||
return in;
|
|
||||||
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline FILE *fake_open_memstream(rzip_control *control, char **buf, size_t *length)
|
static inline FILE *fake_open_memstream(rzip_control *control, char **buf, size_t *length)
|
||||||
|
|
@ -191,7 +192,7 @@ static inline FILE *fake_open_memstream(rzip_control *control, char **buf, size_
|
||||||
failure_return(("NULL parameter to fake_open_memstream"), NULL);
|
failure_return(("NULL parameter to fake_open_memstream"), NULL);
|
||||||
out = tmpfile();
|
out = tmpfile();
|
||||||
if (unlikely(!out))
|
if (unlikely(!out))
|
||||||
return NULL;
|
return NULL;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -693,9 +694,11 @@ ssize_t put_fdout(rzip_control *control, void *offset_buf, ssize_t ret)
|
||||||
/* The data won't fit in a temporary output buffer so we have
|
/* The data won't fit in a temporary output buffer so we have
|
||||||
* to fall back to temporary files. */
|
* to fall back to temporary files. */
|
||||||
print_verbose("Unable to decompress entirely in ram, will use physical files\n");
|
print_verbose("Unable to decompress entirely in ram, will use physical files\n");
|
||||||
if (unlikely(!write_fdout(control, control->tmp_outbuf, control->out_len))) return -1;
|
if (unlikely(!write_fdout(control, control->tmp_outbuf, control->out_len)))
|
||||||
|
return -1;
|
||||||
close_tmpoutbuf(control);
|
close_tmpoutbuf(control);
|
||||||
if (unlikely(!write_fdout(control, offset_buf, ret))) return -1;
|
if (unlikely(!write_fdout(control, offset_buf, ret)))
|
||||||
|
return -1;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
memcpy(control->tmp_outbuf + control->out_ofs, offset_buf, ret);
|
memcpy(control->tmp_outbuf + control->out_ofs, offset_buf, ret);
|
||||||
|
|
@ -754,13 +757,16 @@ ssize_t read_1g(rzip_control *control, int fd, void *buf, i64 len)
|
||||||
/* We're decompressing from STDIN */
|
/* We're decompressing from STDIN */
|
||||||
if (unlikely(control->in_ofs + len > control->in_maxlen)) {
|
if (unlikely(control->in_ofs + len > control->in_maxlen)) {
|
||||||
/* We're unable to fit it all into the temp buffer */
|
/* We're unable to fit it all into the temp buffer */
|
||||||
if (unlikely(!write_fdin(control))) return -1;
|
if (unlikely(!write_fdin(control)))
|
||||||
if (unlikely(!read_tmpinfile(control, control->fd_in))) return -1;
|
return -1;
|
||||||
|
if (unlikely(!read_tmpinfile(control, control->fd_in)))
|
||||||
|
return -1;
|
||||||
close_tmpinbuf(control);
|
close_tmpinbuf(control);
|
||||||
goto read_fd;
|
goto read_fd;
|
||||||
}
|
}
|
||||||
if (control->in_ofs + len > control->in_len)
|
if (control->in_ofs + len > control->in_len)
|
||||||
if (unlikely(!read_fdin(control, control->in_ofs + len - control->in_len))) return false;
|
if (unlikely(!read_fdin(control, control->in_ofs + len - control->in_len)))
|
||||||
|
return false;
|
||||||
memcpy(buf, control->tmp_inbuf + control->in_ofs, len);
|
memcpy(buf, control->tmp_inbuf + control->in_ofs, len);
|
||||||
control->in_ofs += len;
|
control->in_ofs += len;
|
||||||
return len;
|
return len;
|
||||||
|
|
@ -897,7 +903,8 @@ static int read_seekto(rzip_control *control, struct stream_info *sinfo, i64 pos
|
||||||
|
|
||||||
if (TMP_INBUF) {
|
if (TMP_INBUF) {
|
||||||
if (spos > control->in_len)
|
if (spos > control->in_len)
|
||||||
if (unlikely(!read_fdin(control, spos - control->in_len))) return -1;
|
if (unlikely(!read_fdin(control, spos - control->in_len)))
|
||||||
|
return -1;
|
||||||
control->in_ofs = spos;
|
control->in_ofs = spos;
|
||||||
if (unlikely(spos < 0)) {
|
if (unlikely(spos < 0)) {
|
||||||
print_err("Trying to seek to %lld outside tmp inbuf in read_seekto\n", spos);
|
print_err("Trying to seek to %lld outside tmp inbuf in read_seekto\n", spos);
|
||||||
|
|
@ -1106,7 +1113,8 @@ static bool decrypt_header(rzip_control *control, uchar *head, uchar *c_type,
|
||||||
memcpy(buf + 9, u_len, 8);
|
memcpy(buf + 9, u_len, 8);
|
||||||
memcpy(buf + 17, last_head, 8);
|
memcpy(buf + 17, last_head, 8);
|
||||||
|
|
||||||
if (unlikely(!lrz_decrypt(control, buf, 25, head))) return false;
|
if (unlikely(!lrz_decrypt(control, buf, 25, head)))
|
||||||
|
return false;
|
||||||
|
|
||||||
memcpy(c_type, buf, 1);
|
memcpy(c_type, buf, 1);
|
||||||
memcpy(c_len, buf + 1, 8);
|
memcpy(c_len, buf + 1, 8);
|
||||||
|
|
@ -1279,7 +1287,8 @@ static bool rewrite_encrypted(rzip_control *control, struct stream_info *sinfo,
|
||||||
i64 cur_ofs;
|
i64 cur_ofs;
|
||||||
|
|
||||||
cur_ofs = get_seek(control, sinfo->fd) - sinfo->initial_pos;
|
cur_ofs = get_seek(control, sinfo->fd) - sinfo->initial_pos;
|
||||||
if (unlikely(cur_ofs == -1)) return false;
|
if (unlikely(cur_ofs == -1))
|
||||||
|
return false;
|
||||||
head = malloc(25 + SALT_LEN);
|
head = malloc(25 + SALT_LEN);
|
||||||
if (unlikely(!head))
|
if (unlikely(!head))
|
||||||
fatal_return(("Failed to malloc head in rewrite_encrypted\n"), false);
|
fatal_return(("Failed to malloc head in rewrite_encrypted\n"), false);
|
||||||
|
|
@ -1663,7 +1672,8 @@ fill_another:
|
||||||
sinfo->total_read += header_length;
|
sinfo->total_read += header_length;
|
||||||
|
|
||||||
if (ENCRYPT) {
|
if (ENCRYPT) {
|
||||||
if (unlikely(!decrypt_header(control, enc_head, &c_type, &c_len, &u_len, &last_head))) return -1;
|
if (unlikely(!decrypt_header(control, enc_head, &c_type, &c_len, &u_len, &last_head)))
|
||||||
|
return -1;
|
||||||
if (unlikely(read_buf(control, sinfo->fd, blocksalt, SALT_LEN)))
|
if (unlikely(read_buf(control, sinfo->fd, blocksalt, SALT_LEN)))
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
@ -1684,7 +1694,8 @@ fill_another:
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (ENCRYPT)
|
if (ENCRYPT)
|
||||||
if (unlikely(!lrz_decrypt(control, s_buf, padded_len, blocksalt))) return -1;
|
if (unlikely(!lrz_decrypt(control, s_buf, padded_len, blocksalt)))
|
||||||
|
return -1;
|
||||||
|
|
||||||
ucthread[s->uthread_no].s_buf = s_buf;
|
ucthread[s->uthread_no].s_buf = s_buf;
|
||||||
ucthread[s->uthread_no].c_len = c_len;
|
ucthread[s->uthread_no].c_len = c_len;
|
||||||
|
|
@ -1727,7 +1738,8 @@ out:
|
||||||
unlock_mutex(control, &output_lock);
|
unlock_mutex(control, &output_lock);
|
||||||
|
|
||||||
/* join_pthread here will make it wait till the data is ready */
|
/* join_pthread here will make it wait till the data is ready */
|
||||||
if (unlikely(!join_pthread(control, threads[s->unext_thread], NULL))) return -1;
|
if (unlikely(!join_pthread(control, threads[s->unext_thread], NULL)))
|
||||||
|
return -1;
|
||||||
ucthread[s->unext_thread].busy = 0;
|
ucthread[s->unext_thread].busy = 0;
|
||||||
|
|
||||||
print_maxverbose("Taking decompressed data from thread %ld\n", s->unext_thread);
|
print_maxverbose("Taking decompressed data from thread %ld\n", s->unext_thread);
|
||||||
|
|
@ -1759,7 +1771,8 @@ int write_stream(rzip_control *control, void *ss, int streamno, uchar *p, i64 le
|
||||||
|
|
||||||
/* Flush the buffer every sinfo->bufsize into one thread */
|
/* Flush the buffer every sinfo->bufsize into one thread */
|
||||||
if (sinfo->s[streamno].buflen == sinfo->bufsize)
|
if (sinfo->s[streamno].buflen == sinfo->bufsize)
|
||||||
if (unlikely(!flush_buffer(control, sinfo, streamno))) return -1;
|
if (unlikely(!flush_buffer(control, sinfo, streamno)))
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1803,7 +1816,8 @@ int close_stream_out(rzip_control *control, void *ss)
|
||||||
|
|
||||||
for (i = 0; i < sinfo->num_streams; i++) {
|
for (i = 0; i < sinfo->num_streams; i++) {
|
||||||
if (sinfo->s[i].buflen)
|
if (sinfo->s[i].buflen)
|
||||||
if (unlikely(!clear_buffer(control, sinfo, i, 0))) return -1;
|
if (unlikely(!clear_buffer(control, sinfo, i, 0)))
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ENCRYPT) {
|
if (ENCRYPT) {
|
||||||
|
|
@ -1825,14 +1839,16 @@ int close_stream_out(rzip_control *control, void *ss)
|
||||||
if (!control->sinfo_buckets) {
|
if (!control->sinfo_buckets) {
|
||||||
/* no streams added */
|
/* no streams added */
|
||||||
control->sinfo_queue = calloc(STREAM_BUCKET_SIZE + 1, sizeof(void*));
|
control->sinfo_queue = calloc(STREAM_BUCKET_SIZE + 1, sizeof(void*));
|
||||||
if (!control->sinfo_queue) return -1;
|
if (!control->sinfo_queue)
|
||||||
|
return -1;
|
||||||
control->sinfo_buckets++;
|
control->sinfo_buckets++;
|
||||||
} else if (control->sinfo_idx == STREAM_BUCKET_SIZE * control->sinfo_buckets + 1) {
|
} else if (control->sinfo_idx == STREAM_BUCKET_SIZE * control->sinfo_buckets + 1) {
|
||||||
/* all buckets full, create new bucket */
|
/* all buckets full, create new bucket */
|
||||||
void *tmp;
|
void *tmp;
|
||||||
|
|
||||||
tmp = realloc(control->sinfo_queue, (++control->sinfo_buckets * STREAM_BUCKET_SIZE + 1) * sizeof(void*));
|
tmp = realloc(control->sinfo_queue, (++control->sinfo_buckets * STREAM_BUCKET_SIZE + 1) * sizeof(void*));
|
||||||
if (!tmp) return -1;
|
if (!tmp)
|
||||||
|
return -1;
|
||||||
control->sinfo_queue = tmp;
|
control->sinfo_queue = tmp;
|
||||||
memset(control->sinfo_queue + control->sinfo_idx, 0, ((control->sinfo_buckets * STREAM_BUCKET_SIZE + 1) - control->sinfo_idx) * sizeof(void*));
|
memset(control->sinfo_queue + control->sinfo_idx, 0, ((control->sinfo_buckets * STREAM_BUCKET_SIZE + 1) - control->sinfo_idx) * sizeof(void*));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
5
util.c
5
util.c
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2011 Serge Belyshev
|
Copyright (C) 2011 Serge Belyshev
|
||||||
Copyright (C) 2006-2011 Con Kolivas
|
Copyright (C) 2006-2012 Con Kolivas
|
||||||
Copyright (C) 2008, 2011 Peter Hyman
|
Copyright (C) 2008, 2011 Peter Hyman
|
||||||
Copyright (C) 1998 Andrew Tridgell
|
Copyright (C) 1998 Andrew Tridgell
|
||||||
|
|
||||||
|
|
@ -190,7 +190,8 @@ bool get_rand(rzip_control *control, uchar *buf, int len)
|
||||||
fprintf(control->msgout, "Using configuration file %s\n", homeconf);
|
fprintf(control->msgout, "Using configuration file %s\n", homeconf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fp == NULL) return true;
|
if (fp == NULL)
|
||||||
|
return true;
|
||||||
|
|
||||||
/* if we get here, we have a file. read until no more. */
|
/* if we get here, we have a file. read until no more. */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue