Update magic header info.

Move offset check to after reading chunk width.
Realloc instead of free and malloc.
This commit is contained in:
Con Kolivas 2010-11-01 15:27:35 +11:00
parent 1ed2ce423f
commit 49336a5e87
4 changed files with 39 additions and 12 deletions

View file

@ -1,3 +1,29 @@
lrzip-0.50+ file header format
November 2010
Con Kolivas
Byte Content
0-3 LRZI
4 LRZIP Major Version Number
5 LRZIP Minor Version Number
6-14 Source File Size
16-20 LZMA Properties Encoded (lc,lp,pb,fb, and dictionary size)
21-22 not used
23-48 Stream 1 header data
49-74 Stream 2 header data
Block Data:
Byte:
0 Compressed data type
1-8 Compressed data length
9-16 Uncompressed data length
17-24 Next block head
25 Data offsets byte width
26+ Data
End:
0-1 crc data
lrzip-0.40+ file header format
November 2009
Con Kolivas

View file

@ -159,13 +159,6 @@ static i64 runzip_chunk(int fd_in, int fd_out, int fd_hist, i64 expected_size, i
prog_tsize = (long double)expected_size / (long double)divisor[divisor_index];
ofs = lseek(fd_in, 0, SEEK_CUR);
if (ofs == -1)
fatal("Failed to seek input file in runzip_fd\n");
if (fstat(fd_in, &st) != 0 || st.st_size-ofs == 0)
return 0;
/* Determine the chunk_byte width size. Versions < 0.4 used 4
* bytes for all offsets, version 0.4 used 8 bytes. Versions 0.5+ use
* a variable number of bytes depending on chunk size.*/
@ -178,7 +171,16 @@ static i64 runzip_chunk(int fd_in, int fd_out, int fd_hist, i64 expected_size, i
if (read(fd_in, &chunk_bytes, 1) != 1)
fatal("Failed to read chunk_bytes size in runzip_chunk\n");
}
print_maxverbose("\nExpected size: %lld\nChunk byte width: %d\n", expected_size, chunk_bytes);
if (!tally)
print_maxverbose("\nExpected size: %lld", expected_size);
print_maxverbose("\nChunk byte width: %d\n", chunk_bytes);
ofs = lseek(fd_in, 0, SEEK_CUR);
if (ofs == -1)
fatal("Failed to seek input file in runzip_fd\n");
if (fstat(fd_in, &st) != 0 || st.st_size-ofs == 0)
return 0;
ss = open_stream_in(fd_in, NUM_STREAMS);
if (!ss)

2
rzip.c
View file

@ -629,7 +629,7 @@ void rzip_fd(int fd_in, int fd_out)
chunk = len;
limit = chunk;
st->chunk_size = chunk;
print_maxverbose("Chunk size: %lld\n\n", chunk);
print_maxverbose("Chunk size: %lld\n", chunk);
/* Determine the chunk byte width and write it to the file
* This allows archives of different chunk sizes to have

View file

@ -796,10 +796,9 @@ static int flush_buffer(struct stream_info *sinfo, int stream)
sinfo->s[stream].buflen = 0;
free(sinfo->s[stream].buf);
sinfo->s[stream].buf = malloc(sinfo->bufsize);
sinfo->s[stream].buf = realloc(sinfo->s[stream].buf, sinfo->bufsize);
if (!sinfo->s[stream].buf)
fatal("Failed to malloc in flush_buffer\n");
fatal("Failed to realloc in flush_buffer\n");
return 0;
}