void write_vc_fields(const char *filename, const char *field_name, const FLAC__StreamMetadata_VorbisComment_Entry entry[], unsigned num_entries, FLAC__bool raw, FILE *f) { unsigned i; const unsigned field_name_length = (0 != field_name)? strlen(field_name) : 0; for(i = 0; i < num_entries; i++) { if(0 == field_name || FLAC__metadata_object_vorbiscomment_entry_matches(entry[i], field_name, field_name_length)) write_vc_field(filename, entry + i, raw, f); } }
FLAC_API int FLAC__metadata_object_vorbiscomment_find_entry_from(const FLAC__StreamMetadata *object, unsigned offset, const char *field_name) { const unsigned field_name_length = strlen(field_name); unsigned i; FLAC__ASSERT(0 != object); FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT); for(i = offset; i < object->data.vorbis_comment.num_comments; i++) { if(FLAC__metadata_object_vorbiscomment_entry_matches(object->data.vorbis_comment.comments + i, field_name, field_name_length)) return (int)i; } return -1; }
FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entry_matching(FLAC__StreamMetadata *object, const char *field_name) { const unsigned field_name_length = strlen(field_name); unsigned i; FLAC__ASSERT(0 != object); FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT); for(i = 0; i < object->data.vorbis_comment.num_comments; i++) { if(FLAC__metadata_object_vorbiscomment_entry_matches(object->data.vorbis_comment.comments + i, field_name, field_name_length)) { if(!FLAC__metadata_object_vorbiscomment_delete_comment(object, i)) return -1; else return 1; } } return 0; }
FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entries_matching(FLAC__StreamMetadata *object, const char *field_name) { FLAC__bool ok = true; unsigned matching = 0; const unsigned field_name_length = strlen(field_name); int i; FLAC__ASSERT(0 != object); FLAC__ASSERT(object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT); /* must delete from end to start otherwise it will interfere with our iteration */ for(i = (int)object->data.vorbis_comment.num_comments - 1; ok && i >= 0; i--) { if(FLAC__metadata_object_vorbiscomment_entry_matches(object->data.vorbis_comment.comments + i, field_name, field_name_length)) { matching++; ok &= FLAC__metadata_object_vorbiscomment_delete_comment(object, (unsigned)i); } } return ok? (int)matching : -1; }