index_decoder.c   index_decoder.c 
skipping to change at line 55 skipping to change at line 55
lzma_vli uncompressed_size; lzma_vli uncompressed_size;
/// Position in integers /// Position in integers
size_t pos; size_t pos;
/// CRC32 of the List of Records field /// CRC32 of the List of Records field
uint32_t crc32; uint32_t crc32;
}; };
static lzma_ret static lzma_ret
index_decode(lzma_coder *coder, lzma_allocator *allocator, index_decode(lzma_coder *coder, const lzma_allocator *allocator,
const uint8_t *restrict in, size_t *restrict in_pos, const uint8_t *restrict in, size_t *restrict in_pos,
size_t in_size, size_t in_size,
uint8_t *restrict out lzma_attribute((__unused__)), uint8_t *restrict out lzma_attribute((__unused__)),
size_t *restrict out_pos lzma_attribute((__unused__)), size_t *restrict out_pos lzma_attribute((__unused__)),
size_t out_size lzma_attribute((__unused__)), size_t out_size lzma_attribute((__unused__)),
lzma_action action lzma_attribute((__unused__))) lzma_action action lzma_attribute((__unused__)))
{ {
// Similar optimization as in index_encoder.c // Similar optimization as in index_encoder.c
const size_t in_start = *in_pos; const size_t in_start = *in_pos;
lzma_ret ret = LZMA_OK; lzma_ret ret = LZMA_OK;
skipping to change at line 207 skipping to change at line 207
out: out:
// Update the CRC32, // Update the CRC32,
coder->crc32 = lzma_crc32(in + in_start, coder->crc32 = lzma_crc32(in + in_start,
*in_pos - in_start, coder->crc32); *in_pos - in_start, coder->crc32);
return ret; return ret;
} }
static void static void
index_decoder_end(lzma_coder *coder, lzma_allocator *allocator) index_decoder_end(lzma_coder *coder, const lzma_allocator *allocator)
{ {
lzma_index_end(coder->index, allocator); lzma_index_end(coder->index, allocator);
lzma_free(coder, allocator); lzma_free(coder, allocator);
return; return;
} }
static lzma_ret static lzma_ret
index_decoder_memconfig(lzma_coder *coder, uint64_t *memusage, index_decoder_memconfig(lzma_coder *coder, uint64_t *memusage,
uint64_t *old_memlimit, uint64_t new_memlimit) uint64_t *old_memlimit, uint64_t new_memlimit)
{ {
skipping to change at line 232 skipping to change at line 232
if (new_memlimit < *memusage) if (new_memlimit < *memusage)
return LZMA_MEMLIMIT_ERROR; return LZMA_MEMLIMIT_ERROR;
coder->memlimit = new_memlimit; coder->memlimit = new_memlimit;
} }
return LZMA_OK; return LZMA_OK;
} }
static lzma_ret static lzma_ret
index_decoder_reset(lzma_coder *coder, lzma_allocator *allocator, index_decoder_reset(lzma_coder *coder, const lzma_allocator *allocator,
lzma_index **i, uint64_t memlimit) lzma_index **i, uint64_t memlimit)
{ {
// Remember the pointer given by the application. We will set it // Remember the pointer given by the application. We will set it
// to point to the decoded Index only if decoding is successful. // to point to the decoded Index only if decoding is successful.
// Before that, keep it NULL so that applications can always safely // Before that, keep it NULL so that applications can always safely
// pass it to lzma_index_end() no matter did decoding succeed or not . // pass it to lzma_index_end() no matter did decoding succeed or not .
coder->index_ptr = i; coder->index_ptr = i;
*i = NULL; *i = NULL;
// We always allocate a new lzma_index. // We always allocate a new lzma_index.
skipping to change at line 258 skipping to change at line 258
coder->sequence = SEQ_INDICATOR; coder->sequence = SEQ_INDICATOR;
coder->memlimit = memlimit; coder->memlimit = memlimit;
coder->count = 0; // Needs to be initialized due to _memconfig(). coder->count = 0; // Needs to be initialized due to _memconfig().
coder->pos = 0; coder->pos = 0;
coder->crc32 = 0; coder->crc32 = 0;
return LZMA_OK; return LZMA_OK;
} }
static lzma_ret static lzma_ret
index_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, index_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
lzma_index **i, uint64_t memlimit) lzma_index **i, uint64_t memlimit)
{ {
lzma_next_coder_init(&index_decoder_init, next, allocator); lzma_next_coder_init(&index_decoder_init, next, allocator);
if (i == NULL || memlimit == 0) if (i == NULL || memlimit == 0)
return LZMA_PROG_ERROR; return LZMA_PROG_ERROR;
if (next->coder == NULL) { if (next->coder == NULL) {
next->coder = lzma_alloc(sizeof(lzma_coder), allocator); next->coder = lzma_alloc(sizeof(lzma_coder), allocator);
if (next->coder == NULL) if (next->coder == NULL)
skipping to change at line 294 skipping to change at line 294
{ {
lzma_next_strm_init(index_decoder_init, strm, i, memlimit); lzma_next_strm_init(index_decoder_init, strm, i, memlimit);
strm->internal->supported_actions[LZMA_RUN] = true; strm->internal->supported_actions[LZMA_RUN] = true;
strm->internal->supported_actions[LZMA_FINISH] = true; strm->internal->supported_actions[LZMA_FINISH] = true;
return LZMA_OK; return LZMA_OK;
} }
extern LZMA_API(lzma_ret) extern LZMA_API(lzma_ret)
lzma_index_buffer_decode( lzma_index_buffer_decode(lzma_index **i, uint64_t *memlimit,
lzma_index **i, uint64_t *memlimit, lzma_allocator *allocato const lzma_allocator *allocator,
r,
const uint8_t *in, size_t *in_pos, size_t in_size) const uint8_t *in, size_t *in_pos, size_t in_size)
{ {
// Sanity checks // Sanity checks
if (i == NULL || memlimit == NULL if (i == NULL || memlimit == NULL
|| in == NULL || in_pos == NULL || *in_pos > in_size ) || in == NULL || in_pos == NULL || *in_pos > in_size )
return LZMA_PROG_ERROR; return LZMA_PROG_ERROR;
// Initialize the decoder. // Initialize the decoder.
lzma_coder coder; lzma_coder coder;
return_if_error(index_decoder_reset(&coder, allocator, i, *memlimit) ); return_if_error(index_decoder_reset(&coder, allocator, i, *memlimit) );
 End of changes. 5 change blocks. 
7 lines changed or deleted 6 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/