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

-- 
Miroslav Lichvar
--- 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);

Reply via email to