[Flac-dev] metaflac bug

Miroslav Lichvar lichvarm at phoenix.inf.upol.cz
Sun Oct 6 14:44:02 PDT 2002


metaflac --import-vc-from ... used on flac file without vorbis
comment destroys the file. This patch fix it.

-- 
Miroslav Lichvar
-------------- next part --------------
--- src/metaflac/main.c.orig	2002-09-28 14:45:49.000000000 +0200
+++ src/metaflac/main.c	2002-10-06 23:36:26.000000000 +0200
@@ -1754,20 +1754,24 @@
 			found_vc_block = true;
 	} while(!found_vc_block && FLAC__metadata_iterator_next(iterator));
 
-	/* create a new block if necessary */
-	if(!found_vc_block && operation->type == OP__SET_VC_FIELD) {
-		block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
-		if(0 == block)
-			die("out of memory allocating VORBIS_COMMENT block");
-		while(FLAC__metadata_iterator_next(iterator))
-			;
-		if(!FLAC__metadata_iterator_insert_block_after(iterator, block)) {
-			fprintf(stderr, "%s: ERROR: adding new VORBIS_COMMENT block to metadata, status =\"%s\"\n", filename, FLAC__Metadata_ChainStatusString[FLAC__metadata_chain_status(chain)]);
-			return false;
+	if(!found_vc_block) 
+		/* create a new block if necessary */
+		if(operation->type == OP__SET_VC_FIELD || operation->type == OP__IMPORT_VC_FROM) {
+			block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
+			if(0 == block)
+				die("out of memory allocating VORBIS_COMMENT block");
+			while(FLAC__metadata_iterator_next(iterator))
+				;
+			if(!FLAC__metadata_iterator_insert_block_after(iterator, block)) {
+				fprintf(stderr, "%s: ERROR: adding new VORBIS_COMMENT block to metadata, status =\"%s\"\n", filename, FLAC__Metadata_ChainStatusString[FLAC__metadata_chain_status(chain)]);
+				return false;
+			}
+			/* iterator is left pointing to new block */
+			FLAC__ASSERT(FLAC__metadata_iterator_get_block(iterator) == block);
+		} else {
+			FLAC__metadata_iterator_delete(iterator);
+			return ok;
 		}
-		/* iterator is left pointing to new block */
-		FLAC__ASSERT(FLAC__metadata_iterator_get_block(iterator) == block);
-	}
 
 	FLAC__ASSERT(0 != block);
 	FLAC__ASSERT(block->type == FLAC__METADATA_TYPE_VORBIS_COMMENT);


More information about the Flac-dev mailing list