OLD | NEW |
1 /////////////////////////////////////////////////////////////////////////////// | 1 /////////////////////////////////////////////////////////////////////////////// |
2 // | 2 // |
3 /// \file index_decoder.c | 3 /// \file index_decoder.c |
4 /// \brief Decodes the Index field | 4 /// \brief Decodes the Index field |
5 // | 5 // |
6 // Author: Lasse Collin | 6 // Author: Lasse Collin |
7 // | 7 // |
8 // This file has been put into the public domain. | 8 // This file has been put into the public domain. |
9 // You can do whatever you want with this file. | 9 // You can do whatever you want with this file. |
10 // | 10 // |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 size_t pos; | 49 size_t pos; |
50 | 50 |
51 /// CRC32 of the List of Records field | 51 /// CRC32 of the List of Records field |
52 uint32_t crc32; | 52 uint32_t crc32; |
53 }; | 53 }; |
54 | 54 |
55 | 55 |
56 static lzma_ret | 56 static lzma_ret |
57 index_decode(lzma_coder *coder, lzma_allocator *allocator, | 57 index_decode(lzma_coder *coder, lzma_allocator *allocator, |
58 const uint8_t *restrict in, size_t *restrict in_pos, | 58 const uint8_t *restrict in, size_t *restrict in_pos, |
59 » » size_t in_size, uint8_t *restrict out lzma_attribute((unused)), | 59 » » size_t in_size, |
60 » » size_t *restrict out_pos lzma_attribute((unused)), | 60 » » uint8_t *restrict out lzma_attribute((__unused__)), |
61 » » size_t out_size lzma_attribute((unused)), | 61 » » size_t *restrict out_pos lzma_attribute((__unused__)), |
62 » » lzma_action action lzma_attribute((unused))) | 62 » » size_t out_size lzma_attribute((__unused__)), |
| 63 » » lzma_action action lzma_attribute((__unused__))) |
63 { | 64 { |
64 // Similar optimization as in index_encoder.c | 65 // Similar optimization as in index_encoder.c |
65 const size_t in_start = *in_pos; | 66 const size_t in_start = *in_pos; |
66 lzma_ret ret = LZMA_OK; | 67 lzma_ret ret = LZMA_OK; |
67 | 68 |
68 while (*in_pos < in_size) | 69 while (*in_pos < in_size) |
69 switch (coder->sequence) { | 70 switch (coder->sequence) { |
70 case SEQ_INDICATOR: | 71 case SEQ_INDICATOR: |
71 // Return LZMA_DATA_ERROR instead of e.g. LZMA_PROG_ERROR or | 72 // Return LZMA_DATA_ERROR instead of e.g. LZMA_PROG_ERROR or |
72 // LZMA_FORMAT_ERROR, because a typical usage case for Index | 73 // LZMA_FORMAT_ERROR, because a typical usage case for Index |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 return index_decoder_reset(next->coder, allocator, i, memlimit); | 285 return index_decoder_reset(next->coder, allocator, i, memlimit); |
285 } | 286 } |
286 | 287 |
287 | 288 |
288 extern LZMA_API(lzma_ret) | 289 extern LZMA_API(lzma_ret) |
289 lzma_index_decoder(lzma_stream *strm, lzma_index **i, uint64_t memlimit) | 290 lzma_index_decoder(lzma_stream *strm, lzma_index **i, uint64_t memlimit) |
290 { | 291 { |
291 lzma_next_strm_init(index_decoder_init, strm, i, memlimit); | 292 lzma_next_strm_init(index_decoder_init, strm, i, memlimit); |
292 | 293 |
293 strm->internal->supported_actions[LZMA_RUN] = true; | 294 strm->internal->supported_actions[LZMA_RUN] = true; |
| 295 strm->internal->supported_actions[LZMA_FINISH] = true; |
294 | 296 |
295 return LZMA_OK; | 297 return LZMA_OK; |
296 } | 298 } |
297 | 299 |
298 | 300 |
299 extern LZMA_API(lzma_ret) | 301 extern LZMA_API(lzma_ret) |
300 lzma_index_buffer_decode( | 302 lzma_index_buffer_decode( |
301 lzma_index **i, uint64_t *memlimit, lzma_allocator *allocator, | 303 lzma_index **i, uint64_t *memlimit, lzma_allocator *allocator, |
302 const uint8_t *in, size_t *in_pos, size_t in_size) | 304 const uint8_t *in, size_t *in_pos, size_t in_size) |
303 { | 305 { |
(...skipping 30 matching lines...) Expand all Loading... |
334 | 336 |
335 } else if (ret == LZMA_MEMLIMIT_ERROR) { | 337 } else if (ret == LZMA_MEMLIMIT_ERROR) { |
336 // Tell the caller how much memory would have | 338 // Tell the caller how much memory would have |
337 // been needed. | 339 // been needed. |
338 *memlimit = lzma_index_memusage(1, coder.count); | 340 *memlimit = lzma_index_memusage(1, coder.count); |
339 } | 341 } |
340 } | 342 } |
341 | 343 |
342 return ret; | 344 return ret; |
343 } | 345 } |
OLD | NEW |