summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b>2005-02-11 09:40:09 +0000
committerwr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b>2005-02-11 09:40:09 +0000
commit4e06beebe60a4bdc3c8c47e826bda74c4a98d023 (patch)
treeb0485929d5bdbc78ba7fe4231f263e29c580a381
parentdd1334ae324e6ac56909266ba150cd11aea0d6ea (diff)
downloadvdr-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.c9
-rw-r--r--mg_order.c33
-rw-r--r--mg_order.h8
-rw-r--r--muggle.c5
-rw-r--r--vdr_decoder_flac.c1
-rw-r--r--vdr_menu.c30
-rw-r--r--vdr_menu.h1
-rw-r--r--vdr_player.c11
8 files changed, 66 insertions, 32 deletions
diff --git a/mg_db.c b/mg_db.c
index 4465d0d..2a3878c 100644
--- a/mg_db.c
+++ b/mg_db.c
@@ -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;
diff --git a/mg_order.c b/mg_order.c
index 93463b5..64cb379 100644
--- a/mg_order.c
+++ b/mg_order.c
@@ -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:
diff --git a/mg_order.h b/mg_order.h
index 900b498..576f2c4 100644
--- a/mg_order.h
+++ b/mg_order.h
@@ -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) ;
diff --git a/muggle.c b/muggle.c
index 179909e..28b0729 100644
--- a/muggle.c
+++ b/muggle.c
@@ -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;
diff --git a/vdr_menu.c b/vdr_menu.c
index 5d3d1cd..d37b899 100644
--- a/vdr_menu.c
+++ b/vdr_menu.c
@@ -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
diff --git a/vdr_menu.h b/vdr_menu.h
index ddd9787..6cabe29 100644
--- a/vdr_menu.h
+++ b/vdr_menu.h
@@ -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 ();