Marcel Müller
2009-Feb-06 21:00 UTC
[Vorbis-dev] libvorbis: selective removal of vorbis comments
Hi, I would recommend a function in vorbis/lib/info.c to allow the selective removal of vorbis comments. Without such an interface one has to copy all the other comment tags if only a single field should be removed. The following function added to info.c will do the job: /* Remove all comments with a certain field name. * Return the number of removed comments. */ int vorbis_comment_clear_tag(vorbis_comment *vc, const char *tag) { int i,count=0; int taglen = strlen(tag)+1; /* +1 for the = we append */ char *fulltag = alloca(taglen+1); strcpy(fulltag,tag); strcat(fulltag, "="); for(i=vc->comments;i-->0;) { char** current = vc->user_comments+i; if(!tagcompare(*current, fulltag, taglen)) { _ogg_free(*current); memmove(current, current+1, (vc->comments-i)*sizeof(*vc->user_comments)); memmove(vc->comment_lengths+i, vc->comment_lengths+i+1, (vc->comments-i)*sizeof(*vc->comment_lengths)); --vc->comments; count++; } } // reallocation required? if (count) { vc->user_comments=_ogg_realloc(vc->user_comments, (vc->comments+1)*sizeof(*vc->user_comments)); vc->comment_lengths=_ogg_realloc(vc->comment_lengths, (vc->comments+1)*sizeof(*vc->comment_lengths)); } return count; } Marcel