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" |   - added tags "ArtistSort", "AlbumArtistSort" | ||||||
|   - id3: revised "performer" tag support |   - id3: revised "performer" tag support | ||||||
|   - ape: MusicBrainz tags |   - ape: MusicBrainz tags | ||||||
|  |   - ape: support multiple values | ||||||
| * decoders: | * decoders: | ||||||
|   - don't try a plugin twice (MIME type & suffix) |   - don't try a plugin twice (MIME type & suffix) | ||||||
|   - don't fall back to "mad" unless no plugin matches |   - 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) | 	if (tag == NULL) | ||||||
| 		tag = tag_new(); | 		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; | 	return tag; | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann