mirror of
https://github.com/ckolivas/lrzip.git
synced 2025-12-06 07:12:00 +01:00
Update magic header info. It turns out I can't add.
Fix fileinfo to be able to read version 0.6x files.
This commit is contained in:
parent
fe68b9a3f7
commit
6642955375
|
|
@ -5,8 +5,8 @@ Con Kolivas
|
||||||
Byte Content
|
Byte Content
|
||||||
0-38 Magic
|
0-38 Magic
|
||||||
---
|
---
|
||||||
39->107 Rzip chunk data
|
39->98 Rzip chunk data
|
||||||
108+ Data blocks
|
99+ Data blocks
|
||||||
--- repeat
|
--- repeat
|
||||||
(end-MD5_DIGEST_SIZE)->(end) md5 hash
|
(end-MD5_DIGEST_SIZE)->(end) md5 hash
|
||||||
|
|
||||||
|
|
|
||||||
23
lrzip.c
23
lrzip.c
|
|
@ -439,7 +439,7 @@ void get_header_info(rzip_control *control, int fd_in, uchar *ctype, i64 *c_len,
|
||||||
|
|
||||||
void get_fileinfo(rzip_control *control)
|
void get_fileinfo(rzip_control *control)
|
||||||
{
|
{
|
||||||
i64 expected_size, infile_size;
|
i64 expected_size, infile_size, chunk_size;
|
||||||
int seekspot, fd_in;
|
int seekspot, fd_in;
|
||||||
char chunk_byte = 0;
|
char chunk_byte = 0;
|
||||||
long double cratio;
|
long double cratio;
|
||||||
|
|
@ -480,6 +480,12 @@ void get_fileinfo(rzip_control *control)
|
||||||
if (control->major_version == 0 && control->minor_version > 4) {
|
if (control->major_version == 0 && control->minor_version > 4) {
|
||||||
if (unlikely(read(fd_in, &chunk_byte, 1) != 1))
|
if (unlikely(read(fd_in, &chunk_byte, 1) != 1))
|
||||||
fatal("Failed to read chunk_byte in get_fileinfo\n");
|
fatal("Failed to read chunk_byte in get_fileinfo\n");
|
||||||
|
if (control->major_version == 0 && control->minor_version > 5) {
|
||||||
|
if (unlikely(read(fd_in, &control->eof, 1) != 1))
|
||||||
|
fatal("Failed to read eof in get_fileinfo\n");
|
||||||
|
if (unlikely(read(fd_in, &chunk_size, 8) != 8))
|
||||||
|
fatal("Failed to read chunk_size in get_fileinfo\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Version < 0.4 had different file format */
|
/* Version < 0.4 had different file format */
|
||||||
|
|
@ -489,6 +495,8 @@ void get_fileinfo(rzip_control *control)
|
||||||
seekspot = 74;
|
seekspot = 74;
|
||||||
else if (control->major_version == 0 && control->minor_version == 5)
|
else if (control->major_version == 0 && control->minor_version == 5)
|
||||||
seekspot = 75;
|
seekspot = 75;
|
||||||
|
else
|
||||||
|
seekspot = 99;
|
||||||
if (unlikely(lseek(fd_in, seekspot, SEEK_SET) == -1))
|
if (unlikely(lseek(fd_in, seekspot, SEEK_SET) == -1))
|
||||||
fatal("Failed to lseek in get_fileinfo\n");
|
fatal("Failed to lseek in get_fileinfo\n");
|
||||||
|
|
||||||
|
|
@ -537,7 +545,7 @@ void get_fileinfo(rzip_control *control)
|
||||||
print_output("CRC32 used for integrity testing\n");
|
print_output("CRC32 used for integrity testing\n");
|
||||||
|
|
||||||
if (VERBOSE || MAX_VERBOSE) {
|
if (VERBOSE || MAX_VERBOSE) {
|
||||||
i64 u_len, c_len, last_head, utotal = 0, ctotal = 0, ofs = 25,
|
i64 u_len, c_len, last_head, utotal = 0, ctotal = 0, ofs = 49,
|
||||||
stream_head[2];
|
stream_head[2];
|
||||||
int header_length = 25, stream = 0, chunk = 0;
|
int header_length = 25, stream = 0, chunk = 0;
|
||||||
|
|
||||||
|
|
@ -547,6 +555,8 @@ void get_fileinfo(rzip_control *control)
|
||||||
}
|
}
|
||||||
if (control->major_version == 0 && control->minor_version == 4)
|
if (control->major_version == 0 && control->minor_version == 4)
|
||||||
ofs = 24;
|
ofs = 24;
|
||||||
|
if (control->major_version == 0 && control->minor_version == 5)
|
||||||
|
ofs = 25;
|
||||||
next_chunk:
|
next_chunk:
|
||||||
stream = 0;
|
stream = 0;
|
||||||
stream_head[0] = 0;
|
stream_head[0] = 0;
|
||||||
|
|
@ -555,6 +565,8 @@ next_chunk:
|
||||||
print_output("Rzip chunk %d:\n", ++chunk);
|
print_output("Rzip chunk %d:\n", ++chunk);
|
||||||
if (chunk_byte)
|
if (chunk_byte)
|
||||||
print_verbose("Chunk byte width: %d\n", chunk_byte);
|
print_verbose("Chunk byte width: %d\n", chunk_byte);
|
||||||
|
if (chunk_size)
|
||||||
|
print_verbose("Chunk size: %lld\n", chunk_size);
|
||||||
while (stream < NUM_STREAMS) {
|
while (stream < NUM_STREAMS) {
|
||||||
int block = 1;
|
int block = 1;
|
||||||
|
|
||||||
|
|
@ -606,6 +618,13 @@ next_chunk:
|
||||||
if (unlikely(read(fd_in, &chunk_byte, 1) != 1))
|
if (unlikely(read(fd_in, &chunk_byte, 1) != 1))
|
||||||
fatal("Failed to read chunk_byte in get_fileinfo\n");
|
fatal("Failed to read chunk_byte in get_fileinfo\n");
|
||||||
ofs++;
|
ofs++;
|
||||||
|
if (control->major_version == 0 && control->minor_version > 5) {
|
||||||
|
if (unlikely(read(fd_in, &control->eof, 1) != 1))
|
||||||
|
fatal("Failed to read eof in get_fileinfo\n");
|
||||||
|
if (unlikely(read(fd_in, &chunk_size, 8) != 8))
|
||||||
|
fatal("Failed to read chunk_size in get_fileinfo\n");
|
||||||
|
ofs += 9;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (ofs < infile_size - (HAS_MD5 ? MD5_DIGEST_SIZE : 0))
|
if (ofs < infile_size - (HAS_MD5 ? MD5_DIGEST_SIZE : 0))
|
||||||
goto next_chunk;
|
goto next_chunk;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue