tag_ape: support multiple values
One APE tag may contain more than one value, separated by null bytes.
This commit is contained in:
		
							
								
								
									
										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; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann