… | |
… | |
69 | } |
69 | } |
70 | |
70 | |
71 | /* |
71 | /* |
72 | * Anatomy: an lzf file consists of any number of blocks in the following format: |
72 | * Anatomy: an lzf file consists of any number of blocks in the following format: |
73 | * |
73 | * |
|
|
74 | * \x00 EOF (optional) |
74 | * "ZV\0" 2-byte-usize <uncompressed data> |
75 | * "ZV\0" 2-byte-usize <uncompressed data> |
75 | * "ZV\1" 2-byte-csize 2-byte-usize <compressed data> |
76 | * "ZV\1" 2-byte-csize 2-byte-usize <compressed data> |
76 | * "ZV\2" 4-byte-crc32-0xdebb20e3 (NYI) |
77 | * "ZV\2" 4-byte-crc32-0xdebb20e3 (NYI) |
77 | * |
78 | * |
78 | */ |
79 | */ |
… | |
… | |
134 | u8 buff1[64*1024]; |
135 | u8 buff1[64*1024]; |
135 | u8 buff2[64*1024]; |
136 | u8 buff2[64*1024]; |
136 | u8 header[3+2+2]; |
137 | u8 header[3+2+2]; |
137 | |
138 | |
138 | for(;;) { |
139 | for(;;) { |
139 | if (fread (header, 3+2, 1, stdin) != 1) |
140 | int hdrsize = fread (header, 1, 3+2, stdin); |
|
|
141 | |
|
|
142 | /* check for \0 record */ |
|
|
143 | if (hdrsize) |
|
|
144 | { |
|
|
145 | if (!header[0]) |
|
|
146 | break; |
|
|
147 | else if (hdrsize != 3+2) |
|
|
148 | { |
|
|
149 | if (feof (stdin)) |
|
|
150 | fprintf (stderr, "decompress: invalid stream - short header\n"); |
|
|
151 | else |
|
|
152 | perror ("decompress"); |
|
|
153 | |
|
|
154 | exit (1); |
|
|
155 | } |
|
|
156 | } |
|
|
157 | else |
140 | { |
158 | { |
141 | if (feof (stdin)) |
159 | if (feof (stdin)) |
142 | break; |
160 | break; |
143 | else |
161 | else |
144 | { |
162 | { |