From 60f73eb53707d42fbf870c62f043fa6471197863 Mon Sep 17 00:00:00 2001 From: Scott Wheeler Date: Sun, 3 Apr 2005 16:35:55 +0000 Subject: [PATCH] fix memory leaks git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@402891 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- ape/apeitem.cpp | 5 +++ ape/apeitem.h | 5 +++ examples/Makefile.am | 2 + examples/framelist.cpp | 83 ++++++++++++++++++++++++++---------------- mpc/mpcfile.cpp | 9 +++-- 5 files changed, 70 insertions(+), 34 deletions(-) diff --git a/ape/apeitem.cpp b/ape/apeitem.cpp index d4a25d29..7f364241 100644 --- a/ape/apeitem.cpp +++ b/ape/apeitem.cpp @@ -62,6 +62,11 @@ APE::Item::Item(const Item &item) d = new ItemPrivate(*item.d); } +APE::Item::~Item() +{ + delete d; +} + Item &APE::Item::operator=(const Item &item) { delete d; diff --git a/ape/apeitem.h b/ape/apeitem.h index f0a1d16a..63487655 100644 --- a/ape/apeitem.h +++ b/ape/apeitem.h @@ -69,6 +69,11 @@ namespace TagLib { */ Item(const Item &item); + /*! + * Destroys the item. + */ + virtual ~Item(); + /*! * Copies the contents of \a item into this item. */ diff --git a/examples/Makefile.am b/examples/Makefile.am index 71665b99..390a6272 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -11,6 +11,8 @@ INCLUDES = \ -I$(top_srcdir)/taglib/mpeg \ -I$(top_srcdir)/taglib/mpeg/id3v1 \ -I$(top_srcdir)/taglib/mpeg/id3v2 \ + -I$(top_srcdir)/taglib/ogg \ + -I$(top_srcdir)/taglib/ogg/vorbis \ -I$(top_srcdir)/taglib/bindings/c LDADD = ../libtag.la diff --git a/examples/framelist.cpp b/examples/framelist.cpp index 01dfea06..4a0079d9 100644 --- a/examples/framelist.cpp +++ b/examples/framelist.cpp @@ -27,6 +27,7 @@ #include #include +#include #include @@ -36,6 +37,9 @@ #include +#include +#include + using namespace std; using namespace TagLib; @@ -43,49 +47,66 @@ int main(int argc, char *argv[]) { // process the command line args - for(int i = 1; i < argc; i++) { cout << "******************** \"" << argv[i] << "\"********************" << endl; - MPEG::File f(argv[i]); + FileRef file(argv[i]); - ID3v2::Tag *id3v2tag = f.ID3v2Tag(); + if(dynamic_cast(file.file())) { + MPEG::File *f = static_cast(file.file()); - if(id3v2tag) { + ID3v2::Tag *id3v2tag = f->ID3v2Tag(); - cout << "ID3v2." - << id3v2tag->header()->majorVersion() - << "." - << id3v2tag->header()->revisionNumber() - << ", " - << id3v2tag->header()->tagSize() - << " bytes in tag" - << endl; + if(id3v2tag) { - ID3v2::FrameList::ConstIterator it = id3v2tag->frameList().begin(); - for(; it != id3v2tag->frameList().end(); it++) - cout << (*it)->frameID() << " - \"" << (*it)->toString() << "\"" << endl; - } - else - cout << "file does not have a valid id3v2 tag" << endl; + cout << "ID3v2." + << id3v2tag->header()->majorVersion() + << "." + << id3v2tag->header()->revisionNumber() + << ", " + << id3v2tag->header()->tagSize() + << " bytes in tag" + << endl; - cout << endl << "ID3v1" << endl; + ID3v2::FrameList::ConstIterator it = id3v2tag->frameList().begin(); + for(; it != id3v2tag->frameList().end(); it++) + cout << (*it)->frameID() << " - \"" << (*it)->toString() << "\"" << endl; + } + else + cout << "file does not have a valid id3v2 tag" << endl; - ID3v1::Tag *id3v1tag = f.ID3v1Tag(); + cout << endl << "ID3v1" << endl; - if(id3v1tag) { - cout << "title - \"" << id3v1tag->title() << "\"" << endl; - cout << "artist - \"" << id3v1tag->artist() << "\"" << endl; - cout << "album - \"" << id3v1tag->album() << "\"" << endl; - cout << "year - \"" << id3v1tag->year() << "\"" << endl; - cout << "comment - \"" << id3v1tag->comment() << "\"" << endl; - cout << "track - \"" << id3v1tag->track() << "\"" << endl; - cout << "genre - \"" << id3v1tag->genre() << "\"" << endl; - } - else - cout << "file does not have a valid id3v1 tag" << endl; + ID3v1::Tag *id3v1tag = f->ID3v1Tag(); + if(id3v1tag) { + cout << "title - \"" << id3v1tag->title() << "\"" << endl; + cout << "artist - \"" << id3v1tag->artist() << "\"" << endl; + cout << "album - \"" << id3v1tag->album() << "\"" << endl; + cout << "year - \"" << id3v1tag->year() << "\"" << endl; + cout << "comment - \"" << id3v1tag->comment() << "\"" << endl; + cout << "track - \"" << id3v1tag->track() << "\"" << endl; + cout << "genre - \"" << id3v1tag->genre() << "\"" << endl; + } + else + cout << "file does not have a valid id3v1 tag" << endl; + + } + else if(dynamic_cast(file.file())) { + Ogg::Vorbis::File *f = static_cast(file.file()); + Ogg::XiphComment *tag = f->tag(); + + const Ogg::FieldListMap fields = tag->fieldListMap(); + for(Ogg::FieldListMap::ConstIterator it = fields.begin(); it != fields.end(); ++it) { + cout << (*it).first << " -"; + StringList values = (*it).second; + for(StringList::ConstIterator valueIt = values.begin(); valueIt != values.end(); ++valueIt) + cout << " \"" << *valueIt << '"'; + cout << endl; + } + } + cout << endl; } } diff --git a/mpc/mpcfile.cpp b/mpc/mpcfile.cpp index ae77e37b..36b94340 100644 --- a/mpc/mpcfile.cpp +++ b/mpc/mpcfile.cpp @@ -54,6 +54,9 @@ public: ~FilePrivate() { delete ID3v1Tag; + delete APETag; + delete tag; + delete ID3v2Header; delete properties; } @@ -227,7 +230,7 @@ void MPC::File::remove(int tags) if(d->APETag) d->tag = d->APETag; else - d->tag = d->APETag = new APE::Tag(); + d->tag = d->APETag = new APE::Tag; } if(tags & ID3v2) { @@ -242,7 +245,7 @@ void MPC::File::remove(int tags) if(d->ID3v1Tag) d->tag = d->ID3v1Tag; else - d->tag = d->APETag = new APE::Tag(); + d->tag = d->APETag = new APE::Tag; } } @@ -284,7 +287,7 @@ void MPC::File::read(bool readProperties, Properties::ReadStyle /* propertiesSty if(d->hasAPE) d->tag = d->APETag; else - d->tag = d->APETag = new APE::Tag(); + d->tag = d->APETag = new APE::Tag; } } -- 2.40.0