diff options
-rw-r--r-- | src/cue/cue_tag.c | 22 | ||||
-rw-r--r-- | src/tag.c | 16 | ||||
-rw-r--r-- | src/tag.h | 9 |
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* @@ -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) { @@ -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. */ |