if (!val || !*val)
return 0;
fr = id3_frame_new(id);
- PARA_DEBUG_LOG("frame desc: %s, %d fields\n", fr->description, fr->nfields);
+ PARA_DEBUG_LOG("frame desc: %s, %u fields\n", fr->description, fr->nfields);
/* Frame 0 contains the encoding. We always use UTF-8. */
field = id3_frame_field(fr, 0);
static void free_tag(struct id3_tag *id3_t)
{
int i, j;
+
+ if (!id3_t)
+ return;
for (i = 0; i < id3_t->nframes; i++) {
struct id3_frame *fr = id3_t->frames[i];
for (j = 0; j < fr->nfields; j++) {
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;
ret = write_all(fd, (char *)v1_buffer, 128);
}
out:
- if (v1_tag)
- free_tag(v1_tag);
- if (v2_tag)
- free_tag(v2_tag);
+ free_tag(v1_tag);
+ free_tag(v2_tag);
return ret;
}
header_mode(&header), tag_versions[ret]);
return 1;
err_out:
- PARA_ERROR_LOG("%s\n", para_strerror(-ret));
free(afhi->chunk_table);
return ret;
}