From a7001dfd139fbb9d5cf5434fc40370f8da0cf04c Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 28 Jul 2012 12:35:00 +0000 Subject: perversive error reporting schema in DATABASELINK removed git-svn-id: http://svn.miranda-ng.org/main/trunk@1223 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Db3x/src/commonheaders.h | 1 + plugins/Db3x/src/init.cpp | 77 +++++++++------------------------ plugins/Db3x_mmap/src/commonheaders.h | 1 + plugins/Db3x_mmap/src/init.cpp | 55 +++++++++-------------- plugins/Dbx_mmap_SA/src/commonheaders.h | 1 + plugins/Dbx_mmap_SA/src/init.cpp | 77 +++++++++------------------------ plugins/Dbx_tree/DatabaseLink.cpp | 29 +++++-------- plugins/testplugin/testplug.c | 10 ++--- 8 files changed, 79 insertions(+), 172 deletions(-) (limited to 'plugins') diff --git a/plugins/Db3x/src/commonheaders.h b/plugins/Db3x/src/commonheaders.h index 5175ad67b9..e12db161bc 100644 --- a/plugins/Db3x/src/commonheaders.h +++ b/plugins/Db3x/src/commonheaders.h @@ -39,6 +39,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include +#include #include #include diff --git a/plugins/Db3x/src/init.cpp b/plugins/Db3x/src/init.cpp index 6f021aa283..513731b824 100644 --- a/plugins/Db3x/src/init.cpp +++ b/plugins/Db3x/src/init.cpp @@ -46,56 +46,23 @@ LIST g_Dbs(1, (LIST::FTSortFunc)HandleKeySort); ///////////////////////////////////////////////////////////////////////////////////////// // returns 0 if the profile is created, EMKPRF* -static int makeDatabase(const TCHAR *profile, int *error) +static int makeDatabase(const TCHAR *profile) { - CDb3x *tmp = new CDb3x(profile); - if (tmp->Create() == ERROR_SUCCESS) { - tmp->CreateDbHeaders(); - delete tmp; - return 0; - } - delete tmp; - if (error != NULL) *error = EMKPRF_CREATEFAILED; - return 1; + std::auto_ptr db(new CDb3x(profile)); + if (db->Create() != ERROR_SUCCESS) + return EMKPRF_CREATEFAILED; + + return db->CreateDbHeaders(); } // returns 0 if the given profile has a valid header -static int grokHeader(const TCHAR *profile, int *error) +static int grokHeader(const TCHAR *profile) { - CDb3x *tmp = new CDb3x(profile); - if (tmp->Load(true) != ERROR_SUCCESS) { - delete tmp; - if (error != NULL) *error = EGROKPRF_CANTREAD; - return 1; - } + std::auto_ptr db(new CDb3x(profile)); + if (db->Load(true) != ERROR_SUCCESS) + return EGROKPRF_CANTREAD; - int chk = tmp->CheckDbHeaders(); - delete tmp; - if ( chk == 0 ) { - // all the internal tests passed, hurrah - if (error != NULL) *error = 0; - return 0; - } - - // didn't pass at all, or some did. - switch ( chk ) { - case 1: - // "Miranda ICQ DB" wasn't present - if (error != NULL) *error = EGROKPRF_UNKHEADER; - break; - - case 2: - // header was present, but version information newer - if (error != NULL) *error = EGROKPRF_VERNEWER; - break; - - case 3: - // header/version OK, internal data missing - if (error != NULL) *error = EGROKPRF_DAMAGED; - break; - } - - return 1; + return db->CheckDbHeaders(); } // returns 0 if all the APIs are injected otherwise, 1 @@ -104,14 +71,12 @@ static MIDatabase* LoadDatabase(const TCHAR *profile) // set the memory, lists & UTF8 manager mir_getLP( &pluginInfo ); - CDb3x* db = new CDb3x(profile); - if (db->Load(false) != ERROR_SUCCESS) { - delete db; + std::auto_ptr db(new CDb3x(profile)); + if (db->Load(false) != ERROR_SUCCESS) return NULL; - } - g_Dbs.insert(db); - return db; + g_Dbs.insert(db.get()); + return db.release(); } static int UnloadDatabase(MIDatabase* db) @@ -121,24 +86,22 @@ static int UnloadDatabase(MIDatabase* db) return 0; } -MIDatabaseChecker* CheckDb(const TCHAR* ptszFileName, int *error) +MIDatabaseChecker* CheckDb(const TCHAR* profile, int *error) { - CDb3x *tmp = new CDb3x(ptszFileName); - if (tmp->Load(true) != ERROR_SUCCESS) { - delete tmp; + std::auto_ptr db(new CDb3x(profile)); + if (db->Load(true) != ERROR_SUCCESS) { if (error != NULL) *error = EGROKPRF_CANTREAD; return NULL; } - int chk = tmp->CheckDbHeaders(); + int chk = db->CheckDbHeaders(); if (chk != ERROR_SUCCESS) { - delete tmp; *error = chk; return NULL; } *error = 0; - return tmp; + return db.release(); } static DATABASELINK dblink = diff --git a/plugins/Db3x_mmap/src/commonheaders.h b/plugins/Db3x_mmap/src/commonheaders.h index 8fe5b1f87f..a0ad519e4d 100644 --- a/plugins/Db3x_mmap/src/commonheaders.h +++ b/plugins/Db3x_mmap/src/commonheaders.h @@ -36,6 +36,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include +#include #ifndef __GNUC__ #include #endif diff --git a/plugins/Db3x_mmap/src/init.cpp b/plugins/Db3x_mmap/src/init.cpp index d1ad13f859..2e2490dc66 100644 --- a/plugins/Db3x_mmap/src/init.cpp +++ b/plugins/Db3x_mmap/src/init.cpp @@ -46,32 +46,23 @@ LIST g_Dbs(1, (LIST::FTSortFunc)HandleKeySort); ///////////////////////////////////////////////////////////////////////////////////////// // returns 0 if the profile is created, EMKPRF* -static int makeDatabase(const TCHAR *profile, int *error) +static int makeDatabase(const TCHAR *profile) { - CDb3Mmap *tmp = new CDb3Mmap(profile); - if (tmp->Create() == ERROR_SUCCESS) { - tmp->CreateDbHeaders(); - delete tmp; - return 0; - } - delete tmp; - if (error != NULL) *error = EMKPRF_CREATEFAILED; - return 1; + std::auto_ptr db( new CDb3Mmap(profile)); + if (db->Create() != ERROR_SUCCESS) + return EMKPRF_CREATEFAILED; + + return db->CreateDbHeaders(); } // returns 0 if the given profile has a valid header -static int grokHeader(const TCHAR *profile, int *error) +static int grokHeader(const TCHAR *profile) { - CDb3Mmap *tmp = new CDb3Mmap(profile); - if (tmp->Load(true) != ERROR_SUCCESS) { - delete tmp; - if (error != NULL) *error = EGROKPRF_CANTREAD; - return 1; - } + std::auto_ptr db( new CDb3Mmap(profile)); + if (db->Load(true) != ERROR_SUCCESS) + return EGROKPRF_CANTREAD; - *error = tmp->CheckDbHeaders(); - delete tmp; - return (*error == 0) ? 0 : 1; + return db->CheckDbHeaders(); } // returns 0 if all the APIs are injected otherwise, 1 @@ -80,14 +71,12 @@ static MIDatabase* LoadDatabase(const TCHAR *profile) // set the memory, lists & UTF8 manager mir_getLP( &pluginInfo ); - CDb3Mmap* db = new CDb3Mmap(profile); - if (db->Load(false) != ERROR_SUCCESS) { - delete db; + std::auto_ptr db( new CDb3Mmap(profile)); + if (db->Load(false) != ERROR_SUCCESS) return NULL; - } - g_Dbs.insert(db); - return db; + g_Dbs.insert(db.get()); + return db.release(); } static int UnloadDatabase(MIDatabase* db) @@ -97,24 +86,22 @@ static int UnloadDatabase(MIDatabase* db) return 0; } -MIDatabaseChecker* CheckDb(const TCHAR* ptszFileName, int *error) +MIDatabaseChecker* CheckDb(const TCHAR* profile, int *error) { - CDb3Mmap *tmp = new CDb3Mmap(ptszFileName); - if (tmp->Load(true) != ERROR_SUCCESS) { - delete tmp; - if (error != NULL) *error = EGROKPRF_CANTREAD; + std::auto_ptr db( new CDb3Mmap(profile)); + if (db->Load(true) != ERROR_SUCCESS) { + *error = EGROKPRF_CANTREAD; return NULL; } - int chk = tmp->CheckDbHeaders(); + int chk = db->CheckDbHeaders(); if (chk != ERROR_SUCCESS) { - delete tmp; *error = chk; return NULL; } *error = 0; - return tmp; + return db.release(); } static DATABASELINK dblink = diff --git a/plugins/Dbx_mmap_SA/src/commonheaders.h b/plugins/Dbx_mmap_SA/src/commonheaders.h index 27c7036adf..da38757088 100644 --- a/plugins/Dbx_mmap_SA/src/commonheaders.h +++ b/plugins/Dbx_mmap_SA/src/commonheaders.h @@ -43,6 +43,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include +#include //miranda headers #include diff --git a/plugins/Dbx_mmap_SA/src/init.cpp b/plugins/Dbx_mmap_SA/src/init.cpp index a59ae1bc09..f7d96822a8 100644 --- a/plugins/Dbx_mmap_SA/src/init.cpp +++ b/plugins/Dbx_mmap_SA/src/init.cpp @@ -49,56 +49,25 @@ LIST g_Dbs(1, (LIST::FTSortFunc)HandleKeySort); ///////////////////////////////////////////////////////////////////////////////////////// // returns 0 if the profile is created, EMKPRF* -static int makeDatabase(const TCHAR *profile, int *error) +static int makeDatabase(const TCHAR *profile) { - CDdxMmapSA *tmp = new CDdxMmapSA(profile); - if (tmp->Create() == ERROR_SUCCESS) { - tmp->CreateDbHeaders(); - delete tmp; + std::auto_ptr db( new CDdxMmapSA(profile)); + if (db->Create() == ERROR_SUCCESS) { + db->CreateDbHeaders(); return 0; } - delete tmp; - if (error != NULL) *error = EMKPRF_CREATEFAILED; - return 1; + + return EMKPRF_CREATEFAILED; } // returns 0 if the given profile has a valid header -static int grokHeader(const TCHAR *profile, int *error) +static int grokHeader(const TCHAR *profile) { - CDdxMmapSA *tmp = new CDdxMmapSA(profile); - if (tmp->Load(true) != ERROR_SUCCESS) { - delete tmp; - if (error != NULL) *error = EGROKPRF_CANTREAD; - return 1; - } + std::auto_ptr db( new CDdxMmapSA(profile)); + if (db->Load(true) != ERROR_SUCCESS) + return EGROKPRF_CANTREAD; - int chk = tmp->CheckDbHeaders(); - delete tmp; - if ( chk == 0 ) { - // all the internal tests passed, hurrah - if (error != NULL) *error = 0; - return 0; - } - - // didn't pass at all, or some did. - switch ( chk ) { - case 1: - // "Miranda ICQ DB" wasn't present - if (error != NULL) *error = EGROKPRF_UNKHEADER; - break; - - case 2: - // header was present, but version information newer - if (error != NULL) *error = EGROKPRF_VERNEWER; - break; - - case 3: - // header/version OK, internal data missing - if (error != NULL) *error = EGROKPRF_DAMAGED; - break; - } - - return 1; + return db->CheckDbHeaders(); } // returns 0 if all the APIs are injected otherwise, 1 @@ -107,14 +76,12 @@ static MIDatabase* LoadDatabase(const TCHAR *profile) // set the memory, lists & UTF8 manager mir_getLP( &pluginInfo ); - CDdxMmapSA* db = new CDdxMmapSA(profile); - if (db->Load(false) != ERROR_SUCCESS) { - delete db; + std::auto_ptr db( new CDdxMmapSA(profile)); + if (db->Load(false) != ERROR_SUCCESS) return NULL; - } - g_Dbs.insert(db); - return db; + g_Dbs.insert(db.get()); + return db.release(); } static int UnloadDatabase(MIDatabase* db) @@ -124,24 +91,22 @@ static int UnloadDatabase(MIDatabase* db) return 0; } -MIDatabaseChecker* CheckDb(const TCHAR* ptszFileName, int *error) +MIDatabaseChecker* CheckDb(const TCHAR* profile, int *error) { - CDdxMmapSA *tmp = new CDdxMmapSA(ptszFileName); - if (tmp->Load(true) != ERROR_SUCCESS) { - delete tmp; - if (error != NULL) *error = EGROKPRF_CANTREAD; + std::auto_ptr db( new CDdxMmapSA(profile)); + if (db->Load(true) != ERROR_SUCCESS) { + *error = EGROKPRF_CANTREAD; return NULL; } - int chk = tmp->CheckDbHeaders(); + int chk = db->CheckDbHeaders(); if (chk != ERROR_SUCCESS) { - delete tmp; *error = chk; return NULL; } *error = 0; - return tmp; + return db.release(); } static DATABASELINK dblink = diff --git a/plugins/Dbx_tree/DatabaseLink.cpp b/plugins/Dbx_tree/DatabaseLink.cpp index ec71cdeca1..579076613d 100644 --- a/plugins/Dbx_tree/DatabaseLink.cpp +++ b/plugins/Dbx_tree/DatabaseLink.cpp @@ -34,13 +34,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Note: Do not initialise internal data structures at this point! Returns: 0 on success, non zero on failure - error contains extended error information, see EMKPRF_* */ -static int makeDatabase(const TCHAR *profile, int* error) -{ - if (gDataBase) delete gDataBase; - gDataBase = new CDataBase(profile); - *error = gDataBase->CreateDB(); - return *error; +static int makeDatabase(const TCHAR *profile) +{ + std::auto_ptr db( new CDataBase(profile)); + return gDataBase->CreateDB(); } /* @@ -53,13 +51,10 @@ static int makeDatabase(const TCHAR *profile, int* error) etc. Returns: 0 on success, non zero on failure */ -static int grokHeader(const TCHAR *profile, int* error) +static int grokHeader(const TCHAR *profile) { - if (gDataBase) delete gDataBase; - gDataBase = new CDataBase(profile); - - *error = gDataBase->CheckDB(); - return *error; + std::auto_ptr db( new CDataBase(profile)); + return gDataBase->CheckDB(); } /* @@ -70,9 +65,7 @@ Returns: 0 on success, nonzero on failure static MIDatabase* LoadDatabase(const TCHAR *profile) { - if (gDataBase) delete gDataBase; gDataBase = new CDataBase(profile); - gDataBase->OpenDB(); return gDataBase; } @@ -82,12 +75,12 @@ Affect: The database plugin should shutdown, unloading things from the core and Returns: 0 on success, nonzero on failure Note: Unload() might be called even if Load(void) was never called, wasLoaded is set to 1 if Load(void) was ever called. */ + static int UnloadDatabase(MIDatabase* db) { - if (gDataBase) - delete gDataBase; - - gDataBase = NULL; + if (gDataBase == db) + gDataBase = NULL; + delete db; return 0; } diff --git a/plugins/testplugin/testplug.c b/plugins/testplugin/testplug.c index 219f10f81e..46f9d0f398 100644 --- a/plugins/testplugin/testplug.c +++ b/plugins/testplugin/testplug.c @@ -48,10 +48,6 @@ __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) } extern "C" __declspec(dllexport) const MUUID interfaces[] = {MIID_TESTPLUGIN, MIID_LAST}; -__declspec(dllexport) const MUUID* MirandaPluginInterfaces(void) -{ - return interfaces; -} int __declspec(dllexport) Load(PLUGINLINK *link) { @@ -64,12 +60,12 @@ int __declspec(dllexport) Load(PLUGINLINK *link) mi.flags=0; mi.hIcon=LoadSkinnedIcon(SKINICON_OTHER_MIRANDA); mi.pszName=LPGEN("&Test Plugin..."); - mi.pszService="TestPlug/MenuCommand"; - CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi); + mi.pszService ="TestPlug/MenuCommand"; + Menu_AddMenuItem(&mi); return 0; } int __declspec(dllexport) Unload(void) { return 0; -} \ No newline at end of file +} -- cgit v1.2.3