diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-07-08 14:12:05 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-07-08 14:12:05 +0300 |
commit | e906e318c552d89fdd7d56045cc0fe15a5853547 (patch) | |
tree | 448892b20487e6929c4971ab4aec64f4ead6508b | |
parent | 3d82867917b5a5d517a0b238b7f0dbd244855dec (diff) | |
download | idest-e906e318c552d89fdd7d56045cc0fe15a5853547.tar.gz idest-e906e318c552d89fdd7d56045cc0fe15a5853547.tar.bz2 |
Make sure no old tag instances remain after modifications.
* src/guile.c (guile_transform): Remove existing tags prior to
installing new ones.
* src/idop.c (set_tags): Remove all existing instances of the tag
except the first one prior to altering it.
* libid3tag/frame.c: Add type casts.
* libid3tag/render.c: Likewise.
* libid3tag/tag.c: Likewise.
-rw-r--r-- | libid3tag/frame.c | 30 | ||||
-rw-r--r-- | libid3tag/render.c | 2 | ||||
-rw-r--r-- | libid3tag/tag.c | 2 | ||||
-rw-r--r-- | src/guile.c | 6 | ||||
-rw-r--r-- | src/idop.c | 8 |
5 files changed, 30 insertions, 18 deletions
diff --git a/libid3tag/frame.c b/libid3tag/frame.c index bf4e7a4..21f987a 100644 --- a/libid3tag/frame.c +++ b/libid3tag/frame.c @@ -274,11 +274,8 @@ id3_frame_parse(id3_byte_t const **ptr, id3_length_t length, unsigned int version) { struct id3_frame *frame = 0; - id3_byte_t const *id, - *end, - *data; - id3_length_t size, - decoded_length = 0; + id3_byte_t const *id, *end, *data; + id3_length_t size, decoded_length = 0; int flags = 0, group_id = 0, encryption_method = 0; @@ -295,7 +292,7 @@ id3_frame_parse(id3_byte_t const **ptr, id3_length_t length, if (length < 6) goto fail; - compat = id3_compat_lookup(id, 3); + compat = id3_compat_lookup((char*)id, 3); *ptr += 3; size = id3_parse_uint(ptr, 3); @@ -311,7 +308,7 @@ id3_frame_parse(id3_byte_t const **ptr, id3_length_t length, if (length < 10) goto fail; - compat = id3_compat_lookup(id, 4); + compat = id3_compat_lookup((char*)id, 4); *ptr += 4; size = id3_parse_uint(ptr, 4); @@ -324,8 +321,9 @@ id3_frame_parse(id3_byte_t const **ptr, id3_length_t length, if (flags & (ID3_FRAME_FLAG_FORMATFLAGS & ~0x00e0)) { frame = - unparseable(id, ptr, end - *ptr, 0, 0, - 0, 0); + unparseable((char*)id, ptr, + end - *ptr, 0, 0, + 0, 0); goto done; } @@ -368,14 +366,14 @@ id3_frame_parse(id3_byte_t const **ptr, id3_length_t length, */ if (compat && compat->equiv) - id = compat->equiv; + id = (id3_byte_t*) compat->equiv; else if (ID3_TAG_VERSION_MAJOR(version) == 2) { xid[0] = 'Y'; xid[1] = id[0]; xid[2] = id[1]; xid[3] = id[2]; - id = xid; + id = (id3_byte_t*) xid; flags |= ID3_FRAME_FLAG_TAGALTERPRESERVATION | @@ -398,7 +396,8 @@ id3_frame_parse(id3_byte_t const **ptr, id3_length_t length, (ID3_FRAME_FLAG_FORMATFLAGS & ~ID3_FRAME_FLAG_KNOWNFLAGS)) { frame = - unparseable(id, ptr, end - *ptr, flags, 0, 0, + unparseable((char*) id, + ptr, end - *ptr, flags, 0, 0, 0); goto done; } @@ -448,7 +447,8 @@ id3_frame_parse(id3_byte_t const **ptr, id3_length_t length, } if (flags & ID3_FRAME_FLAG_ENCRYPTION) { - frame = unparseable(id, &data, end - data, flags, + frame = unparseable((char*) id, + &data, end - data, flags, group_id, encryption_method, decoded_length); goto done; @@ -474,7 +474,7 @@ id3_frame_parse(id3_byte_t const **ptr, id3_length_t length, */ if (compat && !compat->equiv) { - frame = obsolete(id, data, end - data); + frame = obsolete((char*) id, data, end - data); goto done; } @@ -482,7 +482,7 @@ id3_frame_parse(id3_byte_t const **ptr, id3_length_t length, * generate the internal frame structure */ - frame = id3_frame_new(id); + frame = id3_frame_new((char*) id); if (frame) { frame->flags = flags; frame->group_id = group_id; diff --git a/libid3tag/render.c b/libid3tag/render.c index 431c28d..8867cef 100644 --- a/libid3tag/render.c +++ b/libid3tag/render.c @@ -129,7 +129,7 @@ id3_render_latin1(id3_byte_t ** ptr, id3_length_t size; if (latin1 == 0) - latin1 = ""; + latin1 = (id3_latin1_t*) ""; size = id3_latin1_size(latin1); if (!terminate) diff --git a/libid3tag/tag.c b/libid3tag/tag.c index c23a967..50d7cb1 100644 --- a/libid3tag/tag.c +++ b/libid3tag/tag.c @@ -369,7 +369,7 @@ v1_attachstr(struct id3_tag *tag, char const *id, goto fail; if (text) - id3_latin1_decode(text, ucs4); + id3_latin1_decode((id3_byte_t*) text, ucs4); else id3_ucs4_putnumber(ucs4, number); diff --git a/src/guile.c b/src/guile.c index 992b5d4..cd95024 100644 --- a/src/guile.c +++ b/src/guile.c @@ -310,8 +310,12 @@ guile_transform(const char *file, struct id3_tag *tag) result = guile_apply_main(file, tag); - if (scm_is_pair(result)) + if (scm_is_pair(result)) { + /* Remove all existing tags */ + id3_tag_clearframes(tag); + /* Replace them with the new ones */ return scm_to_tag(result, tag); + } return 0; } @@ -114,6 +114,14 @@ set_tags(const char *name) frame = id3_frame_new(item->id); if (id3_tag_attachframe(tag, frame)) error(1, 0, "cannot attach new frame"); + } else { + struct id3_frame *fp; + + while (fp = id3_tag_findframe(tag, item->id, + 1)) { + id3_tag_detachframe(tag, fp); + id3_frame_delete(fp); + } } set_frame_value(frame, item->v.value); modified |= 1; |