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()
305 coder->sequence = SEQ_PADDING_DECODE; in file_info_decode()
307 coder, in_start, in_pos, in_size)); in file_info_decode()
314 if (fill_temp(coder, in, in_pos, in_size)) in file_info_decode()
320 coder->temp, coder->temp_size); in file_info_decode()
321 coder->stream_padding += new_padding; in file_info_decode()
327 coder->file_target_pos -= new_padding; in file_info_decode()
329 if (new_padding == coder->temp_size) { in file_info_decode()
332 coder->sequence = SEQ_PADDING_SEEK; in file_info_decode()
337 if (coder->stream_padding & 3) in file_info_decode()
340 coder->sequence = SEQ_FOOTER; in file_info_decode()
343 coder->temp_size -= new_padding; in file_info_decode()
344 coder->temp_pos = coder->temp_size; in file_info_decode()
356 if (coder->temp_size < LZMA_STREAM_HEADER_SIZE) in file_info_decode()
358 coder, in_start, in_pos, in_size)); in file_info_decode()
367 if (fill_temp(coder, in, in_pos, in_size)) in file_info_decode()
374 coder->file_target_pos -= LZMA_STREAM_HEADER_SIZE; in file_info_decode()
375 coder->temp_size -= LZMA_STREAM_HEADER_SIZE; in file_info_decode()
379 &coder->footer_flags, in file_info_decode()
380 coder->temp + coder->temp_size))); in file_info_decode()
390 if (coder->file_target_pos < coder->footer_flags.backward_size in file_info_decode()
395 coder->file_target_pos -= coder->footer_flags.backward_size; in file_info_decode()
396 coder->sequence = SEQ_INDEX_INIT; in file_info_decode()
400 if (coder->temp_size >= coder->footer_flags.backward_size) { in file_info_decode()
403 coder->temp_pos = coder->temp_size in file_info_decode()
404 - coder->footer_flags.backward_size; in file_info_decode()
408 coder->temp_pos = 0; in file_info_decode()
409 coder->temp_size = 0; in file_info_decode()
412 if (seek_to_pos(coder, coder->file_target_pos, in file_info_decode()
432 if (coder->combined_index != NULL) { in file_info_decode()
433 memused = lzma_index_memused(coder->combined_index); in file_info_decode()
434 assert(memused <= coder->memlimit); in file_info_decode()
435 if (memused > coder->memlimit) // Extra sanity check in file_info_decode()
441 &coder->index_decoder, allocator, in file_info_decode()
442 &coder->this_index, in file_info_decode()
443 coder->memlimit - memused)); in file_info_decode()
445 coder->index_remaining = coder->footer_flags.backward_size; in file_info_decode()
446 coder->sequence = SEQ_INDEX_DECODE; in file_info_decode()
457 if (coder->temp_size != 0) { in file_info_decode()
458 assert(coder->temp_size - coder->temp_pos in file_info_decode()
459 == coder->index_remaining); in file_info_decode()
460 ret = decode_index(coder, allocator, coder->temp, in file_info_decode()
461 &coder->temp_pos, coder->temp_size, in file_info_decode()
467 if (in_size - *in_pos > coder->index_remaining) in file_info_decode()
469 + (size_t)(coder->index_remaining); in file_info_decode()
471 ret = decode_index(coder, allocator, in file_info_decode()
480 if (coder->index_remaining == 0) in file_info_decode()
487 assert(coder->temp_size == 0); in file_info_decode()
495 if (coder->index_remaining != 0) in file_info_decode()
510 = lzma_index_total_size(coder->this_index) in file_info_decode()
519 if (coder->file_target_pos < seek_amount) in file_info_decode()
523 coder->file_target_pos -= seek_amount; in file_info_decode()
525 if (coder->file_target_pos == 0) { in file_info_decode()
530 coder->header_flags = coder->first_header_flags; in file_info_decode()
531 coder->sequence = SEQ_HEADER_COMPARE; in file_info_decode()
535 coder->sequence = SEQ_HEADER_DECODE; in file_info_decode()
539 coder->file_target_pos += LZMA_STREAM_HEADER_SIZE; in file_info_decode()
545 assert(coder->temp_size == 0 || coder->temp_size in file_info_decode()
546 >= coder->footer_flags.backward_size); in file_info_decode()
556 if (coder->temp_size != 0 && coder->temp_size in file_info_decode()
557 - coder->footer_flags.backward_size in file_info_decode()
563 coder->temp_pos = coder->temp_size in file_info_decode()
564 - coder->footer_flags.backward_size in file_info_decode()
567 coder->temp_size = coder->temp_pos; in file_info_decode()
574 return_if_error(reverse_seek(coder, in file_info_decode()
585 if (fill_temp(coder, in, in_pos, in_size)) in file_info_decode()
589 coder->file_target_pos -= LZMA_STREAM_HEADER_SIZE; in file_info_decode()
590 coder->temp_size -= LZMA_STREAM_HEADER_SIZE; in file_info_decode()
591 coder->temp_pos = coder->temp_size; in file_info_decode()
595 &coder->header_flags, in file_info_decode()
596 coder->temp + coder->temp_size))); in file_info_decode()
598 coder->sequence = SEQ_HEADER_COMPARE; in file_info_decode()
606 &coder->header_flags, &coder->footer_flags)); in file_info_decode()
611 if (lzma_index_stream_flags(coder->this_index, in file_info_decode()
612 &coder->footer_flags) != LZMA_OK) in file_info_decode()
617 if (lzma_index_stream_padding(coder->this_index, in file_info_decode()
618 coder->stream_padding) != LZMA_OK) in file_info_decode()
622 coder->stream_padding = 0; in file_info_decode()
625 if (coder->combined_index != NULL) in file_info_decode()
626 return_if_error(lzma_index_cat(coder->this_index, in file_info_decode()
627 coder->combined_index, allocator)); in file_info_decode()
629 coder->combined_index = coder->this_index; in file_info_decode()
630 coder->this_index = NULL; in file_info_decode()
634 if (coder->file_target_pos == 0) { in file_info_decode()
637 assert(lzma_index_file_size(coder->combined_index) in file_info_decode()
638 == coder->file_size); in file_info_decode()
642 *coder->dest_index = coder->combined_index; in file_info_decode()
643 coder->combined_index = NULL; in file_info_decode()
662 coder->sequence = coder->temp_size > 0 in file_info_decode()
677 lzma_file_info_coder *coder = coder_ptr; in file_info_decoder_memconfig() local
699 if (coder->combined_index != NULL) in file_info_decoder_memconfig()
701 coder->combined_index); in file_info_decoder_memconfig()
704 if (coder->this_index != NULL) { in file_info_decoder_memconfig()
706 this_index_memusage = lzma_index_memused(coder->this_index); in file_info_decoder_memconfig()
708 } else if (coder->sequence == SEQ_INDEX_DECODE) { in file_info_decoder_memconfig()
716 if (coder->index_decoder.memconfig(coder->index_decoder.coder, in file_info_decoder_memconfig()
733 *old_memlimit = coder->memlimit; in file_info_decoder_memconfig()
742 if (coder->this_index == NULL in file_info_decoder_memconfig()
743 && coder->sequence == SEQ_INDEX_DECODE) { in file_info_decoder_memconfig()
753 if (coder->index_decoder.memconfig( in file_info_decoder_memconfig()
754 coder->index_decoder.coder, in file_info_decoder_memconfig()
762 coder->memlimit = new_memlimit; in file_info_decoder_memconfig()
772 lzma_file_info_coder *coder = coder_ptr; in file_info_decoder_end() local
774 lzma_next_end(&coder->index_decoder, allocator); in file_info_decoder_end()
775 lzma_index_end(coder->this_index, allocator); in file_info_decoder_end()
776 lzma_index_end(coder->combined_index, allocator); in file_info_decoder_end()
778 lzma_free(coder, allocator); in file_info_decoder_end()
794 lzma_file_info_coder *coder = next->coder; in lzma_file_info_decoder_init() local
795 if (coder == NULL) { in lzma_file_info_decoder_init()
796 coder = lzma_alloc(sizeof(lzma_file_info_coder), allocator); in lzma_file_info_decoder_init()
797 if (coder == NULL) in lzma_file_info_decoder_init()
800 next->coder = coder; in lzma_file_info_decoder_init()
805 coder->index_decoder = LZMA_NEXT_CODER_INIT; in lzma_file_info_decoder_init()
806 coder->this_index = NULL; in lzma_file_info_decoder_init()
807 coder->combined_index = NULL; in lzma_file_info_decoder_init()
810 coder->sequence = SEQ_MAGIC_BYTES; in lzma_file_info_decoder_init()
811 coder->file_cur_pos = 0; in lzma_file_info_decoder_init()
812 coder->file_target_pos = 0; in lzma_file_info_decoder_init()
813 coder->file_size = file_size; in lzma_file_info_decoder_init()
815 lzma_index_end(coder->this_index, allocator); in lzma_file_info_decoder_init()
816 coder->this_index = NULL; in lzma_file_info_decoder_init()
818 lzma_index_end(coder->combined_index, allocator); in lzma_file_info_decoder_init()
819 coder->combined_index = NULL; in lzma_file_info_decoder_init()
821 coder->stream_padding = 0; in lzma_file_info_decoder_init()
823 coder->dest_index = dest_index; in lzma_file_info_decoder_init()
824 coder->external_seek_pos = seek_pos; in lzma_file_info_decoder_init()
828 coder->memlimit = my_max(1, memlimit); in lzma_file_info_decoder_init()
831 coder->temp_pos = 0; in lzma_file_info_decoder_init()
832 coder->temp_size = LZMA_STREAM_HEADER_SIZE; in lzma_file_info_decoder_init()