aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/cue/cue_tag.c22
-rw-r--r--src/tag.c16
-rw-r--r--src/tag.h9
3 files changed, 26 insertions, 21 deletions
diff --git a/src/cue/cue_tag.c b/src/cue/cue_tag.c
index ce8202a81..6251b03e2 100644
--- a/src/cue/cue_tag.c
+++ b/src/cue/cue_tag.c
@@ -173,7 +173,6 @@ cue_tag_file( FILE* fp,
{
struct tag* cd_tag = NULL;
struct tag* track_tag = NULL;
- struct tag* merge_tag = NULL;
struct Cd* cd = NULL;
if (tnum > 256)
@@ -199,26 +198,7 @@ cue_tag_file( FILE* fp,
cd_delete(cd);
}
- if ((cd_tag != NULL) && (track_tag != NULL))
- {
- merge_tag = tag_merge(cd_tag, track_tag);
- tag_free(cd_tag);
- tag_free(track_tag);
- return merge_tag;
- }
-
- else if (cd_tag != NULL)
- {
- return cd_tag;
- }
-
- else if (track_tag != NULL)
- {
- return track_tag;
- }
-
- else
- return NULL;
+ return tag_merge_replace(cd_tag, track_tag);
}
struct tag*
diff --git a/src/tag.c b/src/tag.c
index 34205d20d..c34256b78 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -247,6 +247,22 @@ tag_merge(const struct tag *base, const struct tag *add)
return ret;
}
+struct tag *
+tag_merge_replace(struct tag *base, struct tag *add)
+{
+ if (add == NULL)
+ return base;
+
+ if (base == NULL)
+ return add;
+
+ struct tag *tag = tag_merge(base, add);
+ tag_free(base);
+ tag_free(add);
+
+ return tag;
+}
+
const char *
tag_get_value(const struct tag *tag, enum tag_type type)
{
diff --git a/src/tag.h b/src/tag.h
index 4b72dd187..75a86b387 100644
--- a/src/tag.h
+++ b/src/tag.h
@@ -166,6 +166,15 @@ struct tag *
tag_merge(const struct tag *base, const struct tag *add);
/**
+ * Merges the data from two tags. Any of the two may be NULL. Both
+ * are freed by this function.
+ *
+ * @return a newly allocated tag, which must be freed with tag_free()
+ */
+struct tag *
+tag_merge_replace(struct tag *base, struct tag *add);
+
+/**
* Returns true if the tag contains no items. This ignores the "time"
* attribute.
*/