+static int vorbis_make_meta_packet(struct taginfo *tags, ogg_packet *result)
+{
+ vorbis_comment vc;
+ int ret;
+
+ vorbis_comment_init(&vc);
+ vorbis_comment_add_tag(&vc, "artist", tags->artist);
+ vorbis_comment_add_tag(&vc, "title", tags->title);
+ vorbis_comment_add_tag(&vc, "album", tags->album);
+ vorbis_comment_add_tag(&vc, "year", tags->year);
+ vorbis_comment_add_tag(&vc, "comment", tags->comment);
+ ret = vorbis_commentheader_out(&vc, result);
+ vorbis_comment_clear(&vc);
+ if (ret != 0)
+ return -E_VORBIS_COMMENTHEADER;
+ return 1;
+}
+
+static int vorbis_rewrite_tags(const char *map, size_t mapsize,
+ struct taginfo *tags, int output_fd,
+ __a_unused const char *filename)
+{
+ int ret;
+ ogg_packet packet;
+
+ ret = vorbis_make_meta_packet(tags, &packet);
+ if (ret < 0)
+ return ret;
+ ret = ogg_rewrite_tags(map, mapsize, output_fd, (char *)packet.packet,
+ packet.bytes);
+ free(packet.packet);
+ return ret;
+}