diff options
author | wr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b> | 2005-02-11 09:40:09 +0000 |
---|---|---|
committer | wr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b> | 2005-02-11 09:40:09 +0000 |
commit | 4e06beebe60a4bdc3c8c47e826bda74c4a98d023 (patch) | |
tree | b0485929d5bdbc78ba7fe4231f263e29c580a381 | |
parent | dd1334ae324e6ac56909266ba150cd11aea0d6ea (diff) | |
download | vdr-plugin-muggle-4e06beebe60a4bdc3c8c47e826bda74c4a98d023.tar.gz vdr-plugin-muggle-4e06beebe60a4bdc3c8c47e826bda74c4a98d023.tar.bz2 |
fix many memory leaks, add missing copy constructor to mgOrder
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/trunk/muggle-plugin@478 e10066b5-e1e2-0310-b819-94efdf66514b
-rw-r--r-- | mg_db.c | 9 | ||||
-rw-r--r-- | mg_order.c | 33 | ||||
-rw-r--r-- | mg_order.h | 8 | ||||
-rw-r--r-- | muggle.c | 5 | ||||
-rw-r--r-- | vdr_decoder_flac.c | 1 | ||||
-rw-r--r-- | vdr_menu.c | 30 | ||||
-rw-r--r-- | vdr_menu.h | 1 | ||||
-rw-r--r-- | vdr_player.c | 11 |
8 files changed, 66 insertions, 32 deletions
@@ -648,11 +648,11 @@ static char *mg_readline(FILE *f) static const char *FINDCMD = "cd '%s' 2>/dev/null && find -follow -name '%s' -print 2>/dev/null"; static string -GdFindFile( string tld, string mp3file ) +GdFindFile( const char* tld, string mp3file ) { string result = ""; char *cmd = 0; - asprintf( &cmd, FINDCMD, tld.c_str(), mp3file.c_str() ); + asprintf( &cmd, FINDCMD, tld, mp3file.c_str() ); FILE *p = popen( cmd, "r" ); if (p) { @@ -670,7 +670,7 @@ GdFindFile( string tld, string mp3file ) string mgContentItem::getSourceFile(bool AbsolutePath) const { - const string& tld = the_setup.ToplevelDir; + const char* tld = the_setup.ToplevelDir; string result=""; if (AbsolutePath) result = tld; if (the_setup.GdCompatibility) @@ -906,7 +906,8 @@ void mgSelection::refreshValues () const { assert(this); - if (!m_db) return; + if (!m_db) + return; if (m_current_values.empty()) { mgOrder o1 = order; @@ -4,6 +4,8 @@ #include <stdio.h> +const char * EMPTY = "XNICHTGESETZTX"; + bool iskeyGenre(mgKeyTypes kt) { return kt>=keyGenre1 && kt <= keyGenres; @@ -596,6 +598,11 @@ mgOrder::mgOrder() setKey (2,keyTrack); } +mgOrder::~mgOrder() +{ + truncate(0); +} + mgKey* mgOrder::Key(unsigned int idx) const { @@ -626,6 +633,18 @@ const mgOrder& mgOrder::operator=(const mgOrder& from) { clear(); + InitFrom(from); + return *this; +} + +mgOrder::mgOrder(const mgOrder &from) +{ + InitFrom(from); +} + +void +mgOrder::InitFrom(const mgOrder &from) +{ for (unsigned int i = 0; i < from.size();i++) { mgKey *k = ktGenerate(from.getKeyType(i),m_db); @@ -633,14 +652,6 @@ mgOrder::operator=(const mgOrder& from) Keys.push_back(k); } if (from.m_db) setDB(from.m_db); - return *this; -} - -mgOrder& -mgOrder::operator+=(mgKey* k) { - k->setdb(m_db); - Keys.push_back(k); - return *this; } string @@ -769,6 +780,12 @@ mgOrder::truncate(unsigned int i) } void +mgOrder::clear() +{ + truncate(0); +} + +void mgOrder::clean() { // remove double entries: @@ -16,7 +16,7 @@ typedef list<string> strlist; strlist& operator+=(strlist&a, strlist b); -static const string EMPTY = "XNICHTGESETZTX"; +extern const char * EMPTY; //! \brief adds string n to string s, using string sep to separate them string& addsep (string & s, string sep, string n); @@ -137,17 +137,19 @@ const unsigned int MaxKeys = 20; class mgOrder { public: mgOrder(); + mgOrder(const mgOrder &from); mgOrder(mgValmap& nv, char *prefix); mgOrder(vector<mgKeyTypes> kt); + ~mgOrder(); + void InitFrom(const mgOrder &from); void setDB(MYSQL *db); mgParts Parts(unsigned int level,bool orderby=true) const; const mgOrder& operator=(const mgOrder& from); - mgOrder& operator+=(mgKey* k); mgKey*& operator[](unsigned int idx); unsigned int size() const { return Keys.size(); } void truncate(unsigned int i); bool empty() const { return Keys.empty(); } - void clear() { Keys.clear();} + void clear(); void clean(); mgKey* Key(unsigned int idx) const; mgKey* find(const mgKeyTypes kt) ; @@ -64,6 +64,11 @@ mgMuggle::mgMuggle (void) mgMuggle::~mgMuggle () { if (main) main->SaveState(); + free(the_setup.DbHost); + free(the_setup.DbName); + free(the_setup.DbUser); + free(the_setup.DbPass); + free(the_setup.ToplevelDir); } diff --git a/vdr_decoder_flac.c b/vdr_decoder_flac.c index 76d15dd..2861d4e 100644 --- a/vdr_decoder_flac.c +++ b/vdr_decoder_flac.c @@ -106,6 +106,7 @@ bool mgFlacDecoder::clean() delete[] m_reservoir[1]; } delete[] m_reservoir; + m_reservoir = 0; // why false? true? return true; @@ -269,9 +269,10 @@ mgMainMenu::SaveState() mgMainMenu::mgMainMenu ():cOsdMenu ("",25) { m_Status = new mgStatus(this); - m_message = NULL; - moveselection = NULL; - external_commands = NULL; + m_message = 0; + moveselection = 0; + m_root = 0; + external_commands = 0; queue_playing=false; instant_playing=false; play_collection = tr("play"); @@ -331,14 +332,14 @@ mgMainMenu::mgMainMenu ():cOsdMenu ("",25) UseNormalSelection (); unsigned int posi = selection()->gotoPosition(); LoadExternalCommands(); // before AddMenu() - mgMenu *root = new mgTree; - root->TreeRedAction = mgActions(nmain.getuint("TreeRedAction")); - root->TreeGreenAction = mgActions(nmain.getuint("TreeGreenAction")); - root->TreeYellowAction = mgActions(nmain.getuint("TreeYellowAction")); - root->CollRedAction = mgActions(nmain.getuint("CollRedAction")); - root->CollGreenAction = mgActions(nmain.getuint("CollGreenAction")); - root->CollYellowAction = mgActions(nmain.getuint("CollYellowAction")); - AddMenu (root,posi); + m_root = new mgTree; + m_root->TreeRedAction = mgActions(nmain.getuint("TreeRedAction")); + m_root->TreeGreenAction = mgActions(nmain.getuint("TreeGreenAction")); + m_root->TreeYellowAction = mgActions(nmain.getuint("TreeYellowAction")); + m_root->CollRedAction = mgActions(nmain.getuint("CollRedAction")); + m_root->CollGreenAction = mgActions(nmain.getuint("CollGreenAction")); + m_root->CollYellowAction = mgActions(nmain.getuint("CollYellowAction")); + AddMenu (m_root,posi); //SetCurrent (Get (posi)); @@ -425,8 +426,11 @@ mgMainMenu::LoadExternalCommands() mgMainMenu::~mgMainMenu() { delete m_Status; - if (moveselection) - delete moveselection; + delete moveselection; + delete m_root; + delete external_commands; + for (unsigned int i=0;i<orders.size();i++) + delete orders[i]; } void @@ -74,6 +74,7 @@ class mgMainMenu:public cOsdMenu unsigned int m_current_order; void DumpOrders(mgValmap& nv); void LoadOrders(mgValmap& nv); + mgMenu *m_root; public: void AddOrder(); void DeleteOrder(); diff --git a/vdr_player.c b/vdr_player.c index 292f07c..a7fb727 100644 --- a/vdr_player.c +++ b/vdr_player.c @@ -244,6 +244,7 @@ mgPCMPlayer::~mgPCMPlayer () { Detach (); delete m_playlist; + delete m_current; delete m_ringbuffer; } @@ -253,7 +254,7 @@ mgPCMPlayer::PlayTrack() mgContentItem * newcurr = m_playlist->getCurrentTrack (); if (newcurr) { - if (m_current) delete m_current; + delete m_current; m_current = new mgContentItem(newcurr); } Play (); @@ -271,7 +272,7 @@ mgPCMPlayer::Activate (bool on) Start (); m_started = true; - if (m_current) delete m_current; + delete m_current; m_current = 0; m_playmode_mutex.Lock (); @@ -602,6 +603,7 @@ mgPCMPlayer::Action (void) if (m_decoder) { // who deletes decoder? m_decoder->stop (); + delete m_decoder; m_decoder = 0; } @@ -704,6 +706,7 @@ mgPCMPlayer::Action (void) if (m_decoder) { // who deletes decoder? m_decoder->stop (); + delete m_decoder; m_decoder = 0; } @@ -768,7 +771,7 @@ bool mgPCMPlayer::SkipFile (int step) { newcurr = m_playlist->getCurrentTrack (); if (newcurr) { - if (m_current) delete m_current; + delete m_current; m_current = new mgContentItem(newcurr); } } @@ -866,7 +869,7 @@ mgPCMPlayer::Goto (int index, bool still) { Lock (); StopPlay (); - if (m_current) delete m_current; + delete m_current; m_current = new mgContentItem(next); Play (); Unlock (); |