Lines Matching refs:iterator
89 static FLAC__bool read_metadata_block_header_(FLAC__Metadata_SimpleIterator *iterator);
90 static FLAC__bool read_metadata_block_data_(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMe…
117 static FLAC__bool write_metadata_block_stationary_(FLAC__Metadata_SimpleIterator *iterator, const F…
118 …_metadata_block_stationary_with_padding_(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMeta…
119 static FLAC__bool rewrite_whole_file_(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata…
121 static void simple_iterator_push_(FLAC__Metadata_SimpleIterator *iterator);
122 static FLAC__bool simple_iterator_pop_(FLAC__Metadata_SimpleIterator *iterator);
127 static FLAC__bool simple_iterator_copy_file_prefix_(FLAC__Metadata_SimpleIterator *iterator, FILE *…
128 static FLAC__bool simple_iterator_copy_file_postfix_(FLAC__Metadata_SimpleIterator *iterator, FILE …
380 …FLAC__Metadata_SimpleIterator *iterator = (FLAC__Metadata_SimpleIterator*)calloc(1, sizeof(FLAC__M… in FLAC__metadata_simple_iterator_new() local
382 if(0 != iterator) { in FLAC__metadata_simple_iterator_new()
383 iterator->file = 0; in FLAC__metadata_simple_iterator_new()
384 iterator->filename = 0; in FLAC__metadata_simple_iterator_new()
385 iterator->tempfile_path_prefix = 0; in FLAC__metadata_simple_iterator_new()
386 iterator->has_stats = false; in FLAC__metadata_simple_iterator_new()
387 iterator->is_writable = false; in FLAC__metadata_simple_iterator_new()
388 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK; in FLAC__metadata_simple_iterator_new()
389 iterator->first_offset = iterator->offset[0] = -1; in FLAC__metadata_simple_iterator_new()
390 iterator->depth = 0; in FLAC__metadata_simple_iterator_new()
393 return iterator; in FLAC__metadata_simple_iterator_new()
396 static void simple_iterator_free_guts_(FLAC__Metadata_SimpleIterator *iterator) in simple_iterator_free_guts_() argument
398 FLAC__ASSERT(0 != iterator); in simple_iterator_free_guts_()
400 if(0 != iterator->file) { in simple_iterator_free_guts_()
401 fclose(iterator->file); in simple_iterator_free_guts_()
402 iterator->file = 0; in simple_iterator_free_guts_()
403 if(iterator->has_stats) in simple_iterator_free_guts_()
404 set_file_stats_(iterator->filename, &iterator->stats); in simple_iterator_free_guts_()
406 if(0 != iterator->filename) { in simple_iterator_free_guts_()
407 free(iterator->filename); in simple_iterator_free_guts_()
408 iterator->filename = 0; in simple_iterator_free_guts_()
410 if(0 != iterator->tempfile_path_prefix) { in simple_iterator_free_guts_()
411 free(iterator->tempfile_path_prefix); in simple_iterator_free_guts_()
412 iterator->tempfile_path_prefix = 0; in simple_iterator_free_guts_()
416 FLAC_API void FLAC__metadata_simple_iterator_delete(FLAC__Metadata_SimpleIterator *iterator) in FLAC__metadata_simple_iterator_delete() argument
418 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_delete()
420 simple_iterator_free_guts_(iterator); in FLAC__metadata_simple_iterator_delete()
421 free(iterator); in FLAC__metadata_simple_iterator_delete()
424 …SimpleIteratorStatus FLAC__metadata_simple_iterator_status(FLAC__Metadata_SimpleIterator *iterator) in FLAC__metadata_simple_iterator_status() argument
428 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_status()
430 status = iterator->status; in FLAC__metadata_simple_iterator_status()
431 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK; in FLAC__metadata_simple_iterator_status()
435 static FLAC__bool simple_iterator_prime_input_(FLAC__Metadata_SimpleIterator *iterator, FLAC__bool … in simple_iterator_prime_input_() argument
439 FLAC__ASSERT(0 != iterator); in simple_iterator_prime_input_()
441 if(read_only || 0 == (iterator->file = fopen(iterator->filename, "r+b"))) { in simple_iterator_prime_input_()
442 iterator->is_writable = false; in simple_iterator_prime_input_()
444 if(0 == (iterator->file = fopen(iterator->filename, "rb"))) { in simple_iterator_prime_input_()
445 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ERROR_OPENING_FILE; in simple_iterator_prime_input_()
450 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ERROR_OPENING_FILE; in simple_iterator_prime_input_()
455 iterator->is_writable = true; in simple_iterator_prime_input_()
458 ret = seek_to_first_metadata_block_(iterator->file); in simple_iterator_prime_input_()
461 iterator->depth = 0; in simple_iterator_prime_input_()
462 iterator->first_offset = iterator->offset[iterator->depth] = ftello(iterator->file); in simple_iterator_prime_input_()
463 return read_metadata_block_header_(iterator); in simple_iterator_prime_input_()
465 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR; in simple_iterator_prime_input_()
468 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in simple_iterator_prime_input_()
471 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_A_FLAC_FILE; in simple_iterator_prime_input_()
494 FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char …
497 FLAC_API FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, co… in FLAC__metadata_simple_iterator_init() argument
501 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_init()
504 simple_iterator_free_guts_(iterator); in FLAC__metadata_simple_iterator_init()
507 iterator->has_stats = get_file_stats_(filename, &iterator->stats); in FLAC__metadata_simple_iterator_init()
509 if(0 == (iterator->filename = strdup(filename))) { in FLAC__metadata_simple_iterator_init()
510 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_MEMORY_ALLOCATION_ERROR; in FLAC__metadata_simple_iterator_init()
513 …if(0 != tempfile_path_prefix && 0 == (iterator->tempfile_path_prefix = strdup(tempfile_path_prefix… in FLAC__metadata_simple_iterator_init()
514 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_MEMORY_ALLOCATION_ERROR; in FLAC__metadata_simple_iterator_init()
518 return simple_iterator_prime_input_(iterator, read_only); in FLAC__metadata_simple_iterator_init()
521 …LAC__bool FLAC__metadata_simple_iterator_is_writable(const FLAC__Metadata_SimpleIterator *iterator) in FLAC__metadata_simple_iterator_is_writable() argument
523 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_is_writable()
524 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_is_writable()
526 return iterator->is_writable; in FLAC__metadata_simple_iterator_is_writable()
529 FLAC_API FLAC__bool FLAC__metadata_simple_iterator_next(FLAC__Metadata_SimpleIterator *iterator) in FLAC__metadata_simple_iterator_next() argument
531 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_next()
532 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_next()
534 if(iterator->is_last) in FLAC__metadata_simple_iterator_next()
537 if(0 != fseeko(iterator->file, iterator->length, SEEK_CUR)) { in FLAC__metadata_simple_iterator_next()
538 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in FLAC__metadata_simple_iterator_next()
542 iterator->offset[iterator->depth] = ftello(iterator->file); in FLAC__metadata_simple_iterator_next()
544 return read_metadata_block_header_(iterator); in FLAC__metadata_simple_iterator_next()
547 FLAC_API FLAC__bool FLAC__metadata_simple_iterator_prev(FLAC__Metadata_SimpleIterator *iterator) in FLAC__metadata_simple_iterator_prev() argument
551 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_prev()
552 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_prev()
554 if(iterator->offset[iterator->depth] == iterator->first_offset) in FLAC__metadata_simple_iterator_prev()
557 if(0 != fseeko(iterator->file, iterator->first_offset, SEEK_SET)) { in FLAC__metadata_simple_iterator_prev()
558 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in FLAC__metadata_simple_iterator_prev()
561 this_offset = iterator->first_offset; in FLAC__metadata_simple_iterator_prev()
562 if(!read_metadata_block_header_(iterator)) in FLAC__metadata_simple_iterator_prev()
566 while(ftello(iterator->file) + (off_t)iterator->length < iterator->offset[iterator->depth]) { in FLAC__metadata_simple_iterator_prev()
567 if(0 != fseeko(iterator->file, iterator->length, SEEK_CUR)) { in FLAC__metadata_simple_iterator_prev()
568 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in FLAC__metadata_simple_iterator_prev()
571 this_offset = ftello(iterator->file); in FLAC__metadata_simple_iterator_prev()
572 if(!read_metadata_block_header_(iterator)) in FLAC__metadata_simple_iterator_prev()
576 iterator->offset[iterator->depth] = this_offset; in FLAC__metadata_simple_iterator_prev()
582 …PI FLAC__bool FLAC__metadata_simple_iterator_is_last(const FLAC__Metadata_SimpleIterator *iterator) in FLAC__metadata_simple_iterator_is_last() argument
584 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_is_last()
585 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_is_last()
587 return iterator->is_last; in FLAC__metadata_simple_iterator_is_last()
591 …ff_t FLAC__metadata_simple_iterator_get_block_offset(const FLAC__Metadata_SimpleIterator *iterator) in FLAC__metadata_simple_iterator_get_block_offset() argument
593 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_get_block_offset()
594 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_get_block_offset()
596 return iterator->offset[iterator->depth]; in FLAC__metadata_simple_iterator_get_block_offset()
599 …taType FLAC__metadata_simple_iterator_get_block_type(const FLAC__Metadata_SimpleIterator *iterator) in FLAC__metadata_simple_iterator_get_block_type() argument
601 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_get_block_type()
602 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_get_block_type()
604 return iterator->type; in FLAC__metadata_simple_iterator_get_block_type()
608 …gned FLAC__metadata_simple_iterator_get_block_length(const FLAC__Metadata_SimpleIterator *iterator) in FLAC__metadata_simple_iterator_get_block_length() argument
610 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_get_block_length()
611 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_get_block_length()
613 return iterator->length; in FLAC__metadata_simple_iterator_get_block_length()
617 …etadata_simple_iterator_get_application_id(FLAC__Metadata_SimpleIterator *iterator, FLAC__byte *id) in FLAC__metadata_simple_iterator_get_application_id() argument
621 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_get_application_id()
622 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_get_application_id()
625 if(iterator->type != FLAC__METADATA_TYPE_APPLICATION) { in FLAC__metadata_simple_iterator_get_application_id()
626 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT; in FLAC__metadata_simple_iterator_get_application_id()
630 if(fread(id, 1, id_bytes, iterator->file) != id_bytes) { in FLAC__metadata_simple_iterator_get_application_id()
631 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR; in FLAC__metadata_simple_iterator_get_application_id()
636 if(0 != fseeko(iterator->file, -((int)id_bytes), SEEK_CUR)) { in FLAC__metadata_simple_iterator_get_application_id()
637 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in FLAC__metadata_simple_iterator_get_application_id()
644 …__StreamMetadata *FLAC__metadata_simple_iterator_get_block(FLAC__Metadata_SimpleIterator *iterator) in FLAC__metadata_simple_iterator_get_block() argument
646 FLAC__StreamMetadata *block = FLAC__metadata_object_new(iterator->type); in FLAC__metadata_simple_iterator_get_block()
648 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_get_block()
649 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_get_block()
652 block->is_last = iterator->is_last; in FLAC__metadata_simple_iterator_get_block()
653 block->length = iterator->length; in FLAC__metadata_simple_iterator_get_block()
655 if(!read_metadata_block_data_(iterator, block)) { in FLAC__metadata_simple_iterator_get_block()
661 …if(0 != fseeko(iterator->file, iterator->offset[iterator->depth] + FLAC__STREAM_METADATA_HEADER_LE… in FLAC__metadata_simple_iterator_get_block()
662 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in FLAC__metadata_simple_iterator_get_block()
668 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_MEMORY_ALLOCATION_ERROR; in FLAC__metadata_simple_iterator_get_block()
673 …FLAC__metadata_simple_iterator_set_block(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMeta… in FLAC__metadata_simple_iterator_set_block() argument
675 FLAC__ASSERT_DECLARATION(off_t debug_target_offset = iterator->offset[iterator->depth];) in FLAC__metadata_simple_iterator_set_block()
678 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_set_block()
679 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_set_block()
682 if(!iterator->is_writable) { in FLAC__metadata_simple_iterator_set_block()
683 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_WRITABLE; in FLAC__metadata_simple_iterator_set_block()
687 …if(iterator->type == FLAC__METADATA_TYPE_STREAMINFO || block->type == FLAC__METADATA_TYPE_STREAMIN… in FLAC__metadata_simple_iterator_set_block()
688 if(iterator->type != block->type) { in FLAC__metadata_simple_iterator_set_block()
689 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT; in FLAC__metadata_simple_iterator_set_block()
694 block->is_last = iterator->is_last; in FLAC__metadata_simple_iterator_set_block()
696 if(iterator->length == block->length) in FLAC__metadata_simple_iterator_set_block()
697 return write_metadata_block_stationary_(iterator, block); in FLAC__metadata_simple_iterator_set_block()
698 else if(iterator->length > block->length) { in FLAC__metadata_simple_iterator_set_block()
699 if(use_padding && iterator->length >= FLAC__STREAM_METADATA_HEADER_LENGTH + block->length) { in FLAC__metadata_simple_iterator_set_block()
700 …ret = write_metadata_block_stationary_with_padding_(iterator, block, iterator->length - FLAC__STRE… in FLAC__metadata_simple_iterator_set_block()
701 FLAC__ASSERT(!ret || iterator->offset[iterator->depth] == debug_target_offset); in FLAC__metadata_simple_iterator_set_block()
702 …FLAC__ASSERT(!ret || ftello(iterator->file) == debug_target_offset + (off_t)FLAC__STREAM_METADATA_… in FLAC__metadata_simple_iterator_set_block()
706 ret = rewrite_whole_file_(iterator, block, /*append=*/false); in FLAC__metadata_simple_iterator_set_block()
707 FLAC__ASSERT(!ret || iterator->offset[iterator->depth] == debug_target_offset); in FLAC__metadata_simple_iterator_set_block()
708 …FLAC__ASSERT(!ret || ftello(iterator->file) == debug_target_offset + (off_t)FLAC__STREAM_METADATA_… in FLAC__metadata_simple_iterator_set_block()
717 if(iterator->is_last) { in FLAC__metadata_simple_iterator_set_block()
721 const unsigned extra_padding_bytes_required = block->length - iterator->length; in FLAC__metadata_simple_iterator_set_block()
722 simple_iterator_push_(iterator); in FLAC__metadata_simple_iterator_set_block()
723 if(!FLAC__metadata_simple_iterator_next(iterator)) { in FLAC__metadata_simple_iterator_set_block()
724 (void)simple_iterator_pop_(iterator); in FLAC__metadata_simple_iterator_set_block()
727 if(iterator->type != FLAC__METADATA_TYPE_PADDING) { in FLAC__metadata_simple_iterator_set_block()
731 if(FLAC__STREAM_METADATA_HEADER_LENGTH + iterator->length == extra_padding_bytes_required) { in FLAC__metadata_simple_iterator_set_block()
733 block->is_last = iterator->is_last; in FLAC__metadata_simple_iterator_set_block()
735 else if(iterator->length < extra_padding_bytes_required) in FLAC__metadata_simple_iterator_set_block()
738 …padding_leftover = FLAC__STREAM_METADATA_HEADER_LENGTH + iterator->length - extra_padding_bytes_re… in FLAC__metadata_simple_iterator_set_block()
739 padding_is_last = iterator->is_last; in FLAC__metadata_simple_iterator_set_block()
743 if(!simple_iterator_pop_(iterator)) in FLAC__metadata_simple_iterator_set_block()
749 ret = write_metadata_block_stationary_(iterator, block); in FLAC__metadata_simple_iterator_set_block()
750 FLAC__ASSERT(!ret || iterator->offset[iterator->depth] == debug_target_offset); in FLAC__metadata_simple_iterator_set_block()
751 …FLAC__ASSERT(!ret || ftello(iterator->file) == debug_target_offset + (off_t)FLAC__STREAM_METADATA_… in FLAC__metadata_simple_iterator_set_block()
756 …ret = write_metadata_block_stationary_with_padding_(iterator, block, padding_leftover - FLAC__STRE… in FLAC__metadata_simple_iterator_set_block()
757 FLAC__ASSERT(!ret || iterator->offset[iterator->depth] == debug_target_offset); in FLAC__metadata_simple_iterator_set_block()
758 …FLAC__ASSERT(!ret || ftello(iterator->file) == debug_target_offset + (off_t)FLAC__STREAM_METADATA_… in FLAC__metadata_simple_iterator_set_block()
763 ret = rewrite_whole_file_(iterator, block, /*append=*/false); in FLAC__metadata_simple_iterator_set_block()
764 FLAC__ASSERT(!ret || iterator->offset[iterator->depth] == debug_target_offset); in FLAC__metadata_simple_iterator_set_block()
765 …FLAC__ASSERT(!ret || ftello(iterator->file) == debug_target_offset + (off_t)FLAC__STREAM_METADATA_… in FLAC__metadata_simple_iterator_set_block()
771 …adata_simple_iterator_insert_block_after(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMeta… in FLAC__metadata_simple_iterator_insert_block_after() argument
776 …RATION(off_t debug_target_offset = iterator->offset[iterator->depth] + FLAC__STREAM_METADATA_HEADE… in FLAC__metadata_simple_iterator_insert_block_after()
779 FLAC__ASSERT(0 != iterator); in FLAC__metadata_simple_iterator_insert_block_after()
780 FLAC__ASSERT(0 != iterator->file); in FLAC__metadata_simple_iterator_insert_block_after()
783 if(!iterator->is_writable) in FLAC__metadata_simple_iterator_insert_block_after()
787 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT; in FLAC__metadata_simple_iterator_insert_block_after()
791 block->is_last = iterator->is_last; in FLAC__metadata_simple_iterator_insert_block_after()
795 if(iterator->is_last) { in FLAC__metadata_simple_iterator_insert_block_after()
799 simple_iterator_push_(iterator); in FLAC__metadata_simple_iterator_insert_block_after()
800 if(!FLAC__metadata_simple_iterator_next(iterator)) { in FLAC__metadata_simple_iterator_insert_block_after()
801 (void)simple_iterator_pop_(iterator); in FLAC__metadata_simple_iterator_insert_block_after()
804 if(iterator->type != FLAC__METADATA_TYPE_PADDING) { in FLAC__metadata_simple_iterator_insert_block_after()
808 if(iterator->length == block->length) { in FLAC__metadata_simple_iterator_insert_block_after()
810 block->is_last = iterator->is_last; in FLAC__metadata_simple_iterator_insert_block_after()
812 else if(iterator->length < FLAC__STREAM_METADATA_HEADER_LENGTH + block->length) in FLAC__metadata_simple_iterator_insert_block_after()
815 padding_leftover = iterator->length - block->length; in FLAC__metadata_simple_iterator_insert_block_after()
816 padding_is_last = iterator->is_last; in FLAC__metadata_simple_iterator_insert_block_after()
820 if(!simple_iterator_pop_(iterator)) in FLAC__metadata_simple_iterator_insert_block_after()
826 if(!FLAC__metadata_simple_iterator_next(iterator)) in FLAC__metadata_simple_iterator_insert_block_after()
829 ret = write_metadata_block_stationary_(iterator, block); in FLAC__metadata_simple_iterator_insert_block_after()
830 FLAC__ASSERT(iterator->offset[iterator->depth] == debug_target_offset); in FLAC__metadata_simple_iterator_insert_block_after()
831 …FLAC__ASSERT(ftello(iterator->file) == debug_target_offset + (off_t)FLAC__STREAM_METADATA_HEADER_L… in FLAC__metadata_simple_iterator_insert_block_after()
836 …ret = write_metadata_block_stationary_with_padding_(iterator, block, padding_leftover - FLAC__STRE… in FLAC__metadata_simple_iterator_insert_block_after()
837 FLAC__ASSERT(iterator->offset[iterator->depth] == debug_target_offset); in FLAC__metadata_simple_iterator_insert_block_after()
838 …FLAC__ASSERT(ftello(iterator->file) == debug_target_offset + (off_t)FLAC__STREAM_METADATA_HEADER_L… in FLAC__metadata_simple_iterator_insert_block_after()
843 ret = rewrite_whole_file_(iterator, block, /*append=*/true); in FLAC__metadata_simple_iterator_insert_block_after()
844 FLAC__ASSERT(iterator->offset[iterator->depth] == debug_target_offset); in FLAC__metadata_simple_iterator_insert_block_after()
845 …FLAC__ASSERT(ftello(iterator->file) == debug_target_offset + (off_t)FLAC__STREAM_METADATA_HEADER_L… in FLAC__metadata_simple_iterator_insert_block_after()
850 …C__metadata_simple_iterator_delete_block(FLAC__Metadata_SimpleIterator *iterator, FLAC__bool use_p… in FLAC__metadata_simple_iterator_delete_block() argument
852 FLAC__ASSERT_DECLARATION(off_t debug_target_offset = iterator->offset[iterator->depth];) in FLAC__metadata_simple_iterator_delete_block()
855 if(iterator->type == FLAC__METADATA_TYPE_STREAMINFO) { in FLAC__metadata_simple_iterator_delete_block()
856 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT; in FLAC__metadata_simple_iterator_delete_block()
863 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_MEMORY_ALLOCATION_ERROR; in FLAC__metadata_simple_iterator_delete_block()
866 padding->length = iterator->length; in FLAC__metadata_simple_iterator_delete_block()
867 if(!FLAC__metadata_simple_iterator_set_block(iterator, padding, false)) { in FLAC__metadata_simple_iterator_delete_block()
872 if(!FLAC__metadata_simple_iterator_prev(iterator)) in FLAC__metadata_simple_iterator_delete_block()
874 …FLAC__ASSERT(iterator->offset[iterator->depth] + (off_t)FLAC__STREAM_METADATA_HEADER_LENGTH + (off… in FLAC__metadata_simple_iterator_delete_block()
875 FLAC__ASSERT(ftello(iterator->file) + (off_t)iterator->length == debug_target_offset); in FLAC__metadata_simple_iterator_delete_block()
879 ret = rewrite_whole_file_(iterator, 0, /*append=*/false); in FLAC__metadata_simple_iterator_delete_block()
880 …FLAC__ASSERT(iterator->offset[iterator->depth] + (off_t)FLAC__STREAM_METADATA_HEADER_LENGTH + (off… in FLAC__metadata_simple_iterator_delete_block()
881 FLAC__ASSERT(ftello(iterator->file) + (off_t)iterator->length == debug_target_offset); in FLAC__metadata_simple_iterator_delete_block()
1046 static void iterator_insert_node_(FLAC__Metadata_Iterator *iterator, FLAC__Metadata_Node *node) in iterator_insert_node_() argument
1050 FLAC__ASSERT(0 != iterator); in iterator_insert_node_()
1051 FLAC__ASSERT(0 != iterator->current); in iterator_insert_node_()
1052 FLAC__ASSERT(0 != iterator->chain); in iterator_insert_node_()
1053 FLAC__ASSERT(0 != iterator->chain->head); in iterator_insert_node_()
1054 FLAC__ASSERT(0 != iterator->chain->tail); in iterator_insert_node_()
1058 node->prev = iterator->current->prev; in iterator_insert_node_()
1059 node->next = iterator->current; in iterator_insert_node_()
1062 iterator->chain->head = node; in iterator_insert_node_()
1066 iterator->current->prev = node; in iterator_insert_node_()
1068 iterator->chain->nodes++; in iterator_insert_node_()
1071 static void iterator_insert_node_after_(FLAC__Metadata_Iterator *iterator, FLAC__Metadata_Node *nod… in iterator_insert_node_after_() argument
1075 FLAC__ASSERT(0 != iterator); in iterator_insert_node_after_()
1076 FLAC__ASSERT(0 != iterator->current); in iterator_insert_node_after_()
1077 FLAC__ASSERT(0 != iterator->chain); in iterator_insert_node_after_()
1078 FLAC__ASSERT(0 != iterator->chain->head); in iterator_insert_node_after_()
1079 FLAC__ASSERT(0 != iterator->chain->tail); in iterator_insert_node_after_()
1081 iterator->current->data->is_last = false; in iterator_insert_node_after_()
1083 node->prev = iterator->current; in iterator_insert_node_after_()
1084 node->next = iterator->current->next; in iterator_insert_node_after_()
1087 iterator->chain->tail = node; in iterator_insert_node_after_()
1093 iterator->chain->tail->data->is_last = true; in iterator_insert_node_after_()
1095 iterator->chain->nodes++; in iterator_insert_node_after_()
1836 …FLAC__Metadata_Iterator *iterator = (FLAC__Metadata_Iterator*)calloc(1, sizeof(FLAC__Metadata_Iter… in FLAC__metadata_iterator_new() local
1843 return iterator; in FLAC__metadata_iterator_new()
1846 FLAC_API void FLAC__metadata_iterator_delete(FLAC__Metadata_Iterator *iterator) in FLAC__metadata_iterator_delete() argument
1848 FLAC__ASSERT(0 != iterator); in FLAC__metadata_iterator_delete()
1850 free(iterator); in FLAC__metadata_iterator_delete()
1853 FLAC_API void FLAC__metadata_iterator_init(FLAC__Metadata_Iterator *iterator, FLAC__Metadata_Chain … in FLAC__metadata_iterator_init() argument
1855 FLAC__ASSERT(0 != iterator); in FLAC__metadata_iterator_init()
1859 iterator->chain = chain; in FLAC__metadata_iterator_init()
1860 iterator->current = chain->head; in FLAC__metadata_iterator_init()
1863 FLAC_API FLAC__bool FLAC__metadata_iterator_next(FLAC__Metadata_Iterator *iterator) in FLAC__metadata_iterator_next() argument
1865 FLAC__ASSERT(0 != iterator); in FLAC__metadata_iterator_next()
1867 if(0 == iterator->current || 0 == iterator->current->next) in FLAC__metadata_iterator_next()
1870 iterator->current = iterator->current->next; in FLAC__metadata_iterator_next()
1874 FLAC_API FLAC__bool FLAC__metadata_iterator_prev(FLAC__Metadata_Iterator *iterator) in FLAC__metadata_iterator_prev() argument
1876 FLAC__ASSERT(0 != iterator); in FLAC__metadata_iterator_prev()
1878 if(0 == iterator->current || 0 == iterator->current->prev) in FLAC__metadata_iterator_prev()
1881 iterator->current = iterator->current->prev; in FLAC__metadata_iterator_prev()
1885 … FLAC__MetadataType FLAC__metadata_iterator_get_block_type(const FLAC__Metadata_Iterator *iterator) in FLAC__metadata_iterator_get_block_type() argument
1887 FLAC__ASSERT(0 != iterator); in FLAC__metadata_iterator_get_block_type()
1888 FLAC__ASSERT(0 != iterator->current); in FLAC__metadata_iterator_get_block_type()
1889 FLAC__ASSERT(0 != iterator->current->data); in FLAC__metadata_iterator_get_block_type()
1891 return iterator->current->data->type; in FLAC__metadata_iterator_get_block_type()
1894 FLAC_API FLAC__StreamMetadata *FLAC__metadata_iterator_get_block(FLAC__Metadata_Iterator *iterator) in FLAC__metadata_iterator_get_block() argument
1896 FLAC__ASSERT(0 != iterator); in FLAC__metadata_iterator_get_block()
1897 FLAC__ASSERT(0 != iterator->current); in FLAC__metadata_iterator_get_block()
1899 return iterator->current->data; in FLAC__metadata_iterator_get_block()
1902 FLAC_API FLAC__bool FLAC__metadata_iterator_set_block(FLAC__Metadata_Iterator *iterator, FLAC__Stre… in FLAC__metadata_iterator_set_block() argument
1904 FLAC__ASSERT(0 != iterator); in FLAC__metadata_iterator_set_block()
1906 …urn FLAC__metadata_iterator_delete_block(iterator, false) && FLAC__metadata_iterator_insert_block_… in FLAC__metadata_iterator_set_block()
1909 FLAC_API FLAC__bool FLAC__metadata_iterator_delete_block(FLAC__Metadata_Iterator *iterator, FLAC__b… in FLAC__metadata_iterator_delete_block() argument
1913 FLAC__ASSERT(0 != iterator); in FLAC__metadata_iterator_delete_block()
1914 FLAC__ASSERT(0 != iterator->current); in FLAC__metadata_iterator_delete_block()
1916 if(0 == iterator->current->prev) { in FLAC__metadata_iterator_delete_block()
1917 FLAC__ASSERT(iterator->current->data->type == FLAC__METADATA_TYPE_STREAMINFO); in FLAC__metadata_iterator_delete_block()
1921 save = iterator->current->prev; in FLAC__metadata_iterator_delete_block()
1924 FLAC__metadata_object_delete_data(iterator->current->data); in FLAC__metadata_iterator_delete_block()
1925 iterator->current->data->type = FLAC__METADATA_TYPE_PADDING; in FLAC__metadata_iterator_delete_block()
1928 chain_delete_node_(iterator->chain, iterator->current); in FLAC__metadata_iterator_delete_block()
1931 iterator->current = save; in FLAC__metadata_iterator_delete_block()
1935 FLAC_API FLAC__bool FLAC__metadata_iterator_insert_block_before(FLAC__Metadata_Iterator *iterator, … in FLAC__metadata_iterator_insert_block_before() argument
1939 FLAC__ASSERT(0 != iterator); in FLAC__metadata_iterator_insert_block_before()
1940 FLAC__ASSERT(0 != iterator->current); in FLAC__metadata_iterator_insert_block_before()
1946 if(0 == iterator->current->prev) { in FLAC__metadata_iterator_insert_block_before()
1947 FLAC__ASSERT(iterator->current->data->type == FLAC__METADATA_TYPE_STREAMINFO); in FLAC__metadata_iterator_insert_block_before()
1955 iterator_insert_node_(iterator, node); in FLAC__metadata_iterator_insert_block_before()
1956 iterator->current = node; in FLAC__metadata_iterator_insert_block_before()
1960 FLAC_API FLAC__bool FLAC__metadata_iterator_insert_block_after(FLAC__Metadata_Iterator *iterator, F… in FLAC__metadata_iterator_insert_block_after() argument
1964 FLAC__ASSERT(0 != iterator); in FLAC__metadata_iterator_insert_block_after()
1965 FLAC__ASSERT(0 != iterator->current); in FLAC__metadata_iterator_insert_block_after()
1975 iterator_insert_node_after_(iterator, node); in FLAC__metadata_iterator_insert_block_after()
1976 iterator->current = node; in FLAC__metadata_iterator_insert_block_after()
2056 FLAC__bool read_metadata_block_header_(FLAC__Metadata_SimpleIterator *iterator) in read_metadata_block_header_() argument
2058 FLAC__ASSERT(0 != iterator); in read_metadata_block_header_()
2059 FLAC__ASSERT(0 != iterator->file); in read_metadata_block_header_()
2061 …ck_header_cb_((FLAC__IOHandle)iterator->file, (FLAC__IOCallback_Read)fread, &iterator->is_last, &i… in read_metadata_block_header_()
2062 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR; in read_metadata_block_header_()
2069 FLAC__bool read_metadata_block_data_(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata … in read_metadata_block_data_() argument
2071 FLAC__ASSERT(0 != iterator); in read_metadata_block_data_()
2072 FLAC__ASSERT(0 != iterator->file); in read_metadata_block_data_()
2074 …iterator->status = read_metadata_block_data_cb_((FLAC__IOHandle)iterator->file, (FLAC__IOCallback_… in read_metadata_block_data_()
2076 return (iterator->status == FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK); in read_metadata_block_data_()
2838 FLAC__bool write_metadata_block_stationary_(FLAC__Metadata_SimpleIterator *iterator, const FLAC__St… in write_metadata_block_stationary_() argument
2840 if(0 != fseeko(iterator->file, iterator->offset[iterator->depth], SEEK_SET)) { in write_metadata_block_stationary_()
2841 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in write_metadata_block_stationary_()
2845 if(!write_metadata_block_header_(iterator->file, &iterator->status, block)) in write_metadata_block_stationary_()
2848 if(!write_metadata_block_data_(iterator->file, &iterator->status, block)) in write_metadata_block_stationary_()
2851 if(0 != fseeko(iterator->file, iterator->offset[iterator->depth], SEEK_SET)) { in write_metadata_block_stationary_()
2852 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in write_metadata_block_stationary_()
2856 return read_metadata_block_header_(iterator); in write_metadata_block_stationary_()
2859 FLAC__bool write_metadata_block_stationary_with_padding_(FLAC__Metadata_SimpleIterator *iterator, F… in write_metadata_block_stationary_with_padding_() argument
2863 if(0 != fseeko(iterator->file, iterator->offset[iterator->depth], SEEK_SET)) { in write_metadata_block_stationary_with_padding_()
2864 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in write_metadata_block_stationary_with_padding_()
2870 if(!write_metadata_block_header_(iterator->file, &iterator->status, block)) in write_metadata_block_stationary_with_padding_()
2873 if(!write_metadata_block_data_(iterator->file, &iterator->status, block)) in write_metadata_block_stationary_with_padding_()
2882 if(!write_metadata_block_header_(iterator->file, &iterator->status, padding)) { in write_metadata_block_stationary_with_padding_()
2887 if(!write_metadata_block_data_(iterator->file, &iterator->status, padding)) { in write_metadata_block_stationary_with_padding_()
2894 if(0 != fseeko(iterator->file, iterator->offset[iterator->depth], SEEK_SET)) { in write_metadata_block_stationary_with_padding_()
2895 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in write_metadata_block_stationary_with_padding_()
2899 return read_metadata_block_header_(iterator); in write_metadata_block_stationary_with_padding_()
2902 FLAC__bool rewrite_whole_file_(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata *block… in rewrite_whole_file_() argument
2911 if(iterator->is_last) { in rewrite_whole_file_()
2914 fixup_is_last_flag_offset = iterator->offset[iterator->depth]; in rewrite_whole_file_()
2917 simple_iterator_push_(iterator); in rewrite_whole_file_()
2918 if(!FLAC__metadata_simple_iterator_prev(iterator)) { in rewrite_whole_file_()
2919 (void)simple_iterator_pop_(iterator); in rewrite_whole_file_()
2923 fixup_is_last_flag_offset = iterator->offset[iterator->depth]; in rewrite_whole_file_()
2924 if(!simple_iterator_pop_(iterator)) in rewrite_whole_file_()
2929 if(!simple_iterator_copy_file_prefix_(iterator, &tempfile, &tempfilename, append)) in rewrite_whole_file_()
2933 if(!write_metadata_block_header_(tempfile, &iterator->status, block)) { in rewrite_whole_file_()
2938 if(!write_metadata_block_data_(tempfile, &iterator->status, block)) { in rewrite_whole_file_()
2944 …if(!simple_iterator_copy_file_postfix_(iterator, &tempfile, &tempfilename, fixup_is_last_code, fix… in rewrite_whole_file_()
2948 return FLAC__metadata_simple_iterator_next(iterator); in rewrite_whole_file_()
2953 void simple_iterator_push_(FLAC__Metadata_SimpleIterator *iterator) in simple_iterator_push_() argument
2955 FLAC__ASSERT(iterator->depth+1 < SIMPLE_ITERATOR_MAX_PUSH_DEPTH); in simple_iterator_push_()
2956 iterator->offset[iterator->depth+1] = iterator->offset[iterator->depth]; in simple_iterator_push_()
2957 iterator->depth++; in simple_iterator_push_()
2960 FLAC__bool simple_iterator_pop_(FLAC__Metadata_SimpleIterator *iterator) in simple_iterator_pop_() argument
2962 FLAC__ASSERT(iterator->depth > 0); in simple_iterator_pop_()
2963 iterator->depth--; in simple_iterator_pop_()
2964 if(0 != fseeko(iterator->file, iterator->offset[iterator->depth], SEEK_SET)) { in simple_iterator_pop_()
2965 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in simple_iterator_pop_()
2969 return read_metadata_block_header_(iterator); in simple_iterator_pop_()
3033 FLAC__bool simple_iterator_copy_file_prefix_(FLAC__Metadata_SimpleIterator *iterator, FILE **tempfi… in simple_iterator_copy_file_prefix_() argument
3035 …= append? iterator->offset[iterator->depth] + (off_t)FLAC__STREAM_METADATA_HEADER_LENGTH + (off_t)… in simple_iterator_copy_file_prefix_()
3037 if(0 != fseeko(iterator->file, 0, SEEK_SET)) { in simple_iterator_copy_file_prefix_()
3038 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in simple_iterator_copy_file_prefix_()
3041 …if(!open_tempfile_(iterator->filename, iterator->tempfile_path_prefix, tempfile, tempfilename, &it… in simple_iterator_copy_file_prefix_()
3045 if(!copy_n_bytes_from_file_(iterator->file, *tempfile, offset_end, &iterator->status)) { in simple_iterator_copy_file_prefix_()
3053 FLAC__bool simple_iterator_copy_file_postfix_(FLAC__Metadata_SimpleIterator *iterator, FILE **tempf… in simple_iterator_copy_file_postfix_() argument
3055 off_t save_offset = iterator->offset[iterator->depth]; in simple_iterator_copy_file_postfix_()
3058 …if(0 != fseeko(iterator->file, save_offset + (off_t)FLAC__STREAM_METADATA_HEADER_LENGTH + (off_t)i… in simple_iterator_copy_file_postfix_()
3060 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in simple_iterator_copy_file_postfix_()
3063 if(!copy_remaining_bytes_from_file_(iterator->file, *tempfile, &iterator->status)) { in simple_iterator_copy_file_postfix_()
3079 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in simple_iterator_copy_file_postfix_()
3084 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR; in simple_iterator_copy_file_postfix_()
3097 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR; in simple_iterator_copy_file_postfix_()
3102 iterator->status = FLAC__METADATA_SIMPLE_ITERATOR_STATUS_WRITE_ERROR; in simple_iterator_copy_file_postfix_()
3107 (void)fclose(iterator->file); in simple_iterator_copy_file_postfix_()
3109 if(!transport_tempfile_(iterator->filename, tempfile, tempfilename, &iterator->status)) in simple_iterator_copy_file_postfix_()
3112 if(iterator->has_stats) in simple_iterator_copy_file_postfix_()
3113 set_file_stats_(iterator->filename, &iterator->stats); in simple_iterator_copy_file_postfix_()
3115 if(!simple_iterator_prime_input_(iterator, !iterator->is_writable)) in simple_iterator_copy_file_postfix_()
3118 …while(iterator->offset[iterator->depth] + (off_t)FLAC__STREAM_METADATA_HEADER_LENGTH + (off_t)iter… in simple_iterator_copy_file_postfix_()
3119 if(!FLAC__metadata_simple_iterator_next(iterator)) in simple_iterator_copy_file_postfix_()
3125 FLAC__ASSERT(iterator->depth == 0); in simple_iterator_copy_file_postfix_()
3126 iterator->offset[0] = save_offset; in simple_iterator_copy_file_postfix_()
3127 iterator->depth++; in simple_iterator_copy_file_postfix_()
3128 return simple_iterator_pop_(iterator); in simple_iterator_copy_file_postfix_()