mp3_afh: Always create id3v2 tags.
authorAndre Noll <maan@tuebingen.mpg.de>
Mon, 7 Mar 2016 15:10:05 +0000 (16:10 +0100)
committerAndre Noll <maan@tuebingen.mpg.de>
Tue, 29 Mar 2016 01:56:53 +0000 (01:56 +0000)
When para_afh is asked to modify the tags of an mp3 file, it looks
at both version 1 and version 2 id3 tags. Currently, if the file
contains only id3v1 tags, para_afh will replace the tag contents but
will not create a version 2 tag. This is unfortunate if the length of
a given tag value exceeds the fixed-size byte limit of id3v1 because
it results in a truncated value and there is no way to specify that
an id3v2 tag should be created (which could store tags of any size).

This commit makes para_afh always write id3v2 tags. This actually
simplifies the code a bit because with this change the v2_tag variable
can never be NULL, allowing to get rid of a conditional.

mp3_afh.c

index 5f73785..47298b8 100644 (file)
--- a/mp3_afh.c
+++ b/mp3_afh.c
@@ -340,29 +340,27 @@ static int mp3_rewrite_tags(const char *map, size_t mapsize,
        if (v2_tag) {
                PARA_NOTICE_LOG("replacing id3v2 tag\n");
                old_v2size = v2_tag->paddedsize;
-       } else if (!v1_tag) {
-               PARA_NOTICE_LOG("no id3 tags found, adding id3v2 tag\n");
+       } else {
+               PARA_NOTICE_LOG("adding id3v2 tag\n");
                v2_tag = id3_tag_new();
                assert(v2_tag);
        }
-       if (v2_tag) {
-               /*
-                * Turn off all options to avoid creating an extended header.
-                * id321 does not understand it.
-                */
-               id3_tag_options(v2_tag, ~0U, 0);
-               ret = replace_tags(v2_tag, tags);
-               if (ret < 0)
-                       goto out;
-               new_v2size = id3_tag_render(v2_tag, NULL);
-               v2_buffer = para_malloc(new_v2size);
-               id3_tag_render(v2_tag, v2_buffer);
-               PARA_INFO_LOG("writing v2 tag (%lu bytes)\n", new_v2size);
-               ret = write_all(fd, (char *)v2_buffer, new_v2size);
-               free(v2_buffer);
-               if (ret < 0)
-                       goto out;
-       }
+       /*
+        * Turn off all options to avoid creating an extended header.  id321
+        * does not understand it.
+        */
+       id3_tag_options(v2_tag, ~0U, 0);
+       ret = replace_tags(v2_tag, tags);
+       if (ret < 0)
+               goto out;
+       new_v2size = id3_tag_render(v2_tag, NULL);
+       v2_buffer = para_malloc(new_v2size);
+       id3_tag_render(v2_tag, v2_buffer);
+       PARA_INFO_LOG("writing v2 tag (%lu bytes)\n", new_v2size);
+       ret = write_all(fd, (char *)v2_buffer, new_v2size);
+       free(v2_buffer);
+       if (ret < 0)
+               goto out;
        data_sz = mapsize - old_v2size;
        if (v1_tag && data_sz >= 128)
                data_sz -= 128;