From b81bd804e435e76592f9f281b717c696c3618fa2 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 15 Mar 2015 15:30:03 +0000 Subject: initial release git-svn-id: http://svn.miranda-ng.org/main/trunk@12409 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Dbx_kv/src/init.cpp | 152 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 plugins/Dbx_kv/src/init.cpp (limited to 'plugins/Dbx_kv/src/init.cpp') diff --git a/plugins/Dbx_kv/src/init.cpp b/plugins/Dbx_kv/src/init.cpp new file mode 100644 index 0000000000..7649924668 --- /dev/null +++ b/plugins/Dbx_kv/src/init.cpp @@ -0,0 +1,152 @@ +/* + +Miranda NG: the free IM client for Microsoft* Windows* + +Copyright (ñ) 2012-15 Miranda NG project (http://miranda-ng.org) +all portions of this codebase are copyrighted to the people +listed in contributors.txt. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "commonheaders.h" + +#if _MSC_VER >= 1800 + #ifdef _DEBUG + #pragma comment(lib, "libboost_thread-vc120-mt-gd-1_57.lib") + #pragma comment(lib, "libboost_system-vc120-mt-gd-1_57.lib") + #else + #pragma comment(lib, "libboost_thread-vc120-mt-1_57.lib") + #pragma comment(lib, "libboost_system-vc120-mt-1_57.lib") + #endif +#else + #ifdef _DEBUG + #pragma comment(lib, "libboost_thread-vc100-mt-gd-1_57.lib") + #pragma comment(lib, "libboost_system-vc100-mt-gd-1_57.lib") + #else + #pragma comment(lib, "libboost_thread-vc100-mt-1_57.lib") + #pragma comment(lib, "libboost_system-vc100-mt-1_57.lib") + #endif +#endif + +int hLangpack; + +static PLUGININFOEX pluginInfo = +{ + sizeof(PLUGININFOEX), + __PLUGIN_NAME, + PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), + __DESCRIPTION, + __AUTHOR, + __AUTHOREMAIL, + __COPYRIGHT, + __AUTHORWEB, + UNICODE_AWARE | STATIC_PLUGIN, + // {7C3D0A33-2646-4001-9107-F35EA299D292} + { 0x7c3d0a33, 0x2646, 0x4001, { 0x91, 0x7, 0xf3, 0x5e, 0xa2, 0x99, 0xd2, 0x92 } } +}; + +HINSTANCE g_hInst = NULL; + +LIST g_Dbs(1, HandleKeySortT); + +///////////////////////////////////////////////////////////////////////////////////////// + +// returns 0 if the profile is created, EMKPRF* +static int makeDatabase(const TCHAR *profile) +{ + std::auto_ptr db(new CDbxKV(profile, 0)); + return db->Create(); +} + +// returns 0 if the given profile has a valid header +static int grokHeader(const TCHAR *profile) +{ + std::auto_ptr db(new CDbxKV(profile, DBMODE_SHARED | DBMODE_READONLY)); + return db->Check(); +} + +// returns 0 if all the APIs are injected otherwise, 1 +static MIDatabase* LoadDatabase(const TCHAR *profile, BOOL bReadOnly) +{ + // set the memory, lists & UTF8 manager + mir_getLP(&pluginInfo); + + std::auto_ptr db(new CDbxKV(profile, (bReadOnly) ? DBMODE_READONLY : 0)); + if (db->Load(false) != ERROR_SUCCESS) + return NULL; + + g_Dbs.insert(db.get()); + return db.release(); +} + +static int UnloadDatabase(MIDatabase *db) +{ + g_Dbs.remove((CDbxKV*)db); + delete (CDbxKV*)db; + return 0; +} + +MIDatabaseChecker* CheckDb(const TCHAR *profile, int *error) +{ + std::auto_ptr db(new CDbxKV(profile, DBMODE_READONLY)); + if (db->Load(true) != ERROR_SUCCESS) { + *error = ERROR_ACCESS_DENIED; + return NULL; + } + + if (db->PrepareCheck(error)) + return NULL; + + return db.release(); +} + +static DATABASELINK dblink = +{ + sizeof(DATABASELINK), + "dbx_kv", + _T("Hamsterdb database driver"), + makeDatabase, + grokHeader, + LoadDatabase, + UnloadDatabase, + CheckDb +}; + +///////////////////////////////////////////////////////////////////////////////////////// + +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD) +{ + return &pluginInfo; +} + +extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = { MIID_DATABASE, MIID_LAST }; + +extern "C" __declspec(dllexport) int Load(void) +{ + RegisterDatabasePlugin(&dblink); + return 0; +} + +extern "C" __declspec(dllexport) int Unload(void) +{ + return 0; +} + +BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD, LPVOID) +{ + g_hInst = hInstDLL; + return TRUE; +} -- cgit v1.2.3