tag_ape: support multiple values
One APE tag may contain more than one value, separated by null bytes.
This commit is contained in:
parent
1ab46472ab
commit
429ed24c99
1
NEWS
1
NEWS
|
@ -21,6 +21,7 @@ ver 0.16 (20??/??/??)
|
|||
- added tags "ArtistSort", "AlbumArtistSort"
|
||||
- id3: revised "performer" tag support
|
||||
- ape: MusicBrainz tags
|
||||
- ape: support multiple values
|
||||
* decoders:
|
||||
- don't try a plugin twice (MIME type & suffix)
|
||||
- don't fall back to "mad" unless no plugin matches
|
||||
|
|
|
@ -52,7 +52,21 @@ tag_ape_import_item(struct tag *tag, unsigned long flags,
|
|||
|
||||
if (tag == NULL)
|
||||
tag = tag_new();
|
||||
tag_add_item_n(tag, type, value, value_length);
|
||||
|
||||
const char *end = value + value_length;
|
||||
while (true) {
|
||||
/* multiple values are separated by null bytes */
|
||||
const char *n = memchr(value, 0, end - value);
|
||||
if (n != NULL) {
|
||||
if (n > value)
|
||||
tag_add_item_n(tag, type, value, n - value);
|
||||
value = n + 1;
|
||||
} else {
|
||||
if (end > value)
|
||||
tag_add_item_n(tag, type, value, end - value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue