From 429ed24c9903008c3699da48d353f48e1a3151f6 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 24 Nov 2010 08:59:04 +0100 Subject: tag_ape: support multiple values One APE tag may contain more than one value, separated by null bytes. --- src/tag_ape.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/tag_ape.c') diff --git a/src/tag_ape.c b/src/tag_ape.c index 82e36d7a..79facba1 100644 --- a/src/tag_ape.c +++ b/src/tag_ape.c @@ -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; } -- cgit v1.2.3