Lines Matching refs:coder

89 fill_temp(lzma_file_info_coder *coder, const uint8_t *restrict in,  in fill_temp()  argument
92 coder->file_cur_pos += lzma_bufcpy(in, in_pos, in_size, in fill_temp()
93 coder->temp, &coder->temp_pos, coder->temp_size); in fill_temp()
94 return coder->temp_pos < coder->temp_size; in fill_temp()
107 seek_to_pos(lzma_file_info_coder *coder, uint64_t target_pos, in seek_to_pos() argument
112 assert(coder->file_size - coder->file_cur_pos >= in_size - *in_pos); in seek_to_pos()
114 const uint64_t pos_min = coder->file_cur_pos - (*in_pos - in_start); in seek_to_pos()
115 const uint64_t pos_max = coder->file_cur_pos + (in_size - *in_pos); in seek_to_pos()
124 *in_pos += (size_t)(target_pos - coder->file_cur_pos); in seek_to_pos()
128 *coder->external_seek_pos = target_pos; in seek_to_pos()
142 coder->file_cur_pos = target_pos; in seek_to_pos()
158 reverse_seek(lzma_file_info_coder *coder, in reverse_seek() argument
164 if (coder->file_target_pos < 2 * LZMA_STREAM_HEADER_SIZE) in reverse_seek()
167 coder->temp_pos = 0; in reverse_seek()
175 if (coder->file_target_pos - LZMA_STREAM_HEADER_SIZE in reverse_seek()
176 < sizeof(coder->temp)) in reverse_seek()
177 coder->temp_size = (size_t)(coder->file_target_pos in reverse_seek()
180 coder->temp_size = sizeof(coder->temp); in reverse_seek()
185 assert(coder->temp_size >= LZMA_STREAM_HEADER_SIZE); in reverse_seek()
187 if (seek_to_pos(coder, coder->file_target_pos - coder->temp_size, in reverse_seek()
227 decode_index(lzma_file_info_coder *coder, const lzma_allocator *allocator, in decode_index() argument
233 const lzma_ret ret = coder->index_decoder.code( in decode_index()
234 coder->index_decoder.coder, in decode_index()
238 coder->index_remaining -= *in_pos - in_start; in decode_index()
241 coder->file_cur_pos += *in_pos - in_start; in decode_index()
256 lzma_file_info_coder *coder = coder_ptr; in file_info_decode() local
261 assert(coder->file_size >= coder->file_cur_pos); in file_info_decode()
262 if (coder->file_size - coder->file_cur_pos < in_size - in_start) in file_info_decode()
264 + (size_t)(coder->file_size - coder->file_cur_pos); in file_info_decode()
267 switch (coder->sequence) { in file_info_decode()
276 if (coder->file_size < LZMA_STREAM_HEADER_SIZE) in file_info_decode()
280 if (fill_temp(coder, in, in_pos, in_size)) in file_info_decode()
287 &coder->first_header_flags, coder->temp)); in file_info_decode()
295 if (coder->file_size > LZMA_VLI_MAX || (coder->file_size & 3)) in file_info_decode()
300 coder->file_target_pos = coder->file_size; in file_info_decode()
304 coder->sequence = SEQ_PADDING_DECODE; in file_info_decode()
306 coder, in_start, in_pos, in_size)); in file_info_decode()
312 if (fill_temp(coder, in, in_pos, in_size)) in file_info_decode()
318 coder->temp, coder->temp_size); in file_info_decode()
319 coder->stream_padding += new_padding; in file_info_decode()
325 coder->file_target_pos -= new_padding; in file_info_decode()
327 if (new_padding == coder->temp_size) { in file_info_decode()
330 coder->sequence = SEQ_PADDING_SEEK; in file_info_decode()
335 if (coder->stream_padding & 3) in file_info_decode()
338 coder->sequence = SEQ_FOOTER; in file_info_decode()
341 coder->temp_size -= new_padding; in file_info_decode()
342 coder->temp_pos = coder->temp_size; in file_info_decode()
354 if (coder->temp_size < LZMA_STREAM_HEADER_SIZE) in file_info_decode()
356 coder, in_start, in_pos, in_size)); in file_info_decode()
365 if (fill_temp(coder, in, in_pos, in_size)) in file_info_decode()
372 coder->file_target_pos -= LZMA_STREAM_HEADER_SIZE; in file_info_decode()
373 coder->temp_size -= LZMA_STREAM_HEADER_SIZE; in file_info_decode()
377 &coder->footer_flags, in file_info_decode()
378 coder->temp + coder->temp_size))); in file_info_decode()
388 if (coder->file_target_pos < coder->footer_flags.backward_size in file_info_decode()
393 coder->file_target_pos -= coder->footer_flags.backward_size; in file_info_decode()
394 coder->sequence = SEQ_INDEX_INIT; in file_info_decode()
398 if (coder->temp_size >= coder->footer_flags.backward_size) { in file_info_decode()
401 coder->temp_pos = coder->temp_size in file_info_decode()
402 - coder->footer_flags.backward_size; in file_info_decode()
406 coder->temp_pos = 0; in file_info_decode()
407 coder->temp_size = 0; in file_info_decode()
410 if (seek_to_pos(coder, coder->file_target_pos, in file_info_decode()
430 if (coder->combined_index != NULL) { in file_info_decode()
431 memused = lzma_index_memused(coder->combined_index); in file_info_decode()
432 assert(memused <= coder->memlimit); in file_info_decode()
433 if (memused > coder->memlimit) // Extra sanity check in file_info_decode()
439 &coder->index_decoder, allocator, in file_info_decode()
440 &coder->this_index, in file_info_decode()
441 coder->memlimit - memused)); in file_info_decode()
443 coder->index_remaining = coder->footer_flags.backward_size; in file_info_decode()
444 coder->sequence = SEQ_INDEX_DECODE; in file_info_decode()
454 if (coder->temp_size != 0) { in file_info_decode()
455 assert(coder->temp_size - coder->temp_pos in file_info_decode()
456 == coder->index_remaining); in file_info_decode()
457 ret = decode_index(coder, allocator, coder->temp, in file_info_decode()
458 &coder->temp_pos, coder->temp_size, in file_info_decode()
464 if (in_size - *in_pos > coder->index_remaining) in file_info_decode()
466 + (size_t)(coder->index_remaining); in file_info_decode()
468 ret = decode_index(coder, allocator, in file_info_decode()
477 if (coder->index_remaining == 0) in file_info_decode()
484 assert(coder->temp_size == 0); in file_info_decode()
492 if (coder->index_remaining != 0) in file_info_decode()
507 = lzma_index_total_size(coder->this_index) in file_info_decode()
516 if (coder->file_target_pos < seek_amount) in file_info_decode()
520 coder->file_target_pos -= seek_amount; in file_info_decode()
522 if (coder->file_target_pos == 0) { in file_info_decode()
527 coder->header_flags = coder->first_header_flags; in file_info_decode()
528 coder->sequence = SEQ_HEADER_COMPARE; in file_info_decode()
532 coder->sequence = SEQ_HEADER_DECODE; in file_info_decode()
536 coder->file_target_pos += LZMA_STREAM_HEADER_SIZE; in file_info_decode()
542 assert(coder->temp_size == 0 || coder->temp_size in file_info_decode()
543 >= coder->footer_flags.backward_size); in file_info_decode()
553 if (coder->temp_size != 0 && coder->temp_size in file_info_decode()
554 - coder->footer_flags.backward_size in file_info_decode()
560 coder->temp_pos = coder->temp_size in file_info_decode()
561 - coder->footer_flags.backward_size in file_info_decode()
564 coder->temp_size = coder->temp_pos; in file_info_decode()
571 return_if_error(reverse_seek(coder, in file_info_decode()
582 if (fill_temp(coder, in, in_pos, in_size)) in file_info_decode()
586 coder->file_target_pos -= LZMA_STREAM_HEADER_SIZE; in file_info_decode()
587 coder->temp_size -= LZMA_STREAM_HEADER_SIZE; in file_info_decode()
588 coder->temp_pos = coder->temp_size; in file_info_decode()
592 &coder->header_flags, in file_info_decode()
593 coder->temp + coder->temp_size))); in file_info_decode()
595 coder->sequence = SEQ_HEADER_COMPARE; in file_info_decode()
602 &coder->header_flags, &coder->footer_flags)); in file_info_decode()
607 if (lzma_index_stream_flags(coder->this_index, in file_info_decode()
608 &coder->footer_flags) != LZMA_OK) in file_info_decode()
613 if (lzma_index_stream_padding(coder->this_index, in file_info_decode()
614 coder->stream_padding) != LZMA_OK) in file_info_decode()
618 coder->stream_padding = 0; in file_info_decode()
621 if (coder->combined_index != NULL) in file_info_decode()
622 return_if_error(lzma_index_cat(coder->this_index, in file_info_decode()
623 coder->combined_index, allocator)); in file_info_decode()
625 coder->combined_index = coder->this_index; in file_info_decode()
626 coder->this_index = NULL; in file_info_decode()
630 if (coder->file_target_pos == 0) { in file_info_decode()
633 assert(lzma_index_file_size(coder->combined_index) in file_info_decode()
634 == coder->file_size); in file_info_decode()
638 *coder->dest_index = coder->combined_index; in file_info_decode()
639 coder->combined_index = NULL; in file_info_decode()
658 coder->sequence = coder->temp_size > 0 in file_info_decode()
673 lzma_file_info_coder *coder = coder_ptr; in file_info_decoder_memconfig() local
695 if (coder->combined_index != NULL) in file_info_decoder_memconfig()
697 coder->combined_index); in file_info_decoder_memconfig()
700 if (coder->this_index != NULL) { in file_info_decoder_memconfig()
702 this_index_memusage = lzma_index_memused(coder->this_index); in file_info_decoder_memconfig()
704 } else if (coder->sequence == SEQ_INDEX_DECODE) { in file_info_decoder_memconfig()
712 if (coder->index_decoder.memconfig(coder->index_decoder.coder, in file_info_decoder_memconfig()
729 *old_memlimit = coder->memlimit; in file_info_decoder_memconfig()
738 if (coder->this_index == NULL in file_info_decoder_memconfig()
739 && coder->sequence == SEQ_INDEX_DECODE) { in file_info_decoder_memconfig()
749 if (coder->index_decoder.memconfig( in file_info_decoder_memconfig()
750 coder->index_decoder.coder, in file_info_decoder_memconfig()
758 coder->memlimit = new_memlimit; in file_info_decoder_memconfig()
768 lzma_file_info_coder *coder = coder_ptr; in file_info_decoder_end() local
770 lzma_next_end(&coder->index_decoder, allocator); in file_info_decoder_end()
771 lzma_index_end(coder->this_index, allocator); in file_info_decoder_end()
772 lzma_index_end(coder->combined_index, allocator); in file_info_decoder_end()
774 lzma_free(coder, allocator); in file_info_decoder_end()
790 lzma_file_info_coder *coder = next->coder; in lzma_file_info_decoder_init() local
791 if (coder == NULL) { in lzma_file_info_decoder_init()
792 coder = lzma_alloc(sizeof(lzma_file_info_coder), allocator); in lzma_file_info_decoder_init()
793 if (coder == NULL) in lzma_file_info_decoder_init()
796 next->coder = coder; in lzma_file_info_decoder_init()
801 coder->index_decoder = LZMA_NEXT_CODER_INIT; in lzma_file_info_decoder_init()
802 coder->this_index = NULL; in lzma_file_info_decoder_init()
803 coder->combined_index = NULL; in lzma_file_info_decoder_init()
806 coder->sequence = SEQ_MAGIC_BYTES; in lzma_file_info_decoder_init()
807 coder->file_cur_pos = 0; in lzma_file_info_decoder_init()
808 coder->file_target_pos = 0; in lzma_file_info_decoder_init()
809 coder->file_size = file_size; in lzma_file_info_decoder_init()
811 lzma_index_end(coder->this_index, allocator); in lzma_file_info_decoder_init()
812 coder->this_index = NULL; in lzma_file_info_decoder_init()
814 lzma_index_end(coder->combined_index, allocator); in lzma_file_info_decoder_init()
815 coder->combined_index = NULL; in lzma_file_info_decoder_init()
817 coder->stream_padding = 0; in lzma_file_info_decoder_init()
819 coder->dest_index = dest_index; in lzma_file_info_decoder_init()
820 coder->external_seek_pos = seek_pos; in lzma_file_info_decoder_init()
824 coder->memlimit = my_max(1, memlimit); in lzma_file_info_decoder_init()
827 coder->temp_pos = 0; in lzma_file_info_decoder_init()
828 coder->temp_size = LZMA_STREAM_HEADER_SIZE; in lzma_file_info_decoder_init()