From f920ef497f3299ae24fe783ce03bdd93b419f764 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Fri, 18 May 2012 22:02:50 +0000 Subject: plugins folders renaming git-svn-id: http://svn.miranda-ng.org/main/trunk@60 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/db3x_mmap/Makefile | 53 -- plugins/db3x_mmap/commonheaders.c | 1 - plugins/db3x_mmap/commonheaders.h | 70 -- plugins/db3x_mmap/database.c | 198 ----- plugins/db3x_mmap/database.h | 221 ------ plugins/db3x_mmap/db3x_mmap.rc | 174 ---- plugins/db3x_mmap/db3x_mmap_10.vcxproj | 295 ------- plugins/db3x_mmap/db3x_mmap_10.vcxproj.filters | 65 -- plugins/db3x_mmap/dbcache.c | 206 ----- plugins/db3x_mmap/dbcontacts.c | 299 ------- plugins/db3x_mmap/dbevents.c | 449 ----------- plugins/db3x_mmap/dbheaders.c | 68 -- plugins/db3x_mmap/dbmodulechain.c | 192 ----- plugins/db3x_mmap/dbsettings.c | 1013 ------------------------ plugins/db3x_mmap/encrypt.c | 66 -- plugins/db3x_mmap/encryption.h | 23 - plugins/db3x_mmap/init.c | 200 ----- plugins/db3x_mmap/resource.h | 30 - plugins/db3x_mmap/resource.rc | 2 - plugins/db3x_mmap/version.h | 5 - plugins/db3x_mmap/version.rc | 39 - 21 files changed, 3669 deletions(-) delete mode 100644 plugins/db3x_mmap/Makefile delete mode 100644 plugins/db3x_mmap/commonheaders.c delete mode 100644 plugins/db3x_mmap/commonheaders.h delete mode 100644 plugins/db3x_mmap/database.c delete mode 100644 plugins/db3x_mmap/database.h delete mode 100644 plugins/db3x_mmap/db3x_mmap.rc delete mode 100644 plugins/db3x_mmap/db3x_mmap_10.vcxproj delete mode 100644 plugins/db3x_mmap/db3x_mmap_10.vcxproj.filters delete mode 100644 plugins/db3x_mmap/dbcache.c delete mode 100644 plugins/db3x_mmap/dbcontacts.c delete mode 100644 plugins/db3x_mmap/dbevents.c delete mode 100644 plugins/db3x_mmap/dbheaders.c delete mode 100644 plugins/db3x_mmap/dbmodulechain.c delete mode 100644 plugins/db3x_mmap/dbsettings.c delete mode 100644 plugins/db3x_mmap/encrypt.c delete mode 100644 plugins/db3x_mmap/encryption.h delete mode 100644 plugins/db3x_mmap/init.c delete mode 100644 plugins/db3x_mmap/resource.h delete mode 100644 plugins/db3x_mmap/resource.rc delete mode 100644 plugins/db3x_mmap/version.h delete mode 100644 plugins/db3x_mmap/version.rc (limited to 'plugins/db3x_mmap') diff --git a/plugins/db3x_mmap/Makefile b/plugins/db3x_mmap/Makefile deleted file mode 100644 index 5a7563001f..0000000000 --- a/plugins/db3x_mmap/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -SRC = commonheaders.c \ - database.c \ - dbcache.c \ - dbcontacts.c \ - dbevents.c \ - dbheaders.c \ - dbini.c \ - dblists.c \ - dbmodulechain.c \ - dbsettings.c \ - dbtime.c \ - encrypt.c \ - init.c -OBJ = $(SRC:.c=.o) -RES = resource.res -LIB = -lgdi32 -lversion -lcomctl32 -lcomdlg32 -lole32 - -CC = gcc -RC = windres -RM = rm - -# Install location -ifdef DEBUG -BIN = ..\..\bin\debug\plugins\dbx_3x.dll -else -BIN = ..\..\bin\release\plugins\dbx_3x.dll -endif - -# Defines -DEFINES = -DWIN32 -D__SEH_NOOP -ifdef DEBUG -DEFINES := $(DEFINES) -D_DEBUG -endif - -# Flags -LFLAGS = -shared -RCFLAGS = --input-format rc --output-format coff -ifdef DEBUG -CFLAGS = -g $(DEFINES) -I../../include -else -CFLAGS = -O1 $(DEFINES) -I../../include -endif - -# Targets -all : $(OBJ) $(RES) - $(CC) $(LFLAGS) $(CFLAGS) -o $(BIN) $(OBJ) $(RES) $(LIB) -Wl - -$(RES) : $(RES:.res=.rc) $(RES:.res=.h) Makefile - $(RC) $(RCFLAGS) -o $(RES) -i $(RES:.res=.rc) - -clean : - $(RM) -f $(OBJ) $(RES) - diff --git a/plugins/db3x_mmap/commonheaders.c b/plugins/db3x_mmap/commonheaders.c deleted file mode 100644 index 14f99f7d71..0000000000 --- a/plugins/db3x_mmap/commonheaders.c +++ /dev/null @@ -1 +0,0 @@ -#include "commonheaders.h" diff --git a/plugins/db3x_mmap/commonheaders.h b/plugins/db3x_mmap/commonheaders.h deleted file mode 100644 index 726e69bf1f..0000000000 --- a/plugins/db3x_mmap/commonheaders.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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. -*/ - -#define MIRANDA_VER 0x0A00 - -#define _WIN32_WINNT 0x0501 - -#include "m_stdhdr.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifndef __GNUC__ -#include -#endif -#include "resource.h" -#include "version.h" -#include -#include -#include -#include -#include -#include -#include - -#include "database.h" - -extern PLUGINLINK *pluginLink; - -extern struct MM_INTERFACE memoryManagerInterface; -extern struct LIST_INTERFACE li; - -extern CRITICAL_SECTION csDbAccess; -extern struct DBHeader dbHeader; -extern HANDLE hDbFile; - -#ifdef __GNUC__ -#define mir_i64(x) (x##LL) -#else -#define mir_i64(x) (x##i64) -#endif - -#define NEWSTR_ALLOCA(A) (A==NULL)?NULL:strcpy((char*)alloca(strlen(A)+1),A) diff --git a/plugins/db3x_mmap/database.c b/plugins/db3x_mmap/database.c deleted file mode 100644 index b3bd3e70a0..0000000000 --- a/plugins/db3x_mmap/database.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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" - -int ProfileManager(char *szDbDest,int cbDbDest); -int ShouldAutoCreate(void); -int CreateDbHeaders(HANDLE hFile); -int InitialiseDbHeaders(void); -int InitSettings(void); -void UninitSettings(void); -int InitContacts(void); -void UninitContacts(void); -int InitEvents(void); -void UninitEvents(void); -int InitCrypt(void); -int InitModuleNames(void); -void UninitModuleNames(void); -int InitCache(void); -void UninitCache(void); -int InitIni(void); -void UninitIni(void); - -HANDLE hDbFile=INVALID_HANDLE_VALUE; -CRITICAL_SECTION csDbAccess; -struct DBHeader dbHeader; -char szDbPath[MAX_PATH]; - -static void UnloadDatabase(void) -{ - // update profile last modified time - DWORD bytesWritten; - SetFilePointer(hDbFile,0,NULL,FILE_BEGIN); - WriteFile(hDbFile,&dbSignature,1,&bytesWritten,NULL); - - CloseHandle(hDbFile); -} - -DWORD CreateNewSpace(int bytes) -{ - DWORD ofsNew; - ofsNew=dbHeader.ofsFileEnd; - dbHeader.ofsFileEnd+=bytes; - DBWrite(0,&dbHeader,sizeof(dbHeader)); - log2("newspace %d@%08x",bytes,ofsNew); - return ofsNew; -} - -void DeleteSpace(DWORD ofs,int bytes) -{ - if (ofs+bytes == dbHeader.ofsFileEnd) { - log2("freespace %d@%08x",bytes,ofs); - dbHeader.ofsFileEnd=ofs; - } else { - log2("deletespace %d@%08x",bytes,ofs); - dbHeader.slackSpace+=bytes; - } - DBWrite(0,&dbHeader,sizeof(dbHeader)); - DBFill(ofs,bytes); -} - -DWORD ReallocSpace(DWORD ofs,int oldSize,int newSize) -{ - DWORD ofsNew; - - if (oldSize >= newSize) return ofs; - - if (ofs+oldSize == dbHeader.ofsFileEnd) { - ofsNew = ofs; - dbHeader.ofsFileEnd+=newSize-oldSize; - DBWrite(0,&dbHeader,sizeof(dbHeader)); - log3("adding newspace %d@%08x+%d",newSize,ofsNew,oldSize); - } else { - ofsNew=CreateNewSpace(newSize); - DBMoveChunk(ofsNew,ofs,oldSize); - DeleteSpace(ofs,oldSize); - } - return ofsNew; -} - -void UnloadDatabaseModule(void) -{ - //UninitIni(); - UninitEvents(); - UninitSettings(); - UninitContacts(); - UninitModuleNames(); - UninitCache(); - UnloadDatabase(); - DeleteCriticalSection(&csDbAccess); -} - -int LoadDatabaseModule(void) -{ - InitializeCriticalSection(&csDbAccess); - log0("DB logging running"); - { - DWORD dummy=0; - hDbFile=CreateFileA(szDbPath,GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0, NULL); - if ( hDbFile == INVALID_HANDLE_VALUE ) { - return 1; - } - if ( !ReadFile(hDbFile,&dbHeader,sizeof(dbHeader),&dummy,NULL) ) { - CloseHandle(hDbFile); - return 1; - } - } - //if(ParseCommandLine()) return 1; - if(InitCache()) return 1; - if(InitModuleNames()) return 1; - if(InitContacts()) return 1; - if(InitSettings()) return 1; - if(InitEvents()) return 1; - if(InitCrypt()) return 1; - return 0; -} - -static DWORD DatabaseCorrupted=0; -static TCHAR *msg = NULL; -static DWORD dwErr = 0; - -void __cdecl dbpanic(void *arg) -{ - if (msg) - { - TCHAR err[256]; - - if (dwErr==ERROR_DISK_FULL) - msg = TranslateT("Disk is full. Miranda will now shutdown."); - - mir_sntprintf(err, SIZEOF(err), msg, TranslateT("Database failure. Miranda will now shutdown."), dwErr); - - MessageBox(0,err,TranslateT("Database Error"),MB_SETFOREGROUND|MB_TOPMOST|MB_APPLMODAL|MB_ICONWARNING|MB_OK); - } - else - MessageBox(0,TranslateT("Miranda has detected corruption in your database. This corruption maybe fixed by DBTool. Please download it from http://www.miranda-im.org. Miranda will now shutdown."), - TranslateT("Database Panic"),MB_SETFOREGROUND|MB_TOPMOST|MB_APPLMODAL|MB_ICONWARNING|MB_OK); - TerminateProcess(GetCurrentProcess(),255); -} - -void DatabaseCorruption(TCHAR *text) -{ - int kill=0; - - EnterCriticalSection(&csDbAccess); - if (DatabaseCorrupted==0) { - DatabaseCorrupted++; - kill++; - msg = text; - dwErr = GetLastError(); - } else { - /* db is already corrupted, someone else is dealing with it, wait here - so that we don't do any more damage */ - LeaveCriticalSection(&csDbAccess); - Sleep(INFINITE); - return; - } - LeaveCriticalSection(&csDbAccess); - if (kill) { - _beginthread(dbpanic,0,NULL); - Sleep(INFINITE); - } -} - -#ifdef DBLOGGING -void DBLog(const char *file,int line,const char *fmt,...) -{ - FILE *fp; - va_list vararg; - char str[1024]; - - va_start(vararg,fmt); - mir_vsnprintf(str,sizeof(str),fmt,vararg); - va_end(vararg); - fp=fopen("c:\\mirandadatabase.log.txt","at"); - fprintf(fp,"%u: %s %d: %s\n",GetTickCount(),file,line,str); - fclose(fp); -} -#endif diff --git a/plugins/db3x_mmap/database.h b/plugins/db3x_mmap/database.h deleted file mode 100644 index 3dd602c8b9..0000000000 --- a/plugins/db3x_mmap/database.h +++ /dev/null @@ -1,221 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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. -*/ - - -//all offsets are relative to the start of the file -//offsets are 0 if there is nothing in the chain or this is the last in the -//chain - -/* tree diagram - -DBHeader - |-->end of file (plain offset) - |-->first contact (DBContact) - | |-->next contact (DBContact) - | | \--> ... - | |-->first settings (DBContactSettings) - | | |-->next settings (DBContactSettings) - | | | \--> ... - | | \-->module name (DBModuleName) - | \-->first/last/firstunread event - |-->user contact (DBContact) - | |-->next contact=NULL - | |-->first settings as above - | \-->first/last/firstunread event as above - \-->first module name (DBModuleName) - \-->next module name (DBModuleName) - \--> ... -*/ - -//#define DB_RESIZE_GRANULARITY 16384 -#define DB_THIS_VERSION 0x00000700u -#define DB_SETTINGS_RESIZE_GRANULARITY 128 - -struct DBSignature { - char name[15]; - BYTE eof; -}; - -static struct DBSignature dbSignature={"Miranda ICQ DB",0x1A}; - -#include -struct DBHeader { - BYTE signature[16]; // 'Miranda ICQ DB',0,26 - DWORD version; //as 4 bytes, ie 1.2.3.10=0x0102030a - //this version is 0x00000700 - DWORD ofsFileEnd; //offset of the end of the database - place to write - //new structures - DWORD slackSpace; //a counter of the number of bytes that have been - //wasted so far due to deleting structures and/or - //re-making them at the end. We should compact when - //this gets above a threshold - DWORD contactCount; //number of contacts in the chain,excluding the user - DWORD ofsFirstContact; //offset to first struct DBContact in the chain - DWORD ofsUser; //offset to struct DBContact representing the user - DWORD ofsFirstModuleName; //offset to first struct DBModuleName in the chain -}; - -#define DBCONTACT_SIGNATURE 0x43DECADEu -struct DBContact { - DWORD signature; - DWORD ofsNext; //offset to the next contact in the chain. zero if - //this is the 'user' contact or the last contact - //in the chain - DWORD ofsFirstSettings; //offset to the first DBContactSettings in the - //chain for this contact. - DWORD eventCount; //number of events in the chain for this contact - DWORD ofsFirstEvent,ofsLastEvent; //offsets to the first and last DBEvent in - //the chain for this contact - DWORD ofsFirstUnreadEvent; //offset to the first (chronological) unread event - //in the chain, 0 if all are read - DWORD timestampFirstUnread; //timestamp of the event at ofsFirstUnreadEvent -}; - -#define DBMODULENAME_SIGNATURE 0x4DDECADEu -struct DBModuleName { - DWORD signature; - DWORD ofsNext; //offset to the next module name in the chain - BYTE cbName; //number of characters in this module name - char name[1]; //name, no nul terminator -}; - -#define DBCONTACTSETTINGS_SIGNATURE 0x53DECADEu -struct DBContactSettings { - DWORD signature; - DWORD ofsNext; //offset to the next contactsettings in the chain - DWORD ofsModuleName; //offset to the DBModuleName of the owner of these - //settings - DWORD cbBlob; //size of the blob in bytes. May be larger than the - //actual size for reducing the number of moves - //required using granularity in resizing - BYTE blob[1]; //the blob. a back-to-back sequence of DBSetting - //structs, the last has cbName=0 -}; - -/* not a valid structure, content is figured out on the fly -struct DBSetting { - BYTE cbName; //number of bytes in the name of this setting - //this =0 marks the end - char szName[...]; //setting name, excluding nul - BYTE dataType; //type of data. see m_database.h, db/contact/getsetting - union { //a load of types of data, length is defined by dataType - BYTE bVal; WORD wVal; DWORD dVal; - struct { - WORD cbString; - char szVal[...]; //excludes nul terminator - }; - struct { - WORD cbBlob; - BYTE blobVal[...]; - }; - }; -}; -*/ - -#define DBEVENT_SIGNATURE 0x45DECADEu -struct DBEvent { - DWORD signature; - DWORD ofsPrev,ofsNext; //offset to the previous and next events in the - //chain. Chain is sorted chronologically - DWORD ofsModuleName; //offset to a DBModuleName struct of the name of - //the owner of this event - DWORD timestamp; //seconds since 00:00:00 01/01/1970 - DWORD flags; //see m_database.h, db/event/add - WORD eventType; //module-defined event type - DWORD cbBlob; //number of bytes in the blob - BYTE blob[1]; //the blob. module-defined formatting -}; -#include - -typedef struct -{ - BYTE bIsResident; - char name[1]; -} - DBCachedSettingName; - -typedef struct -{ - char* name; - DBVARIANT value; -} - DBCachedGlobalValue; - -typedef struct DBCachedContactValue_tag -{ - char* name; - DBVARIANT value; - struct DBCachedContactValue_tag* next; -} - DBCachedContactValue; - -typedef struct -{ - HANDLE hContact; - HANDLE hNext; - DBCachedContactValue* first; - DBCachedContactValue* last; -} - DBCachedContactValueList; - -//databasecorruption: with NULL called if any signatures are broken. very very fatal -void DatabaseCorruption(TCHAR *text); -PBYTE DBRead(DWORD ofs,int bytesRequired,int *bytesAvail); //any preview result could be invalidated by the next call -void DBWrite(DWORD ofs,PVOID pData,int count); -void DBFill(DWORD ofs,int bytes); -void DBFlush(int setting); -void DBMoveChunk(DWORD ofsDest,DWORD ofsSource,int bytes); -DWORD CreateNewSpace(int bytes); -void DeleteSpace(DWORD ofs,int bytes); -DWORD ReallocSpace(DWORD ofs,int oldSize,int newSize); -void GetProfileDirectory(char *szPath,int cbPath); -int GetDefaultProfilePath(char *szPath,int cbPath,int *specified); -int ShouldShowProfileManager(void); -int CheckDbHeaders(struct DBHeader * hdr); -int CreateDbHeaders(HANDLE hFile); -int LoadDatabaseModule(void); -void UnloadDatabaseModule(void); - -#define MAXCACHEDREADSIZE 65536 - -//#define DBLOGGING - -#ifdef _DEBUG -//#define DBLOGGING -#endif -#ifdef DBLOGGING -void DBLog(const char *file,int line,const char *fmt,...); -#define logg() DBLog(__FILE__,__LINE__,"") -#define log0(s) DBLog(__FILE__,__LINE__,s) -#define log1(s,a) DBLog(__FILE__,__LINE__,s,a) -#define log2(s,a,b) DBLog(__FILE__,__LINE__,s,a,b) -#define log3(s,a,b,c) DBLog(__FILE__,__LINE__,s,a,b,c) -#define log4(s,a,b,c,d) DBLog(__FILE__,__LINE__,s,a,b,c,d) -#else -#define logg() -#define log0(s) -#define log1(s,a) -#define log2(s,a,b) -#define log3(s,a,b,c) -#define log4(s,a,b,c,d) -#endif diff --git a/plugins/db3x_mmap/db3x_mmap.rc b/plugins/db3x_mmap/db3x_mmap.rc deleted file mode 100644 index 434e5437b5..0000000000 --- a/plugins/db3x_mmap/db3x_mmap.rc +++ /dev/null @@ -1,174 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_INSTALLINI DIALOGEX 0, 0, 212, 102 -STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | - DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | - WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -CAPTION "Install Database Settings" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - DEFPUSHBUTTON "Yes",IDOK,26,83,50,14 - PUSHBUTTON "No",IDCANCEL,81,83,50,14 - LTEXT "A file containing new database settings has been placed in the Miranda IM directory.", - IDC_STATIC,5,5,202,16 - LTEXT "Do you want to import the settings now?",IDC_STATIC,5, - 69,202,8 - PUSHBUTTON "No to all",IDC_NOTOALL,136,83,50,14 - LTEXT "",IDC_ININAME,5,24,143,16,SS_NOPREFIX | SS_CENTERIMAGE - PUSHBUTTON "&View contents",IDC_VIEWINI,149,25,58,14 - LTEXT "Security systems to prevent malicious changes are in place and you will be warned before changes that are not known to be safe.", - IDC_SECURITYINFO,5,43,202,24 -END - -IDD_WARNINICHANGE DIALOGEX 0, 0, 187, 113 -STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | - DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | - WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -CAPTION "Database Setting Change" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - LTEXT "Database settings are being imported from",IDC_STATIC,5, - 5,177,8 - CONTROL "",IDC_ININAME,"Static",SS_SIMPLE | SS_NOPREFIX | - WS_GROUP,5,13,177,8 - LTEXT "This file wishes to change the setting",IDC_STATIC,5,24, - 177,8 - CONTROL "",IDC_SETTINGNAME,"Static",SS_SIMPLE | SS_NOPREFIX | - WS_GROUP,12,33,170,8 - LTEXT "to the value",IDC_STATIC,5,42,177,8 - CONTROL "",IDC_NEWVALUE,"Static",SS_SIMPLE | SS_NOPREFIX | - WS_GROUP,12,51,170,8 - LTEXT "",IDC_SECURITYINFO,5,60,177,8 - LTEXT "Do you want to allow this change?",IDC_STATIC,5,71,177, - 8 - CONTROL "&Allow all further changes to this section", - IDC_WARNNOMORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13, - 80,169,10 - DEFPUSHBUTTON "&Yes",IDYES,5,94,50,14 - PUSHBUTTON "&No",IDNO,59,94,50,14 - PUSHBUTTON "Cancel Import",IDCANCEL,123,94,59,14 -END - -IDD_INIIMPORTDONE DIALOGEX 0, 0, 186, 73 -STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | - DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | - WS_SYSMENU -EXSTYLE WS_EX_CONTROLPARENT -CAPTION "Database Import Complete" -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - LTEXT "The import has completed from",IDC_STATIC,5,5,176,8 - CONTROL "",IDC_ININAME,"Static",SS_SIMPLE | SS_NOPREFIX | - WS_GROUP,5,13,176,8 - LTEXT "What do you want to do with the file now?",IDC_STATIC,5, - 24,176,8 - PUSHBUTTON "&Recycle",IDC_RECYCLE,5,36,50,14 - PUSHBUTTON "&Delete",IDC_DELETE,68,36,50,14 - EDITTEXT IDC_NEWNAME,5,55,117,12,ES_AUTOHSCROLL - PUSHBUTTON "&Move/Rename",IDC_MOVE,124,54,57,14 - PUSHBUTTON "&Leave",IDC_LEAVE,131,36,50,14 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_INSTALLINI, DIALOG - BEGIN - LEFTMARGIN, 5 - RIGHTMARGIN, 207 - TOPMARGIN, 5 - BOTTOMMARGIN, 97 - END - - IDD_WARNINICHANGE, DIALOG - BEGIN - LEFTMARGIN, 5 - RIGHTMARGIN, 182 - TOPMARGIN, 5 - BOTTOMMARGIN, 108 - END - - IDD_INIIMPORTDONE, DIALOG - BEGIN - LEFTMARGIN, 5 - RIGHTMARGIN, 181 - TOPMARGIN, 5 - BOTTOMMARGIN, 68 - END -END -#endif // APSTUDIO_INVOKED - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include \0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED diff --git a/plugins/db3x_mmap/db3x_mmap_10.vcxproj b/plugins/db3x_mmap/db3x_mmap_10.vcxproj deleted file mode 100644 index 1305b3d229..0000000000 --- a/plugins/db3x_mmap/db3x_mmap_10.vcxproj +++ /dev/null @@ -1,295 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - db3x_mmap - {20D781FB-4A20-4B75-B863-304A47182966} - db3x_mmap - - - - DynamicLibrary - false - Unicode - true - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - true - - - DynamicLibrary - false - Unicode - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - $(SolutionDir)$(Configuration)/Plugins\ - $(SolutionDir)$(Configuration)/Obj/$(ProjectName)\ - true - $(SolutionDir)$(Configuration)64/Plugins\ - $(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\ - true - $(SolutionDir)$(Configuration)/Plugins\ - $(SolutionDir)$(Configuration)/Obj/$(ProjectName)\ - true - $(SolutionDir)$(Configuration)64/Plugins\ - $(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\ - true - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - dbx_mmap - dbx_mmap - dbx_mmap - dbx_mmap - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Debug/db3x.tlb - - - Disabled - ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;DB3X_EXPORTS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - Fast - false - Use - commonheaders.h - Level3 - true - EditAndContinue - Default - 4996;%(DisableSpecificWarnings) - false - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - ./../../include/msapi/ - - - true - $(TargetDir)$(TargetName).pdb - false - $(IntDir)$(TargetName).lib - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - X64 - .\Debug/db3x.tlb - - - Disabled - ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;DB3X_EXPORTS;%(PreprocessorDefinitions) - false - EnableFastChecks - MultiThreadedDebugDLL - true - Fast - false - Use - commonheaders.h - Level3 - true - ProgramDatabase - Default - 4996;%(DisableSpecificWarnings) - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - ./../../include/msapi/ - - - true - $(TargetDir)$(TargetName).pdb - false - $(IntDir)$(TargetName).lib - MachineX64 - c:\miranda im\plugins\$(TargetName)$(TargetExt) - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Release/db3x.tlb - - - Full - OnlyExplicitInline - true - Size - true - ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;DB3X_EXPORTS;%(PreprocessorDefinitions) - true - false - MultiThreadedDLL - false - true - Fast - false - Use - commonheaders.h - Level3 - true - ProgramDatabase - Default - 4996;%(DisableSpecificWarnings) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - ./../../include/msapi/ - - - true - true - true - UseLinkTimeCodeGeneration - 0x5130000 - false - $(IntDir)$(TargetName).lib - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - .\Release/db3x.tlb - - - Full - OnlyExplicitInline - true - Size - true - ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;DB3X_EXPORTS;%(PreprocessorDefinitions) - true - false - MultiThreadedDLL - false - true - Fast - false - Use - commonheaders.h - Level3 - true - ProgramDatabase - Default - 4996;%(DisableSpecificWarnings) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - ./../../include/msapi/ - - - true - true - true - UseLinkTimeCodeGeneration - 0x5130000 - false - $(IntDir)$(TargetName).lib - MachineX64 - - - - - Create - Create - Create - Create - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/plugins/db3x_mmap/db3x_mmap_10.vcxproj.filters b/plugins/db3x_mmap/db3x_mmap_10.vcxproj.filters deleted file mode 100644 index 448b7073e8..0000000000 --- a/plugins/db3x_mmap/db3x_mmap_10.vcxproj.filters +++ /dev/null @@ -1,65 +0,0 @@ - - - - - {60d2ae39-2690-4258-aa90-e825ef024b81} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {a2637eb4-34a4-4341-9c84-0e0ecfdc0f35} - h;hpp;hxx;hm;inl - - - {e5e10389-c0d7-4cf8-8442-6714f0d5aff1} - ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - Resource Files - - - Resource Files - - - \ No newline at end of file diff --git a/plugins/db3x_mmap/dbcache.c b/plugins/db3x_mmap/dbcache.c deleted file mode 100644 index 8e177c6f6d..0000000000 --- a/plugins/db3x_mmap/dbcache.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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" - -BOOL safetyMode = TRUE; -static UINT_PTR flushBuffersTimerId; - -static PBYTE pNull = 0; -static PBYTE pDbCache = NULL; -static HANDLE hMap = NULL; -static DWORD dwFileSize = 0; -static DWORD ChunkSize = 65536; -static DWORD flushFailTick = 0; - - -void Map() -{ - hMap = CreateFileMapping(hDbFile, NULL, PAGE_READWRITE, 0, dwFileSize, NULL); - - if (hMap) - { - pDbCache = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS/*FILE_MAP_WRITE*/, 0, 0 ,0); - if (!pDbCache) - DatabaseCorruption( _T("%s (MapViewOfFile failed. Code: %d)")); - } - else - DatabaseCorruption( _T("%s (CreateFileMapping failed. Code: %d)")); -} - -void ReMap(DWORD needed) -{ - KillTimer(NULL,flushBuffersTimerId); - - log3("remapping %d + %d (file end: %d)",dwFileSize,needed,dbHeader.ofsFileEnd); - - if (needed > ChunkSize) - { - if (needed + dwFileSize > dbHeader.ofsFileEnd + ChunkSize) - DatabaseCorruption( _T("%s (Too large increment)")); - else - { - DWORD x = dbHeader.ofsFileEnd/ChunkSize; - dwFileSize = (x+1)*ChunkSize; - } - } - else - dwFileSize += ChunkSize; - -// FlushViewOfFile(pDbCache, 0); - UnmapViewOfFile(pDbCache); - pDbCache = NULL; - CloseHandle(hMap); - - Map(); -} - -void DBMoveChunk(DWORD ofsDest,DWORD ofsSource,int bytes) -{ - int x = 0; - log3("move %d %08x->%08x",bytes,ofsSource,ofsDest); - if (ofsDest+bytes>dwFileSize) ReMap(ofsDest+bytes-dwFileSize); - if (ofsSource+bytes>dwFileSize) { - x = ofsSource+bytes-dwFileSize; - log0("buggy move!"); - _ASSERT(0); - } - if (x > 0) - ZeroMemory(pDbCache+ofsDest+bytes-x, x); - if (ofsSource < dwFileSize) - MoveMemory(pDbCache+ofsDest,pDbCache+ofsSource, bytes-x); - - logg(); -} - -//we are assumed to be in a mutex here -PBYTE DBRead(DWORD ofs,int bytesRequired,int *bytesAvail) -{ - // buggy read - if (ofs>=dwFileSize) { - log2("read from outside %d@%08x",bytesRequired,ofs); - if (bytesAvail!=NULL) *bytesAvail = ChunkSize; - return pNull; - } - log3((ofs+bytesRequired>dwFileSize)?"read %d@%08x, only %d avaliable":"read %d@%08x",bytesRequired,ofs,dwFileSize-ofs); - if (bytesAvail!=NULL) *bytesAvail = dwFileSize - ofs; - return pDbCache+ofs; -} - -//we are assumed to be in a mutex here -void DBWrite(DWORD ofs,PVOID pData,int bytes) -{ - log2("write %d@%08x",bytes,ofs); - if (ofs+bytes>dwFileSize) ReMap(ofs+bytes-dwFileSize); - MoveMemory(pDbCache+ofs,pData,bytes); - logg(); -} - -//we are assumed to be in a mutex here -void DBFill(DWORD ofs,int bytes) -{ - log2("zerofill %d@%08x",bytes,ofs); - if (ofs+bytes<=dwFileSize) - ZeroMemory(pDbCache+ofs,bytes); - logg(); -} - -static VOID CALLBACK DoBufferFlushTimerProc(HWND hwnd, UINT message, UINT_PTR idEvent, DWORD dwTime) -{ - if (!pDbCache) return; - - KillTimer(NULL,flushBuffersTimerId); - log0("tflush1"); - if (FlushViewOfFile(pDbCache, 0) == 0) { - if (flushFailTick == 0) - flushFailTick = GetTickCount(); - else if (GetTickCount() - flushFailTick > 5000) - DatabaseCorruption(NULL); - } - else - flushFailTick = 0; - log0("tflush2"); -} - -void DBFlush(int setting) -{ - if(!setting) { - log0("nflush1"); - if(safetyMode && pDbCache) { - if (FlushViewOfFile(pDbCache, 0) == 0) { - if (flushFailTick == 0) - flushFailTick = GetTickCount(); - else if (GetTickCount() - flushFailTick > 5000) - DatabaseCorruption(NULL); - } - else - flushFailTick = 0; - } - log0("nflush2"); - return; - } - KillTimer(NULL,flushBuffersTimerId); - flushBuffersTimerId=SetTimer(NULL,flushBuffersTimerId,50,DoBufferFlushTimerProc); -} - -static INT_PTR CacheSetSafetyMode(WPARAM wParam,LPARAM lParam) -{ - EnterCriticalSection(&csDbAccess); - safetyMode=wParam; - LeaveCriticalSection(&csDbAccess); - DBFlush(1); - return 0; -} - -int InitCache(void) -{ - DWORD x; - SYSTEM_INFO sinf; - - GetSystemInfo(&sinf); - ChunkSize = sinf.dwAllocationGranularity; - - dwFileSize = GetFileSize(hDbFile, NULL); - - // Align to chunk - x = dwFileSize % ChunkSize; - if (x) dwFileSize += ChunkSize - x; - - Map(); - - // zero region for reads outside the file - pNull = calloc(ChunkSize,1); - - CreateServiceFunction(MS_DB_SETSAFETYMODE,CacheSetSafetyMode); - - return 0; -} - -void UninitCache(void) -{ - KillTimer(NULL,flushBuffersTimerId); - FlushViewOfFile(pDbCache, 0); - UnmapViewOfFile(pDbCache); - CloseHandle(hMap); - if (pNull) free(pNull); -} diff --git a/plugins/db3x_mmap/dbcontacts.c b/plugins/db3x_mmap/dbcontacts.c deleted file mode 100644 index 0803f1f746..0000000000 --- a/plugins/db3x_mmap/dbcontacts.c +++ /dev/null @@ -1,299 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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" - -extern HANDLE hCacheHeap; -extern SortedList lContacts; -extern HANDLE hLastCachedContact; - -INT_PTR GetContactSettingStatic(WPARAM wParam,LPARAM lParam); -void FreeCachedVariant( DBVARIANT* V ); - -static INT_PTR GetContactCount(WPARAM wParam,LPARAM lParam); -static INT_PTR FindFirstContact(WPARAM wParam,LPARAM lParam); -static INT_PTR FindNextContact(WPARAM wParam,LPARAM lParam); -static INT_PTR DeleteContact(WPARAM wParam,LPARAM lParam); -static INT_PTR AddContact(WPARAM wParam,LPARAM lParam); -static INT_PTR IsDbContact(WPARAM wParam,LPARAM lParam); - -static HANDLE hContactDeletedEvent,hContactAddedEvent; - - -int InitContacts(void) -{ - CreateServiceFunction(MS_DB_CONTACT_GETCOUNT,GetContactCount); - CreateServiceFunction(MS_DB_CONTACT_FINDFIRST,FindFirstContact); - CreateServiceFunction(MS_DB_CONTACT_FINDNEXT,FindNextContact); - CreateServiceFunction(MS_DB_CONTACT_DELETE,DeleteContact); - CreateServiceFunction(MS_DB_CONTACT_ADD,AddContact); - CreateServiceFunction(MS_DB_CONTACT_IS,IsDbContact); - hContactDeletedEvent=CreateHookableEvent(ME_DB_CONTACT_DELETED); - hContactAddedEvent=CreateHookableEvent(ME_DB_CONTACT_ADDED); - return 0; -} - -void UninitContacts(void) -{ -} - -DBCachedContactValueList* AddToCachedContactList(HANDLE hContact, int index) -{ - DBCachedContactValueList* VL; - VL = (DBCachedContactValueList*)HeapAlloc(hCacheHeap,HEAP_ZERO_MEMORY,sizeof(DBCachedContactValueList)); - VL->hContact = hContact; - if (index == -1) li.List_GetIndex(&lContacts,VL,&index); - li.List_Insert(&lContacts,VL,index); - return VL; -} - -static INT_PTR GetContactCount(WPARAM wParam,LPARAM lParam) -{ - int ret; - - EnterCriticalSection(&csDbAccess); - ret=dbHeader.contactCount; - LeaveCriticalSection(&csDbAccess); - return ret; -} - -#define proto_module "Protocol" -#define proto_setting "p" - -static int CheckProto(HANDLE hContact, const char *proto) -{ - static char protobuf[MAX_PATH] = {0}; - static DBVARIANT dbv; - static DBCONTACTGETSETTING sVal = {proto_module,proto_setting,&dbv}; - - dbv.type = DBVT_ASCIIZ; - dbv.pszVal = protobuf; - dbv.cchVal = sizeof(protobuf); - - if (GetContactSettingStatic((WPARAM)hContact, (LPARAM )&sVal) != 0 - || (dbv.type != DBVT_ASCIIZ)) return 0; - - return !strcmp(protobuf,proto); -} - -static INT_PTR FindFirstContact(WPARAM wParam,LPARAM lParam) -{ - INT_PTR ret = 0; - EnterCriticalSection(&csDbAccess); - ret = (INT_PTR)dbHeader.ofsFirstContact; - if (lParam && !CheckProto((HANDLE)ret,(const char*)lParam)) - ret = FindNextContact((WPARAM)ret,lParam); - LeaveCriticalSection(&csDbAccess); - return ret; -} - -static INT_PTR FindNextContact(WPARAM wParam,LPARAM lParam) -{ - int index; - struct DBContact *dbc; - DBCachedContactValueList VLtemp, *VL = NULL; - VLtemp.hContact = (HANDLE)wParam; - EnterCriticalSection(&csDbAccess); - while(VLtemp.hContact) { - if ( li.List_GetIndex(&lContacts,&VLtemp,&index)) { - VL = ( DBCachedContactValueList* )lContacts.items[index]; - if (VL->hNext != NULL) { - if (!lParam || CheckProto(VL->hNext,(const char*)lParam)) { - LeaveCriticalSection(&csDbAccess); - return (INT_PTR)VL->hNext; - } - else { - VLtemp.hContact = VL->hNext; - continue; - } } } - - dbc=(struct DBContact*)DBRead((DWORD)VLtemp.hContact,sizeof(struct DBContact),NULL); - if (dbc->signature!=DBCONTACT_SIGNATURE) - break; - else { - if ( VL == NULL ) - VL = AddToCachedContactList(VLtemp.hContact,index); - - VL->hNext = (HANDLE)dbc->ofsNext; - if (VL->hNext != NULL && (!lParam || CheckProto(VL->hNext,(const char*)lParam))) { - LeaveCriticalSection(&csDbAccess); - return (INT_PTR)VL->hNext; - } - VLtemp.hContact = VL->hNext; - } } - LeaveCriticalSection(&csDbAccess); - return 0; -} - -static INT_PTR DeleteContact(WPARAM wParam,LPARAM lParam) -{ - struct DBContact *dbc,*dbcPrev; - DWORD ofsThis,ofsNext,ofsFirstEvent; - struct DBContactSettings *dbcs; - struct DBEvent *dbe; - int index; - - if((HANDLE)wParam==NULL) return 1; - EnterCriticalSection(&csDbAccess); - dbc=(struct DBContact*)DBRead(wParam,sizeof(struct DBContact),NULL); - if(dbc->signature!=DBCONTACT_SIGNATURE) { - LeaveCriticalSection(&csDbAccess); - return 1; - } - if ( (HANDLE)wParam == (HANDLE)dbHeader.ofsUser ) { - LeaveCriticalSection(&csDbAccess); - log0("FATAL: del of user chain attempted."); - return 1; - } - log0("del contact"); - LeaveCriticalSection(&csDbAccess); - //call notifier while outside mutex - NotifyEventHooks(hContactDeletedEvent,wParam,0); - //get back in - EnterCriticalSection(&csDbAccess); - - { DBCachedContactValueList VLtemp; - VLtemp.hContact = (HANDLE)wParam; - if ( li.List_GetIndex(&lContacts,&VLtemp,&index)) - { - DBCachedContactValueList *VL = ( DBCachedContactValueList* )lContacts.items[index]; - DBCachedContactValue* V = VL->first; - while ( V != NULL ) { - DBCachedContactValue* V1 = V->next; - FreeCachedVariant(&V->value); - HeapFree( hCacheHeap, 0, V ); - V = V1; - } - HeapFree( hCacheHeap, 0, VL ); - - if (VLtemp.hContact == hLastCachedContact) - hLastCachedContact = NULL; - li.List_Remove(&lContacts,index); - } } - - dbc=(struct DBContact*)DBRead(wParam,sizeof(struct DBContact),NULL); - //delete settings chain - ofsThis=dbc->ofsFirstSettings; - ofsFirstEvent=dbc->ofsFirstEvent; - while(ofsThis) { - dbcs=(struct DBContactSettings*)DBRead(ofsThis,sizeof(struct DBContactSettings),NULL); - ofsNext=dbcs->ofsNext; - DeleteSpace(ofsThis,offsetof(struct DBContactSettings,blob)+dbcs->cbBlob); - ofsThis=ofsNext; - } - //delete event chain - ofsThis=ofsFirstEvent; - while(ofsThis) { - dbe=(struct DBEvent*)DBRead(ofsThis,sizeof(struct DBEvent),NULL); - ofsNext=dbe->ofsNext; - DeleteSpace(ofsThis,offsetof(struct DBEvent,blob)+dbe->cbBlob); - ofsThis=ofsNext; - } - //find previous contact in chain and change ofsNext - dbc=(struct DBContact*)DBRead(wParam,sizeof(struct DBContact),NULL); - if(dbHeader.ofsFirstContact==wParam) { - dbHeader.ofsFirstContact=dbc->ofsNext; - DBWrite(0,&dbHeader,sizeof(dbHeader)); - } - else { - ofsNext=dbc->ofsNext; - ofsThis=dbHeader.ofsFirstContact; - dbcPrev=(struct DBContact*)DBRead(ofsThis,sizeof(struct DBContact),NULL); - while(dbcPrev->ofsNext!=wParam) { - if(dbcPrev->ofsNext==0) DatabaseCorruption(NULL); - ofsThis=dbcPrev->ofsNext; - dbcPrev=(struct DBContact*)DBRead(ofsThis,sizeof(struct DBContact),NULL); - } - dbcPrev->ofsNext=ofsNext; - DBWrite(ofsThis,dbcPrev,sizeof(struct DBContact)); - { - DBCachedContactValueList VLtemp; - VLtemp.hContact = (HANDLE)ofsThis; - if ( li.List_GetIndex(&lContacts,&VLtemp,&index)) - { - DBCachedContactValueList *VL = ( DBCachedContactValueList* )lContacts.items[index]; - VL->hNext = ( HANDLE )ofsNext; - } } - } - //delete contact - DeleteSpace(wParam,sizeof(struct DBContact)); - //decrement contact count - dbHeader.contactCount--; - DBWrite(0,&dbHeader,sizeof(dbHeader)); - DBFlush(0); - //quit - LeaveCriticalSection(&csDbAccess); - return 0; -} - -static INT_PTR AddContact(WPARAM wParam,LPARAM lParam) -{ - struct DBContact dbc; - DWORD ofsNew; - - log0("add contact"); - EnterCriticalSection(&csDbAccess); - ofsNew=CreateNewSpace(sizeof(struct DBContact)); - dbc.signature=DBCONTACT_SIGNATURE; - dbc.eventCount=0; - dbc.ofsFirstEvent=dbc.ofsLastEvent=0; - dbc.ofsFirstSettings=0; - dbc.ofsNext=dbHeader.ofsFirstContact; - dbc.ofsFirstUnreadEvent=0; - dbc.timestampFirstUnread=0; - dbHeader.ofsFirstContact=ofsNew; - dbHeader.contactCount++; - DBWrite(ofsNew,&dbc,sizeof(struct DBContact)); - DBWrite(0,&dbHeader,sizeof(dbHeader)); - DBFlush(0); - - AddToCachedContactList((HANDLE)ofsNew, -1); - - LeaveCriticalSection(&csDbAccess); - NotifyEventHooks(hContactAddedEvent,(WPARAM)ofsNew,0); - return (INT_PTR)ofsNew; -} - -static INT_PTR IsDbContact(WPARAM wParam,LPARAM lParam) -{ - struct DBContact *dbc; - DWORD ofsContact=(DWORD)wParam; - int ret; - - EnterCriticalSection(&csDbAccess); - { - int index; - DBCachedContactValueList VLtemp; - VLtemp.hContact = (HANDLE)wParam; - if ( li.List_GetIndex(&lContacts,&VLtemp,&index)) - ret = TRUE; - else { - dbc=(struct DBContact*)DBRead(ofsContact,sizeof(struct DBContact),NULL); - ret=dbc->signature==DBCONTACT_SIGNATURE; - if (ret) - AddToCachedContactList((HANDLE)wParam, index); - } } - - LeaveCriticalSection(&csDbAccess); - return ret; -} diff --git a/plugins/db3x_mmap/dbevents.c b/plugins/db3x_mmap/dbevents.c deleted file mode 100644 index 24c568f02d..0000000000 --- a/plugins/db3x_mmap/dbevents.c +++ /dev/null @@ -1,449 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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" - -extern BOOL safetyMode; - -DWORD GetModuleNameOfs(const char *szName); -char *GetModuleNameByOfs(DWORD ofs); - -static INT_PTR GetEventCount(WPARAM wParam,LPARAM lParam); -static INT_PTR AddEvent(WPARAM wParam,LPARAM lParam); -static INT_PTR DeleteEvent(WPARAM wParam,LPARAM lParam); -static INT_PTR GetBlobSize(WPARAM wParam,LPARAM lParam); -static INT_PTR GetEvent(WPARAM wParam,LPARAM lParam); -static INT_PTR MarkEventRead(WPARAM wParam,LPARAM lParam); -static INT_PTR GetEventContact(WPARAM wParam,LPARAM lParam); -static INT_PTR FindFirstEvent(WPARAM wParam,LPARAM lParam); -static INT_PTR FindFirstUnreadEvent(WPARAM wParam,LPARAM lParam); -static INT_PTR FindLastEvent(WPARAM wParam,LPARAM lParam); -static INT_PTR FindNextEvent(WPARAM wParam,LPARAM lParam); -static INT_PTR FindPrevEvent(WPARAM wParam,LPARAM lParam); - -static HANDLE hEventDeletedEvent,hEventAddedEvent,hEventFilterAddedEvent; - -int InitEvents(void) -{ - CreateServiceFunction(MS_DB_EVENT_GETCOUNT,GetEventCount); - CreateServiceFunction(MS_DB_EVENT_ADD,AddEvent); - CreateServiceFunction(MS_DB_EVENT_DELETE,DeleteEvent); - CreateServiceFunction(MS_DB_EVENT_GETBLOBSIZE,GetBlobSize); - CreateServiceFunction(MS_DB_EVENT_GET,GetEvent); - CreateServiceFunction(MS_DB_EVENT_MARKREAD,MarkEventRead); - CreateServiceFunction(MS_DB_EVENT_GETCONTACT,GetEventContact); - CreateServiceFunction(MS_DB_EVENT_FINDFIRST,FindFirstEvent); - CreateServiceFunction(MS_DB_EVENT_FINDFIRSTUNREAD,FindFirstUnreadEvent); - CreateServiceFunction(MS_DB_EVENT_FINDLAST,FindLastEvent); - CreateServiceFunction(MS_DB_EVENT_FINDNEXT,FindNextEvent); - CreateServiceFunction(MS_DB_EVENT_FINDPREV,FindPrevEvent); - hEventDeletedEvent=CreateHookableEvent(ME_DB_EVENT_DELETED); - hEventAddedEvent=CreateHookableEvent(ME_DB_EVENT_ADDED); - hEventFilterAddedEvent=CreateHookableEvent(ME_DB_EVENT_FILTER_ADD); - return 0; -} - -void UninitEvents(void) -{ -} - -static INT_PTR GetEventCount(WPARAM wParam,LPARAM lParam) -{ - INT_PTR ret; - struct DBContact *dbc; - - EnterCriticalSection(&csDbAccess); - if(wParam==0) wParam=dbHeader.ofsUser; - dbc=(struct DBContact*)DBRead(wParam,sizeof(struct DBContact),NULL); - if(dbc->signature!=DBCONTACT_SIGNATURE) ret=-1; - else ret=dbc->eventCount; - LeaveCriticalSection(&csDbAccess); - return ret; -} - -static INT_PTR AddEvent(WPARAM wParam,LPARAM lParam) -{ - DBEVENTINFO *dbei=(DBEVENTINFO*)lParam; - struct DBContact dbc; - struct DBEvent dbe,*dbeTest; - DWORD ofsNew,ofsModuleName,ofsContact,ofsThis; - BOOL neednotify; - - if(dbei==NULL||dbei->cbSize!=sizeof(DBEVENTINFO)) return 0; - if(dbei->timestamp==0) return 0; - if (NotifyEventHooks(hEventFilterAddedEvent,wParam,lParam)) { - return 0; - } - EnterCriticalSection(&csDbAccess); - if(wParam==0) ofsContact=dbHeader.ofsUser; - else ofsContact=(DWORD)wParam; - dbc=*(struct DBContact*)DBRead(ofsContact,sizeof(struct DBContact),NULL); - if(dbc.signature!=DBCONTACT_SIGNATURE) { - LeaveCriticalSection(&csDbAccess); - return 0; - } - ofsNew=CreateNewSpace(offsetof(struct DBEvent,blob)+dbei->cbBlob); - ofsModuleName=GetModuleNameOfs(dbei->szModule); - - dbe.signature=DBEVENT_SIGNATURE; - dbe.ofsModuleName=ofsModuleName; - dbe.timestamp=dbei->timestamp; - dbe.flags=dbei->flags; - dbe.eventType=dbei->eventType; - dbe.cbBlob=dbei->cbBlob; - //find where to put it - sort by timestamp - if(dbc.eventCount==0) { - dbe.ofsPrev=wParam; - dbe.ofsNext=0; - dbe.flags|=DBEF_FIRST; - dbc.ofsFirstEvent=dbc.ofsLastEvent=ofsNew; - } - else { - dbeTest=(struct DBEvent*)DBRead(dbc.ofsFirstEvent,sizeof(struct DBEvent),NULL); - // Should new event be placed before first event in chain? - if (dbei->timestamp < dbeTest->timestamp) { - dbe.ofsPrev=wParam; - dbe.ofsNext=dbc.ofsFirstEvent; - dbe.flags|=DBEF_FIRST; - dbc.ofsFirstEvent=ofsNew; - dbeTest=(struct DBEvent*)DBRead(dbe.ofsNext,sizeof(struct DBEvent),NULL); - dbeTest->flags&=~DBEF_FIRST; - dbeTest->ofsPrev=ofsNew; - DBWrite(dbe.ofsNext,dbeTest,sizeof(struct DBEvent)); - } - else { - // Loop through the chain, starting at the end - ofsThis = dbc.ofsLastEvent; - dbeTest = (struct DBEvent*)DBRead(ofsThis, sizeof(struct DBEvent), NULL); - for(;;) { - // If the new event's timesstamp is equal to or greater than the - // current dbevent, it will be inserted after. If not, continue - // with the previous dbevent in chain. - if (dbe.timestamp >= dbeTest->timestamp) { - dbe.ofsPrev = ofsThis; - dbe.ofsNext = dbeTest->ofsNext; - dbeTest->ofsNext = ofsNew; - DBWrite(ofsThis, dbeTest, sizeof(struct DBEvent)); - if (dbe.ofsNext == 0) - dbc.ofsLastEvent = ofsNew; - else { - dbeTest = (struct DBEvent*)DBRead(dbe.ofsNext, sizeof(struct DBEvent), NULL); - dbeTest->ofsPrev = ofsNew; - DBWrite(dbe.ofsNext, dbeTest, sizeof(struct DBEvent)); - } - break; - } - ofsThis = dbeTest->ofsPrev; - dbeTest = (struct DBEvent*)DBRead(ofsThis, sizeof(struct DBEvent), NULL); - } - } - } - dbc.eventCount++; - if(!(dbe.flags&(DBEF_READ|DBEF_SENT))) { - if(dbe.timestamppBlob,dbei->cbBlob); - DBFlush(0); - - LeaveCriticalSection(&csDbAccess); - log1("add event @ %08x",ofsNew); - - // Notify only in safe mode or on really new events - if (neednotify) - NotifyEventHooks(hEventAddedEvent,wParam,(LPARAM)ofsNew); - - return (INT_PTR)ofsNew; -} - -static INT_PTR DeleteEvent(WPARAM wParam,LPARAM lParam) -{ - struct DBContact dbc; - DWORD ofsContact,ofsThis; - struct DBEvent dbe,*dbeNext,*dbePrev; - - EnterCriticalSection(&csDbAccess); - if(wParam==0) ofsContact=dbHeader.ofsUser; - else ofsContact=wParam; - dbc=*(struct DBContact*)DBRead(ofsContact,sizeof(struct DBContact),NULL); - dbe=*(struct DBEvent*)DBRead(lParam,sizeof(struct DBEvent),NULL); - if(dbc.signature!=DBCONTACT_SIGNATURE || dbe.signature!=DBEVENT_SIGNATURE) { - LeaveCriticalSection(&csDbAccess); - return 1; - } - log1("delete event @ %08x",wParam); - LeaveCriticalSection(&csDbAccess); - //call notifier while outside mutex - NotifyEventHooks(hEventDeletedEvent,wParam,lParam); - //get back in - EnterCriticalSection(&csDbAccess); - dbc=*(struct DBContact*)DBRead(ofsContact,sizeof(struct DBContact),NULL); - dbe=*(struct DBEvent*)DBRead(lParam,sizeof(struct DBEvent),NULL); - //check if this was the first unread, if so, recalc the first unread - if(dbc.ofsFirstUnreadEvent==(DWORD)lParam) { - dbeNext=&dbe; - for(;;) { - if(dbeNext->ofsNext==0) { - dbc.ofsFirstUnreadEvent=0; - dbc.timestampFirstUnread=0; - break; - } - ofsThis=dbeNext->ofsNext; - dbeNext=(struct DBEvent*)DBRead(ofsThis,sizeof(struct DBEvent),NULL); - if(!(dbeNext->flags&(DBEF_READ|DBEF_SENT))) { - dbc.ofsFirstUnreadEvent=ofsThis; - dbc.timestampFirstUnread=dbeNext->timestamp; - break; - } - } - } - //get previous and next events in chain and change offsets - if(dbe.flags&DBEF_FIRST) { - if(dbe.ofsNext==0) { - dbc.ofsFirstEvent=dbc.ofsLastEvent=0; - } - else { - dbeNext=(struct DBEvent*)DBRead(dbe.ofsNext,sizeof(struct DBEvent),NULL); - dbeNext->flags|=DBEF_FIRST; - dbeNext->ofsPrev=dbe.ofsPrev; - DBWrite(dbe.ofsNext,dbeNext,sizeof(struct DBEvent)); - dbc.ofsFirstEvent=dbe.ofsNext; - } - } - else { - if(dbe.ofsNext==0) { - dbePrev=(struct DBEvent*)DBRead(dbe.ofsPrev,sizeof(struct DBEvent),NULL); - dbePrev->ofsNext=0; - DBWrite(dbe.ofsPrev,dbePrev,sizeof(struct DBEvent)); - dbc.ofsLastEvent=dbe.ofsPrev; - } - else { - dbePrev=(struct DBEvent*)DBRead(dbe.ofsPrev,sizeof(struct DBEvent),NULL); - dbePrev->ofsNext=dbe.ofsNext; - DBWrite(dbe.ofsPrev,dbePrev,sizeof(struct DBEvent)); - dbeNext=(struct DBEvent*)DBRead(dbe.ofsNext,sizeof(struct DBEvent),NULL); - dbeNext->ofsPrev=dbe.ofsPrev; - DBWrite(dbe.ofsNext,dbeNext,sizeof(struct DBEvent)); - } - } - //delete event - DeleteSpace(lParam,offsetof(struct DBEvent,blob)+dbe.cbBlob); - //decrement event count - dbc.eventCount--; - DBWrite(ofsContact,&dbc,sizeof(struct DBContact)); - DBFlush(0); - //quit - LeaveCriticalSection(&csDbAccess); - return 0; -} - -static INT_PTR GetBlobSize(WPARAM wParam,LPARAM lParam) -{ - INT_PTR ret; - struct DBEvent *dbe; - - EnterCriticalSection(&csDbAccess); - dbe=(struct DBEvent*)DBRead(wParam,sizeof(struct DBEvent),NULL); - if(dbe->signature!=DBEVENT_SIGNATURE) ret=-1; - else ret=dbe->cbBlob; - LeaveCriticalSection(&csDbAccess); - return ret; -} - -static INT_PTR GetEvent(WPARAM wParam,LPARAM lParam) -{ - struct DBEvent *dbe; - DBEVENTINFO *dbei=(DBEVENTINFO*)lParam; - int bytesToCopy,i; - - if(dbei==NULL||dbei->cbSize!=sizeof(DBEVENTINFO)) return 1; - if(dbei->cbBlob>0 && dbei->pBlob==NULL) { - dbei->cbBlob = 0; - return 1; - } - EnterCriticalSection(&csDbAccess); - dbe=(struct DBEvent*)DBRead(wParam,sizeof(struct DBEvent),NULL); - if(dbe->signature!=DBEVENT_SIGNATURE) { - LeaveCriticalSection(&csDbAccess); - return 1; - } - dbei->szModule=GetModuleNameByOfs(dbe->ofsModuleName); - dbei->timestamp=dbe->timestamp; - dbei->flags=dbe->flags; - dbei->eventType=dbe->eventType; - if(dbei->cbBlobcbBlob) bytesToCopy=dbei->cbBlob; - else bytesToCopy=dbe->cbBlob; - dbei->cbBlob=dbe->cbBlob; - if (bytesToCopy && dbei->pBlob) - { - for(i=0;;i+=MAXCACHEDREADSIZE) { - if(bytesToCopy-i<=MAXCACHEDREADSIZE) { - CopyMemory(dbei->pBlob+i,DBRead(wParam+offsetof(struct DBEvent,blob)+i,bytesToCopy-i,NULL),bytesToCopy-i); - break; - } - CopyMemory(dbei->pBlob+i,DBRead(wParam+offsetof(struct DBEvent,blob)+i,MAXCACHEDREADSIZE,NULL),MAXCACHEDREADSIZE); - } - } - LeaveCriticalSection(&csDbAccess); - return 0; -} - -static INT_PTR MarkEventRead(WPARAM wParam,LPARAM lParam) -{ - INT_PTR ret; - struct DBEvent *dbe; - struct DBContact dbc; - DWORD ofsThis; - - EnterCriticalSection(&csDbAccess); - if(wParam==0) wParam=dbHeader.ofsUser; - dbc=*(struct DBContact*)DBRead(wParam,sizeof(struct DBContact),NULL); - dbe=(struct DBEvent*)DBRead(lParam,sizeof(struct DBEvent),NULL); - if(dbe->signature!=DBEVENT_SIGNATURE || dbc.signature!=DBCONTACT_SIGNATURE) { - LeaveCriticalSection(&csDbAccess); - return -1; - } - if(dbe->flags&DBEF_READ || dbe->flags&DBEF_SENT) { - ret=(INT_PTR)dbe->flags; - LeaveCriticalSection(&csDbAccess); - return ret; - } - log1("mark read @ %08x",wParam); - dbe->flags|=DBEF_READ; - DBWrite(lParam,dbe,sizeof(struct DBEvent)); - ret=(int)dbe->flags; - if(dbc.ofsFirstUnreadEvent==(DWORD)lParam) { - for(;;) { - if(dbe->ofsNext==0) { - dbc.ofsFirstUnreadEvent=0; - dbc.timestampFirstUnread=0; - break; - } - ofsThis=dbe->ofsNext; - dbe=(struct DBEvent*)DBRead(ofsThis,sizeof(struct DBEvent),NULL); - if(!(dbe->flags&(DBEF_READ|DBEF_SENT))) { - dbc.ofsFirstUnreadEvent=ofsThis; - dbc.timestampFirstUnread=dbe->timestamp; - break; - } - } - } - DBWrite(wParam,&dbc,sizeof(struct DBContact)); - DBFlush(0); - LeaveCriticalSection(&csDbAccess); - return ret; -} - -static INT_PTR GetEventContact(WPARAM wParam,LPARAM lParam) -{ - int ret; - struct DBEvent *dbe; - - EnterCriticalSection(&csDbAccess); - dbe=(struct DBEvent*)DBRead(wParam,sizeof(struct DBEvent),NULL); - if(dbe->signature!=DBEVENT_SIGNATURE) { - LeaveCriticalSection(&csDbAccess); - return -1; - } - while(!(dbe->flags&DBEF_FIRST)) - dbe=(struct DBEvent*)DBRead(dbe->ofsPrev,sizeof(struct DBEvent),NULL); - ret=(INT_PTR)dbe->ofsPrev; - LeaveCriticalSection(&csDbAccess); - return ret; -} - -static INT_PTR FindFirstEvent(WPARAM wParam,LPARAM lParam) -{ - INT_PTR ret; - struct DBContact *dbc; - - EnterCriticalSection(&csDbAccess); - if(wParam==0) wParam=dbHeader.ofsUser; - dbc=(struct DBContact*)DBRead(wParam,sizeof(struct DBContact),NULL); - if(dbc->signature!=DBCONTACT_SIGNATURE) ret=0; - else ret=(INT_PTR)dbc->ofsFirstEvent; - LeaveCriticalSection(&csDbAccess); - return ret; -} - -static INT_PTR FindFirstUnreadEvent(WPARAM wParam,LPARAM lParam) -{ - INT_PTR ret; - struct DBContact *dbc; - - EnterCriticalSection(&csDbAccess); - if(wParam==0) wParam=dbHeader.ofsUser; - dbc=(struct DBContact*)DBRead(wParam,sizeof(struct DBContact),NULL); - if(dbc->signature!=DBCONTACT_SIGNATURE) ret=0; - else ret=(INT_PTR)dbc->ofsFirstUnreadEvent; - LeaveCriticalSection(&csDbAccess); - return ret; -} - -static INT_PTR FindLastEvent(WPARAM wParam,LPARAM lParam) -{ - INT_PTR ret; - struct DBContact *dbc; - - EnterCriticalSection(&csDbAccess); - if(wParam==0) wParam=dbHeader.ofsUser; - dbc=(struct DBContact*)DBRead(wParam,sizeof(struct DBContact),NULL); - if(dbc->signature!=DBCONTACT_SIGNATURE) ret=0; - else ret=(INT_PTR)dbc->ofsLastEvent; - LeaveCriticalSection(&csDbAccess); - return ret; -} - -static INT_PTR FindNextEvent(WPARAM wParam,LPARAM lParam) -{ - INT_PTR ret; - struct DBEvent *dbe; - - EnterCriticalSection(&csDbAccess); - dbe=(struct DBEvent*)DBRead(wParam,sizeof(struct DBEvent),NULL); - if(dbe->signature!=DBEVENT_SIGNATURE) ret=0; - else ret=(INT_PTR)dbe->ofsNext; - LeaveCriticalSection(&csDbAccess); - return ret; -} - -static INT_PTR FindPrevEvent(WPARAM wParam,LPARAM lParam) -{ - INT_PTR ret; - struct DBEvent *dbe; - - EnterCriticalSection(&csDbAccess); - dbe=(struct DBEvent*)DBRead(wParam,sizeof(struct DBEvent),NULL); - if(dbe->signature!=DBEVENT_SIGNATURE) ret=0; - else if(dbe->flags&DBEF_FIRST) ret=0; - else ret=(INT_PTR)dbe->ofsPrev; - LeaveCriticalSection(&csDbAccess); - return ret; -} diff --git a/plugins/db3x_mmap/dbheaders.c b/plugins/db3x_mmap/dbheaders.c deleted file mode 100644 index 6ae9b33002..0000000000 --- a/plugins/db3x_mmap/dbheaders.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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" - -//the cache has not been loaded when these functions are used - -int CreateDbHeaders(HANDLE hFile) -{ - struct DBContact user; - DWORD bytesWritten; - - CopyMemory(dbHeader.signature,&dbSignature,sizeof(dbHeader.signature)); - dbHeader.version=DB_THIS_VERSION; - dbHeader.ofsFileEnd=sizeof(struct DBHeader); - dbHeader.slackSpace=0; - dbHeader.contactCount=0; - dbHeader.ofsFirstContact=0; - dbHeader.ofsFirstModuleName=0; - dbHeader.ofsUser=0; - //create user - dbHeader.ofsUser=dbHeader.ofsFileEnd; - dbHeader.ofsFileEnd+=sizeof(struct DBContact); - SetFilePointer(hFile,0,NULL,FILE_BEGIN); - WriteFile(hFile,&dbHeader,sizeof(dbHeader),&bytesWritten,NULL); - user.signature=DBCONTACT_SIGNATURE; - user.ofsNext=0; - user.ofsFirstSettings=0; - user.eventCount=0; - user.ofsFirstEvent=user.ofsLastEvent=0; - SetFilePointer(hFile,dbHeader.ofsUser,NULL,FILE_BEGIN); - WriteFile(hFile,&user,sizeof(struct DBContact),&bytesWritten,NULL); - FlushFileBuffers(hFile); - return 0; -} - -int CheckDbHeaders(struct DBHeader * hdr) -{ - if(memcmp(hdr->signature,&dbSignature,sizeof(hdr->signature))) return 1; - if(hdr->version!=DB_THIS_VERSION) return 2; - if(hdr->ofsUser==0) return 3; - return 0; -} - -int InitialiseDbHeaders(void) -{ - return 0; -} diff --git a/plugins/db3x_mmap/dbmodulechain.c b/plugins/db3x_mmap/dbmodulechain.c deleted file mode 100644 index 1af4226419..0000000000 --- a/plugins/db3x_mmap/dbmodulechain.c +++ /dev/null @@ -1,192 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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" - -static INT_PTR EnumModuleNames(WPARAM wParam,LPARAM lParam); - -typedef struct { - char *name; - DWORD ofs; -} ModuleName; - -HANDLE hModHeap = NULL; -static SortedList lMods, lOfs; - -static int ModCompare( ModuleName *mn1, ModuleName *mn2 ) -{ - return strcmp( mn1->name, mn2->name ); -} - -static int OfsCompare( ModuleName *mn1, ModuleName *mn2 ) -{ - return ( mn1->ofs - mn2->ofs ); -} - -void AddToList(char *name, DWORD len, DWORD ofs) -{ - int index; - ModuleName *mn = (ModuleName*)HeapAlloc(hModHeap,0,sizeof(ModuleName)); - mn->name = name; - mn->ofs = ofs; - - if (li.List_GetIndex(&lMods,mn,&index)) - DatabaseCorruption( _T("%s (Module Name not unique)")); - - li.List_Insert(&lMods,mn,index); - - if (li.List_GetIndex(&lOfs,mn,&index)) - DatabaseCorruption( _T("%s (Module Offset not unique)")); - - li.List_Insert(&lOfs,mn,index); -} - - -int InitModuleNames(void) -{ - struct DBModuleName *dbmn; - DWORD ofsThis; - int nameLen; - char *mod; - - hModHeap=HeapCreate(0,0,0); - lMods.sortFunc=ModCompare; - lMods.increment=50; - lOfs.sortFunc=OfsCompare; - lOfs.increment=50; - - ofsThis=dbHeader.ofsFirstModuleName; - dbmn=(struct DBModuleName*)DBRead(ofsThis,sizeof(struct DBModuleName),NULL); - while(ofsThis) { - if(dbmn->signature!=DBMODULENAME_SIGNATURE) DatabaseCorruption(NULL); - - nameLen=dbmn->cbName; - - mod = (char*)HeapAlloc(hModHeap,0,nameLen+1); - CopyMemory(mod,DBRead(ofsThis+offsetof(struct DBModuleName,name),nameLen,NULL),nameLen); - mod[nameLen] = 0; - - AddToList(mod, nameLen, ofsThis); - - ofsThis=dbmn->ofsNext; - dbmn=(struct DBModuleName*)DBRead(ofsThis,sizeof(struct DBModuleName),NULL); - } - CreateServiceFunction(MS_DB_MODULES_ENUM,EnumModuleNames); - return 0; -} - -void UninitModuleNames(void) -{ - HeapDestroy(hModHeap); - li.List_Destroy(&lMods); - li.List_Destroy(&lOfs); -} - -static DWORD FindExistingModuleNameOfs(const char *szName) -{ - static ModuleName *lastmn = NULL; - ModuleName mn, *pmn; - int index; - - mn.name = (char*)szName; - mn.ofs = 0; - - if (lastmn && ModCompare(&mn,lastmn) == 0) - return lastmn->ofs; - - if (li.List_GetIndex(&lMods,&mn,&index)) { - pmn = (ModuleName*)lMods.items[index]; - lastmn = pmn; - return pmn->ofs; - } - - return 0; -} - -//will create the offset if it needs to -DWORD GetModuleNameOfs(const char *szName) -{ - struct DBModuleName dbmn; - int nameLen; - DWORD ofsNew,ofsExisting; - char *mod; - - ofsExisting=FindExistingModuleNameOfs(szName); - if(ofsExisting) return ofsExisting; - - nameLen = (int)strlen(szName); - - //need to create the module name - ofsNew=CreateNewSpace(nameLen+offsetof(struct DBModuleName,name)); - dbmn.signature=DBMODULENAME_SIGNATURE; - dbmn.cbName=nameLen; - dbmn.ofsNext=dbHeader.ofsFirstModuleName; - dbHeader.ofsFirstModuleName=ofsNew; - DBWrite(0,&dbHeader,sizeof(dbHeader)); - DBWrite(ofsNew,&dbmn,offsetof(struct DBModuleName,name)); - DBWrite(ofsNew+offsetof(struct DBModuleName,name),(PVOID)szName,nameLen); - DBFlush(0); - - //add to cache - mod = (char*)HeapAlloc(hModHeap,0,nameLen+1); - strcpy(mod,szName); - AddToList(mod, nameLen, ofsNew); - - //quit - return ofsNew; -} - -char *GetModuleNameByOfs(DWORD ofs) -{ - static ModuleName *lastmn = NULL; - ModuleName mn, *pmn; - int index; - - if (lastmn && lastmn->ofs == ofs) - return lastmn->name; - - mn.name = NULL; - mn.ofs = ofs; - - if (li.List_GetIndex(&lOfs,&mn,&index)) { - pmn = (ModuleName*)lOfs.items[index]; - lastmn = pmn; - return pmn->name; - } - - DatabaseCorruption(NULL); - return NULL; -} - -static INT_PTR EnumModuleNames(WPARAM wParam,LPARAM lParam) -{ - int i; - int ret; - ModuleName *pmn; - for(i = 0; i < lMods.realCount; i++) { - pmn = (ModuleName *)lMods.items[i]; - ret=((DBMODULEENUMPROC)lParam)(pmn->name,pmn->ofs,wParam); - if(ret) return ret; - } - return 0; -} diff --git a/plugins/db3x_mmap/dbsettings.c b/plugins/db3x_mmap/dbsettings.c deleted file mode 100644 index 85b91b1b6c..0000000000 --- a/plugins/db3x_mmap/dbsettings.c +++ /dev/null @@ -1,1013 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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" - -DWORD GetModuleNameOfs(const char *szName); -DBCachedContactValueList* AddToCachedContactList(HANDLE hContact, int index); - -static int mirCp = CP_ACP; - -HANDLE hCacheHeap = NULL; -SortedList lContacts = {0}; -HANDLE hLastCachedContact = NULL; -static DBCachedContactValueList *LastVL = NULL; - -static SortedList lSettings={0}, lGlobalSettings={0}, lResidentSettings={0}; -static HANDLE hSettingChangeEvent = NULL; - -static DWORD GetSettingsGroupOfsByModuleNameOfs(struct DBContact *dbc,DWORD ofsModuleName) -{ - struct DBContactSettings *dbcs; - DWORD ofsThis; - - ofsThis=dbc->ofsFirstSettings; - while(ofsThis) { - dbcs=(struct DBContactSettings*)DBRead(ofsThis,sizeof(struct DBContactSettings),NULL); - if(dbcs->signature!=DBCONTACTSETTINGS_SIGNATURE) DatabaseCorruption(NULL); - if(dbcs->ofsModuleName==ofsModuleName) - return ofsThis; - - ofsThis=dbcs->ofsNext; - } - return 0; -} - -static DWORD __inline GetSettingValueLength(PBYTE pSetting) -{ - if(pSetting[0]&DBVTF_VARIABLELENGTH) return 2+*(PWORD)(pSetting+1); - return pSetting[0]; -} - -static char* InsertCachedSetting( const char* szName, size_t cbNameLen, int index ) -{ - char* newValue = (char*)HeapAlloc( hCacheHeap, 0, cbNameLen ); - *newValue = 0; - strcpy(newValue+1,szName+1); - li.List_Insert(&lSettings,newValue,index); - return newValue; -} - -static char* GetCachedSetting(const char *szModuleName,const char *szSettingName, int moduleNameLen, int settingNameLen) -{ - static char *lastsetting = NULL; - int index; - char szFullName[512]; - - strcpy(szFullName+1,szModuleName); - szFullName[moduleNameLen+1]='/'; - strcpy(szFullName+moduleNameLen+2,szSettingName); - - if (lastsetting && strcmp(szFullName+1,lastsetting) == 0) - return lastsetting; - - if (li.List_GetIndex(&lSettings,szFullName,&index)) - lastsetting = (char*)lSettings.items[index]+1; - else - lastsetting = InsertCachedSetting( szFullName, settingNameLen+moduleNameLen+3, index )+1; - - return lastsetting; -} - -static void SetCachedVariant( DBVARIANT* s /* new */, DBVARIANT* d /* cached */ ) -{ - char* szSave = ( d->type == DBVT_UTF8 || d->type == DBVT_ASCIIZ ) ? d->pszVal : NULL; - - memcpy( d, s, sizeof( DBVARIANT )); - if (( s->type == DBVT_UTF8 || s->type == DBVT_ASCIIZ ) && s->pszVal != NULL ) { - if ( szSave != NULL ) - d->pszVal = (char*)HeapReAlloc(hCacheHeap,0,szSave,strlen(s->pszVal)+1); - else - d->pszVal = (char*)HeapAlloc(hCacheHeap,0,strlen(s->pszVal)+1); - strcpy(d->pszVal,s->pszVal); - } - else if ( szSave != NULL ) - HeapFree(hCacheHeap,0,szSave); - -#ifdef DBLOGGING - switch( d->type ) { - case DBVT_BYTE: log1( "set cached byte: %d", d->bVal ); break; - case DBVT_WORD: log1( "set cached word: %d", d->wVal ); break; - case DBVT_DWORD: log1( "set cached dword: %d", d->dVal ); break; - case DBVT_UTF8: - case DBVT_ASCIIZ: log1( "set cached string: '%s'", d->pszVal ); break; - default: log1( "set cached crap: %d", d->type ); break; - } -#endif -} - -void FreeCachedVariant( DBVARIANT* V ) -{ - if (( V->type == DBVT_ASCIIZ || V->type == DBVT_UTF8 ) && V->pszVal != NULL ) - HeapFree(hCacheHeap,0,V->pszVal); -} - -static DBVARIANT* GetCachedValuePtr( HANDLE hContact, char* szSetting, int bAllocate ) -{ - int index; - - if ( hContact == 0 ) { - DBCachedGlobalValue Vtemp, *V; - Vtemp.name = szSetting; - if ( li.List_GetIndex(&lGlobalSettings,&Vtemp,&index)) { - V = (DBCachedGlobalValue*)lGlobalSettings.items[index]; - if ( bAllocate == -1 ) { - FreeCachedVariant( &V->value ); - li.List_Remove(&lGlobalSettings,index); - HeapFree(hCacheHeap,0,V); - return NULL; - } } - else { - if ( bAllocate != 1 ) - return NULL; - - V = (DBCachedGlobalValue*)HeapAlloc(hCacheHeap,HEAP_ZERO_MEMORY,sizeof(DBCachedGlobalValue)); - V->name = szSetting; - li.List_Insert(&lGlobalSettings,V,index); - } - - return &V->value; - } - else { - DBCachedContactValue *V, *V1; - DBCachedContactValueList VLtemp,*VL; - - if (hLastCachedContact==hContact && LastVL) { - VL = LastVL; - } - else { - VLtemp.hContact=hContact; - - if ( !li.List_GetIndex(&lContacts,&VLtemp,&index)) - { - if ( bAllocate != 1 ) - return NULL; - - VL = AddToCachedContactList(hContact,index); - } - else VL = (DBCachedContactValueList*)lContacts.items[index]; - - LastVL = VL; - hLastCachedContact = hContact; - } - - for ( V = VL->first; V != NULL; V = V->next) - if (V->name == szSetting) - break; - - if ( V == NULL ) { - if ( bAllocate != 1 ) - return NULL; - - V = HeapAlloc(hCacheHeap,HEAP_ZERO_MEMORY,sizeof(DBCachedContactValue)); - if (VL->last) - VL->last->next = V; - else - VL->first = V; - VL->last = V; - V->name = szSetting; - } - else if ( bAllocate == -1 ) { - LastVL = NULL; - FreeCachedVariant(&V->value); - if ( VL->first == V ) { - VL->first = V->next; - if (VL->last == V) - VL->last = V->next; // NULL - } - else - for ( V1 = VL->first; V1 != NULL; V1 = V1->next ) - if ( V1->next == V ) { - V1->next = V->next; - if (VL->last == V) - VL->last = V1; - break; - } - HeapFree(hCacheHeap,0,V); - return NULL; - } - - return &V->value; -} } - -#define NeedBytes(n) if(bytesRemaining<(n)) pBlob=(PBYTE)DBRead(ofsBlobPtr,(n),&bytesRemaining) -#define MoveAlong(n) {int x=n; pBlob+=(x); ofsBlobPtr+=(x); bytesRemaining-=(x);} -#define VLT(n) ((n==DBVT_UTF8)?DBVT_ASCIIZ:n) -static __inline int GetContactSettingWorker(HANDLE hContact,DBCONTACTGETSETTING *dbcgs,int isStatic) -{ - struct DBContact *dbc; - DWORD ofsModuleName,ofsContact,ofsSettingsGroup,ofsBlobPtr; - int settingNameLen,moduleNameLen; - int bytesRemaining; - PBYTE pBlob; - char* szCachedSettingName; - - if ((!dbcgs->szSetting) || (!dbcgs->szModule)) - return 1; - // the db format can't tolerate more than 255 bytes of space (incl. null) for settings+module name - settingNameLen=(int)strlen(dbcgs->szSetting); - moduleNameLen=(int)strlen(dbcgs->szModule); - if ( settingNameLen > 0xFE ) - { - #ifdef _DEBUG - OutputDebugStringA("GetContactSettingWorker() got a > 255 setting name length. \n"); - #endif - return 1; - } - if ( moduleNameLen > 0xFE ) - { - #ifdef _DEBUG - OutputDebugStringA("GetContactSettingWorker() got a > 255 module name length. \n"); - #endif - return 1; - } - - EnterCriticalSection(&csDbAccess); - - log3("get [%08p] %s/%s",hContact,dbcgs->szModule,dbcgs->szSetting); - - szCachedSettingName = GetCachedSetting(dbcgs->szModule,dbcgs->szSetting,moduleNameLen,settingNameLen); - { - DBVARIANT* pCachedValue = GetCachedValuePtr( hContact, szCachedSettingName, 0 ); - if ( pCachedValue != NULL ) { - if ( pCachedValue->type == DBVT_ASCIIZ || pCachedValue->type == DBVT_UTF8 ) { - int cbOrigLen = dbcgs->pValue->cchVal; - char* cbOrigPtr = dbcgs->pValue->pszVal; - memcpy( dbcgs->pValue, pCachedValue, sizeof( DBVARIANT )); - if ( isStatic ) { - int cbLen = 0; - if ( pCachedValue->pszVal != NULL ) - cbLen = (int)strlen( pCachedValue->pszVal ); - - cbOrigLen--; - dbcgs->pValue->pszVal = cbOrigPtr; - if(cbLenpValue->pszVal,pCachedValue->pszVal,cbOrigLen); - dbcgs->pValue->pszVal[cbOrigLen]=0; - dbcgs->pValue->cchVal=cbLen; - } - else { - dbcgs->pValue->pszVal = (char*)mir_alloc(strlen(pCachedValue->pszVal)+1); - strcpy(dbcgs->pValue->pszVal,pCachedValue->pszVal); - } - } - else - memcpy( dbcgs->pValue, pCachedValue, sizeof( DBVARIANT )); - - switch( dbcgs->pValue->type ) { - case DBVT_BYTE: log1( "get cached byte: %d", dbcgs->pValue->bVal ); break; - case DBVT_WORD: log1( "get cached word: %d", dbcgs->pValue->wVal ); break; - case DBVT_DWORD: log1( "get cached dword: %d", dbcgs->pValue->dVal ); break; - case DBVT_UTF8: - case DBVT_ASCIIZ: log1( "get cached string: '%s'", dbcgs->pValue->pszVal); break; - default: log1( "get cached crap: %d", dbcgs->pValue->type ); break; - } - - LeaveCriticalSection(&csDbAccess); - return ( pCachedValue->type == DBVT_DELETED ) ? 1 : 0; - } } - - ofsModuleName=GetModuleNameOfs(dbcgs->szModule); - if(hContact==NULL) ofsContact=dbHeader.ofsUser; - else ofsContact=(DWORD)hContact; - dbc=(struct DBContact*)DBRead(ofsContact,sizeof(struct DBContact),NULL); - if(dbc->signature!=DBCONTACT_SIGNATURE) { - LeaveCriticalSection(&csDbAccess); - return 1; - } - ofsSettingsGroup=GetSettingsGroupOfsByModuleNameOfs(dbc,ofsModuleName); - if(ofsSettingsGroup) { - ofsBlobPtr=ofsSettingsGroup+offsetof(struct DBContactSettings,blob); - pBlob = DBRead(ofsBlobPtr,sizeof(struct DBContactSettings),&bytesRemaining); - while(pBlob[0]) { - NeedBytes(1+settingNameLen); - if(pBlob[0]==settingNameLen && !memcmp(pBlob+1,dbcgs->szSetting,settingNameLen)) { - MoveAlong(1+settingNameLen); - NeedBytes(5); - if(isStatic && pBlob[0]&DBVTF_VARIABLELENGTH && VLT(dbcgs->pValue->type) != VLT(pBlob[0])) { - LeaveCriticalSection(&csDbAccess); - return 1; - } - dbcgs->pValue->type=pBlob[0]; - switch(pBlob[0]) { - case DBVT_DELETED: { /* this setting is deleted */ - dbcgs->pValue->type=DBVT_DELETED; - LeaveCriticalSection(&csDbAccess); - return 2; - } - case DBVT_BYTE: dbcgs->pValue->bVal=pBlob[1]; break; - case DBVT_WORD: dbcgs->pValue->wVal=*(PWORD)(pBlob+1); break; - case DBVT_DWORD: dbcgs->pValue->dVal=*(PDWORD)(pBlob+1); break; - case DBVT_UTF8: - case DBVT_ASCIIZ: - NeedBytes(3+*(PWORD)(pBlob+1)); - if(isStatic) { - dbcgs->pValue->cchVal--; - if(*(PWORD)(pBlob+1)pValue->cchVal) dbcgs->pValue->cchVal=*(PWORD)(pBlob+1); - CopyMemory(dbcgs->pValue->pszVal,pBlob+3,dbcgs->pValue->cchVal); - dbcgs->pValue->pszVal[dbcgs->pValue->cchVal]=0; - dbcgs->pValue->cchVal=*(PWORD)(pBlob+1); - } - else { - dbcgs->pValue->pszVal=(char*)mir_alloc(1+*(PWORD)(pBlob+1)); - CopyMemory(dbcgs->pValue->pszVal,pBlob+3,*(PWORD)(pBlob+1)); - dbcgs->pValue->pszVal[*(PWORD)(pBlob+1)]=0; - } - break; - case DBVT_BLOB: - NeedBytes(3+*(PWORD)(pBlob+1)); - if(isStatic) { - if(*(PWORD)(pBlob+1)pValue->cpbVal) dbcgs->pValue->cpbVal=*(PWORD)(pBlob+1); - CopyMemory(dbcgs->pValue->pbVal,pBlob+3,dbcgs->pValue->cpbVal); - } - else { - dbcgs->pValue->pbVal=(char*)mir_alloc(*(PWORD)(pBlob+1)); - CopyMemory(dbcgs->pValue->pbVal,pBlob+3,*(PWORD)(pBlob+1)); - } - dbcgs->pValue->cpbVal=*(PWORD)(pBlob+1); - break; - } - - /**** add to cache **********************/ - if ( dbcgs->pValue->type != DBVT_BLOB ) - { - DBVARIANT* pCachedValue = GetCachedValuePtr( hContact, szCachedSettingName, 1 ); - if ( pCachedValue != NULL ) - SetCachedVariant(dbcgs->pValue,pCachedValue); - } - - LeaveCriticalSection(&csDbAccess); - logg(); - return 0; - } - NeedBytes(1); - MoveAlong(pBlob[0]+1); - NeedBytes(3); - MoveAlong(1+GetSettingValueLength(pBlob)); - NeedBytes(1); - } } - - /**** add missing setting to cache **********************/ - if ( dbcgs->pValue->type != DBVT_BLOB ) - { - DBVARIANT* pCachedValue = GetCachedValuePtr( hContact, szCachedSettingName, 1 ); - if ( pCachedValue != NULL ) - pCachedValue->type = DBVT_DELETED; - } - - LeaveCriticalSection(&csDbAccess); - logg(); - return 1; -} - -static INT_PTR GetContactSetting(WPARAM wParam,LPARAM lParam) -{ - DBCONTACTGETSETTING* dgs = ( DBCONTACTGETSETTING* )lParam; - dgs->pValue->type = 0; - if ( GetContactSettingWorker(( HANDLE )wParam, dgs, 0 )) - return 1; - - if ( dgs->pValue->type == DBVT_UTF8 ) { - WCHAR* tmp = NULL; - char* p = NEWSTR_ALLOCA(dgs->pValue->pszVal); - if ( mir_utf8decode( p, &tmp ) != NULL ) { - BOOL bUsed = FALSE; - int result = WideCharToMultiByte( mirCp, WC_NO_BEST_FIT_CHARS, tmp, -1, NULL, 0, NULL, &bUsed ); - - mir_free( dgs->pValue->pszVal ); - - if ( bUsed || result == 0 ) { - dgs->pValue->type = DBVT_WCHAR; - dgs->pValue->pwszVal = tmp; - } - else { - dgs->pValue->type = DBVT_ASCIIZ; - dgs->pValue->pszVal = mir_alloc( result ); - WideCharToMultiByte( mirCp, WC_NO_BEST_FIT_CHARS, tmp, -1, dgs->pValue->pszVal, result, NULL, NULL ); - mir_free( tmp ); - } - } - else { - dgs->pValue->type = DBVT_ASCIIZ; - mir_free( tmp ); - } } - - return 0; -} - -static INT_PTR GetContactSettingStr(WPARAM wParam,LPARAM lParam) -{ - DBCONTACTGETSETTING* dgs = (DBCONTACTGETSETTING*)lParam; - int iSaveType = dgs->pValue->type; - - if ( GetContactSettingWorker(( HANDLE )wParam, dgs, 0 )) - return 1; - - if ( iSaveType == 0 || iSaveType == dgs->pValue->type ) - return 0; - - if ( dgs->pValue->type != DBVT_ASCIIZ && dgs->pValue->type != DBVT_UTF8 ) - return 1; - - if ( iSaveType == DBVT_WCHAR ) { - if ( dgs->pValue->type != DBVT_UTF8 ) { - int len = MultiByteToWideChar( CP_ACP, 0, dgs->pValue->pszVal, -1, NULL, 0 ); - wchar_t* wszResult = ( wchar_t* )mir_alloc(( len+1 )*sizeof( wchar_t )); - if ( wszResult == NULL ) - return 1; - - MultiByteToWideChar( CP_ACP, 0, dgs->pValue->pszVal, -1, wszResult, len ); - wszResult[ len ] = 0; - mir_free( dgs->pValue->pszVal ); - dgs->pValue->pwszVal = wszResult; - } - else { - char* savePtr = NEWSTR_ALLOCA(dgs->pValue->pszVal); - mir_free( dgs->pValue->pszVal ); - if ( !mir_utf8decode( savePtr, &dgs->pValue->pwszVal )) - return 1; - } - } - else if ( iSaveType == DBVT_UTF8 ) { - char* tmpBuf = mir_utf8encode( dgs->pValue->pszVal ); - if ( tmpBuf == NULL ) - return 1; - - mir_free( dgs->pValue->pszVal ); - dgs->pValue->pszVal = tmpBuf; - } - else if ( iSaveType == DBVT_ASCIIZ ) - mir_utf8decode( dgs->pValue->pszVal, NULL ); - - dgs->pValue->type = iSaveType; - return 0; -} - -INT_PTR GetContactSettingStatic(WPARAM wParam,LPARAM lParam) -{ - DBCONTACTGETSETTING* dgs = (DBCONTACTGETSETTING*)lParam; - if ( GetContactSettingWorker(( HANDLE )wParam, dgs, 1 )) - return 1; - - if ( dgs->pValue->type == DBVT_UTF8 ) { - mir_utf8decode( dgs->pValue->pszVal, NULL ); - dgs->pValue->type = DBVT_ASCIIZ; - } - - return 0; -} - -static INT_PTR FreeVariant(WPARAM wParam,LPARAM lParam) -{ - DBVARIANT *dbv=(DBVARIANT*)lParam; - if ( dbv == 0 ) return 1; - switch ( dbv->type ) { - case DBVT_ASCIIZ: - case DBVT_UTF8: - case DBVT_WCHAR: - { - if ( dbv->pszVal ) mir_free(dbv->pszVal); - dbv->pszVal=0; - break; - } - case DBVT_BLOB: - { - if ( dbv->pbVal ) mir_free(dbv->pbVal); - dbv->pbVal=0; - break; - } - } - dbv->type=0; - return 0; -} - -static INT_PTR SetSettingResident(WPARAM wParam,LPARAM lParam) -{ - size_t cbSettingNameLen = strlen(( char* )lParam) + 2; - if (cbSettingNameLen < 512) - { - char* szSetting; - int idx; - char szTemp[512]; - strcpy( szTemp+1, ( char* )lParam ); - - EnterCriticalSection(&csDbAccess); - if ( !li.List_GetIndex( &lSettings, szTemp, &idx )) - szSetting = InsertCachedSetting( szTemp, cbSettingNameLen, idx ); - else - szSetting = lSettings.items[ idx ]; - - *szSetting = (char)wParam; - - if ( !li.List_GetIndex( &lResidentSettings, szSetting+1, &idx )) - { - if (wParam) - li.List_Insert(&lResidentSettings,szSetting+1,idx); - } - else if (!wParam) - li.List_Remove(&lResidentSettings,idx); - - LeaveCriticalSection(&csDbAccess); - } - return 0; -} - -static INT_PTR WriteContactSetting(WPARAM wParam,LPARAM lParam) -{ - DBCONTACTWRITESETTING *dbcws=(DBCONTACTWRITESETTING*)lParam; - DBCONTACTWRITESETTING tmp; - struct DBContact dbc; - DWORD ofsModuleName; - struct DBContactSettings dbcs; - PBYTE pBlob; - int settingNameLen=0; - int moduleNameLen=0; - int settingDataLen=0; - int bytesRequired,bytesRemaining; - DWORD ofsContact,ofsSettingsGroup,ofsBlobPtr; - - if (dbcws == NULL || dbcws->szSetting==NULL || dbcws->szModule==NULL ) - return 1; - - // the db format can't tolerate more than 255 bytes of space (incl. null) for settings+module name - settingNameLen=(int)strlen(dbcws->szSetting); - moduleNameLen=(int)strlen(dbcws->szModule); - if ( settingNameLen > 0xFE ) - { - #ifdef _DEBUG - OutputDebugStringA("WriteContactSetting() got a > 255 setting name length. \n"); - #endif - return 1; - } - if ( moduleNameLen > 0xFE ) - { - #ifdef _DEBUG - OutputDebugStringA("WriteContactSetting() got a > 255 module name length. \n"); - #endif - return 1; - } - - tmp = *dbcws; - - if (tmp.value.type == DBVT_WCHAR) { - if (tmp.value.pszVal != NULL) { - char* val = mir_utf8encodeW(tmp.value.pwszVal); - if ( val == NULL ) - return 1; - - tmp.value.pszVal = ( char* )alloca( strlen( val )+1 ); - strcpy( tmp.value.pszVal, val ); - mir_free(val); - tmp.value.type = DBVT_UTF8; - } - else return 1; - } - - if(tmp.value.type!=DBVT_BYTE && tmp.value.type!=DBVT_WORD && tmp.value.type!=DBVT_DWORD && tmp.value.type!=DBVT_ASCIIZ && tmp.value.type!=DBVT_UTF8 && tmp.value.type!=DBVT_BLOB) - return 1; - if ((!tmp.szModule) || (!tmp.szSetting) || ((tmp.value.type == DBVT_ASCIIZ || tmp.value.type == DBVT_UTF8 )&& tmp.value.pszVal == NULL) || (tmp.value.type == DBVT_BLOB && tmp.value.pbVal == NULL) ) - return 1; - - // the db can not tolerate strings/blobs longer than 0xFFFF since the format writes 2 lengths - switch( tmp.value.type ) { - case DBVT_ASCIIZ: case DBVT_BLOB: case DBVT_UTF8: - { size_t len = ( tmp.value.type != DBVT_BLOB ) ? strlen(tmp.value.pszVal) : tmp.value.cpbVal; - if ( len >= 0xFFFF ) { - #ifdef _DEBUG - OutputDebugStringA("WriteContactSetting() writing huge string/blob, rejecting ( >= 0xFFFF ) \n"); - #endif - return 1; - } - } - } - - EnterCriticalSection(&csDbAccess); - { - char* szCachedSettingName = GetCachedSetting(tmp.szModule, tmp.szSetting, moduleNameLen, settingNameLen); - if ( tmp.value.type != DBVT_BLOB ) { - DBVARIANT* pCachedValue = GetCachedValuePtr((HANDLE)wParam, szCachedSettingName, 1); - if ( pCachedValue != NULL ) { - BOOL bIsIdentical = FALSE; - if ( pCachedValue->type == tmp.value.type ) { - switch(tmp.value.type) { - case DBVT_BYTE: bIsIdentical = pCachedValue->bVal == tmp.value.bVal; break; - case DBVT_WORD: bIsIdentical = pCachedValue->wVal == tmp.value.wVal; break; - case DBVT_DWORD: bIsIdentical = pCachedValue->dVal == tmp.value.dVal; break; - case DBVT_UTF8: - case DBVT_ASCIIZ: bIsIdentical = strcmp( pCachedValue->pszVal, tmp.value.pszVal ) == 0; break; - } - if ( bIsIdentical ) { - LeaveCriticalSection(&csDbAccess); - return 0; - } - } - SetCachedVariant(&tmp.value, pCachedValue); - } - if ( szCachedSettingName[-1] != 0 ) { - LeaveCriticalSection(&csDbAccess); - NotifyEventHooks(hSettingChangeEvent,wParam,(LPARAM)&tmp); - return 0; - } - } - else GetCachedValuePtr((HANDLE)wParam, szCachedSettingName, -1); - } - - ofsModuleName=GetModuleNameOfs(tmp.szModule); - if(wParam==0) ofsContact=dbHeader.ofsUser; - else ofsContact=wParam; - - dbc=*(struct DBContact*)DBRead(ofsContact,sizeof(struct DBContact),NULL); - if(dbc.signature!=DBCONTACT_SIGNATURE) { - LeaveCriticalSection(&csDbAccess); - return 1; - } - log0("write setting"); - //make sure the module group exists - ofsSettingsGroup=GetSettingsGroupOfsByModuleNameOfs(&dbc,ofsModuleName); - if(ofsSettingsGroup==0) { //module group didn't exist - make it - if(tmp.value.type&DBVTF_VARIABLELENGTH) { - if(tmp.value.type==DBVT_ASCIIZ || tmp.value.type==DBVT_UTF8) bytesRequired=(int)strlen(tmp.value.pszVal)+2; - else if(tmp.value.type==DBVT_BLOB) bytesRequired=tmp.value.cpbVal+2; - } - else bytesRequired=tmp.value.type; - bytesRequired+=2+settingNameLen; - bytesRequired+=(DB_SETTINGS_RESIZE_GRANULARITY-(bytesRequired%DB_SETTINGS_RESIZE_GRANULARITY))%DB_SETTINGS_RESIZE_GRANULARITY; - ofsSettingsGroup=CreateNewSpace(bytesRequired+offsetof(struct DBContactSettings,blob)); - dbcs.signature=DBCONTACTSETTINGS_SIGNATURE; - dbcs.ofsNext=dbc.ofsFirstSettings; - dbcs.ofsModuleName=ofsModuleName; - dbcs.cbBlob=bytesRequired; - dbcs.blob[0]=0; - dbc.ofsFirstSettings=ofsSettingsGroup; - DBWrite(ofsContact,&dbc,sizeof(struct DBContact)); - DBWrite(ofsSettingsGroup,&dbcs,sizeof(struct DBContactSettings)); - ofsBlobPtr=ofsSettingsGroup+offsetof(struct DBContactSettings,blob); - pBlob=(PBYTE)DBRead(ofsBlobPtr,1,&bytesRemaining); - } - else { - dbcs=*(struct DBContactSettings*)DBRead(ofsSettingsGroup,sizeof(struct DBContactSettings),&bytesRemaining); - //find if the setting exists - ofsBlobPtr=ofsSettingsGroup+offsetof(struct DBContactSettings,blob); - pBlob=(PBYTE)DBRead(ofsBlobPtr,1,&bytesRemaining); - while(pBlob[0]) { - NeedBytes(settingNameLen+1); - if(pBlob[0]==settingNameLen && !memcmp(pBlob+1,tmp.szSetting,settingNameLen)) - break; - NeedBytes(1); - MoveAlong(pBlob[0]+1); - NeedBytes(3); - MoveAlong(1+GetSettingValueLength(pBlob)); - NeedBytes(1); - } - if(pBlob[0]) { //setting already existed, and up to end of name is in cache - MoveAlong(1+settingNameLen); - //if different type or variable length and length is different - NeedBytes(3); - if(pBlob[0]!=tmp.value.type || ((pBlob[0]==DBVT_ASCIIZ || pBlob[0]==DBVT_UTF8) && *(PWORD)(pBlob+1)!=strlen(tmp.value.pszVal)) || (pBlob[0]==DBVT_BLOB && *(PWORD)(pBlob+1)!=tmp.value.cpbVal)) { - //bin it - int nameLen,valLen; - DWORD ofsSettingToCut; - NeedBytes(3); - nameLen=1+settingNameLen; - valLen=1+GetSettingValueLength(pBlob); - ofsSettingToCut=ofsBlobPtr-nameLen; - MoveAlong(valLen); - NeedBytes(1); - while(pBlob[0]) { - MoveAlong(pBlob[0]+1); - NeedBytes(3); - MoveAlong(1+GetSettingValueLength(pBlob)); - NeedBytes(1); - } - DBMoveChunk(ofsSettingToCut,ofsSettingToCut+nameLen+valLen,ofsBlobPtr+1-ofsSettingToCut); - ofsBlobPtr-=nameLen+valLen; - pBlob=(PBYTE)DBRead(ofsBlobPtr,1,&bytesRemaining); - } - else { - //replace existing setting at pBlob - MoveAlong(1); //skip data type - switch(tmp.value.type) { - case DBVT_BYTE: DBWrite(ofsBlobPtr,&tmp.value.bVal,1); break; - case DBVT_WORD: DBWrite(ofsBlobPtr,&tmp.value.wVal,2); break; - case DBVT_DWORD: DBWrite(ofsBlobPtr,&tmp.value.dVal,4); break; - case DBVT_UTF8: - case DBVT_ASCIIZ: DBWrite(ofsBlobPtr+2,tmp.value.pszVal,(int)strlen(tmp.value.pszVal)); break; - case DBVT_BLOB: DBWrite(ofsBlobPtr+2,tmp.value.pbVal,tmp.value.cpbVal); break; - } - //quit - DBFlush(1); - LeaveCriticalSection(&csDbAccess); - //notify - NotifyEventHooks(hSettingChangeEvent,wParam,(LPARAM)&tmp); - return 0; - } - } - } - //cannot do a simple replace, add setting to end of list - //pBlob already points to end of list - //see if it fits - if(tmp.value.type&DBVTF_VARIABLELENGTH) { - if(tmp.value.type==DBVT_ASCIIZ || tmp.value.type==DBVT_UTF8) bytesRequired=(int)strlen(tmp.value.pszVal)+2; - else if(tmp.value.type==DBVT_BLOB) bytesRequired=tmp.value.cpbVal+2; - } - else bytesRequired=tmp.value.type; - bytesRequired+=2+settingNameLen; - bytesRequired+=ofsBlobPtr+1-(ofsSettingsGroup+offsetof(struct DBContactSettings,blob)); - if((DWORD)bytesRequired>dbcs.cbBlob) { - //doesn't fit: move entire group - struct DBContactSettings *dbcsPrev; - DWORD ofsDbcsPrev,ofsNew; - - bytesRequired+=(DB_SETTINGS_RESIZE_GRANULARITY-(bytesRequired%DB_SETTINGS_RESIZE_GRANULARITY))%DB_SETTINGS_RESIZE_GRANULARITY; - //find previous group to change its offset - ofsDbcsPrev=dbc.ofsFirstSettings; - if(ofsDbcsPrev==ofsSettingsGroup) ofsDbcsPrev=0; - else { - dbcsPrev=(struct DBContactSettings*)DBRead(ofsDbcsPrev,sizeof(struct DBContactSettings),NULL); - while(dbcsPrev->ofsNext!=ofsSettingsGroup) { - if(dbcsPrev->ofsNext==0) DatabaseCorruption(NULL); - ofsDbcsPrev=dbcsPrev->ofsNext; - dbcsPrev=(struct DBContactSettings*)DBRead(ofsDbcsPrev,sizeof(struct DBContactSettings),NULL); - } - } - - //create the new one - ofsNew=ReallocSpace(ofsSettingsGroup, dbcs.cbBlob+offsetof(struct DBContactSettings,blob), bytesRequired+offsetof(struct DBContactSettings,blob)); - - dbcs.cbBlob=bytesRequired; - - DBWrite(ofsNew,&dbcs,offsetof(struct DBContactSettings,blob)); - if(ofsDbcsPrev==0) { - dbc.ofsFirstSettings=ofsNew; - DBWrite(ofsContact,&dbc,sizeof(struct DBContact)); - } - else { - dbcsPrev=(struct DBContactSettings*)DBRead(ofsDbcsPrev,sizeof(struct DBContactSettings),NULL); - dbcsPrev->ofsNext=ofsNew; - DBWrite(ofsDbcsPrev,dbcsPrev,offsetof(struct DBContactSettings,blob)); - } - ofsBlobPtr+=ofsNew-ofsSettingsGroup; - ofsSettingsGroup=ofsNew; - pBlob=(PBYTE)DBRead(ofsBlobPtr,1,&bytesRemaining); - } - //we now have a place to put it and enough space: make it - DBWrite(ofsBlobPtr,&settingNameLen,1); - DBWrite(ofsBlobPtr+1,(PVOID)tmp.szSetting,settingNameLen); - MoveAlong(1+settingNameLen); - DBWrite(ofsBlobPtr,&tmp.value.type,1); - MoveAlong(1); - switch(tmp.value.type) { - case DBVT_BYTE: DBWrite(ofsBlobPtr,&tmp.value.bVal,1); MoveAlong(1); break; - case DBVT_WORD: DBWrite(ofsBlobPtr,&tmp.value.wVal,2); MoveAlong(2); break; - case DBVT_DWORD: DBWrite(ofsBlobPtr,&tmp.value.dVal,4); MoveAlong(4); break; - case DBVT_UTF8: - case DBVT_ASCIIZ: - { int len=(int)strlen(tmp.value.pszVal); - DBWrite(ofsBlobPtr,&len,2); - DBWrite(ofsBlobPtr+2,tmp.value.pszVal,len); - MoveAlong(2+len); - } - break; - case DBVT_BLOB: - DBWrite(ofsBlobPtr,&tmp.value.cpbVal,2) ; - DBWrite(ofsBlobPtr+2,tmp.value.pbVal,tmp.value.cpbVal); - MoveAlong(2+tmp.value.cpbVal); - break; - } - { BYTE zero=0; - DBWrite(ofsBlobPtr,&zero,1); - } - //quit - DBFlush(1); - LeaveCriticalSection(&csDbAccess); - //notify - NotifyEventHooks(hSettingChangeEvent, wParam, (LPARAM)&tmp ); - return 0; -} - -static INT_PTR DeleteContactSetting(WPARAM wParam,LPARAM lParam) -{ - DBCONTACTGETSETTING *dbcgs=(DBCONTACTGETSETTING*)lParam; - struct DBContact *dbc; - DWORD ofsModuleName,ofsSettingsGroup,ofsBlobPtr; - PBYTE pBlob; - int settingNameLen,moduleNameLen,bytesRemaining; - char* szCachedSettingName; - WPARAM saveWparam = wParam; - - if ((!dbcgs->szModule) || (!dbcgs->szSetting)) - return 1; - // the db format can't tolerate more than 255 bytes of space (incl. null) for settings+module name - settingNameLen=(int)strlen(dbcgs->szSetting); - moduleNameLen=(int)strlen(dbcgs->szModule); - if ( settingNameLen > 0xFE ) - { - #ifdef _DEBUG - OutputDebugStringA("DeleteContactSetting() got a > 255 setting name length. \n"); - #endif - return 1; - } - if ( moduleNameLen > 0xFE ) - { - #ifdef _DEBUG - OutputDebugStringA("DeleteContactSetting() got a > 255 module name length. \n"); - #endif - return 1; - } - - EnterCriticalSection(&csDbAccess); - ofsModuleName=GetModuleNameOfs(dbcgs->szModule); - if(wParam==0) wParam=dbHeader.ofsUser; - - dbc=(struct DBContact*)DBRead(wParam,sizeof(struct DBContact),NULL); - if(dbc->signature!=DBCONTACT_SIGNATURE) { - LeaveCriticalSection(&csDbAccess); - return 1; - } - //make sure the module group exists - ofsSettingsGroup=GetSettingsGroupOfsByModuleNameOfs(dbc,ofsModuleName); - if(ofsSettingsGroup==0) { - LeaveCriticalSection(&csDbAccess); - return 1; - } - //find if the setting exists - ofsBlobPtr=ofsSettingsGroup+offsetof(struct DBContactSettings,blob); - pBlob=(PBYTE)DBRead(ofsBlobPtr,1,&bytesRemaining); - while(pBlob[0]) { - NeedBytes(settingNameLen+1); - if(pBlob[0]==settingNameLen && !memcmp(pBlob+1,dbcgs->szSetting,settingNameLen)) - break; - NeedBytes(1); - MoveAlong(pBlob[0]+1); - NeedBytes(3); - MoveAlong(1+GetSettingValueLength(pBlob)); - NeedBytes(1); - } - if(!pBlob[0]) { //setting didn't exist - LeaveCriticalSection(&csDbAccess); - return 1; - } - { //bin it - int nameLen,valLen; - DWORD ofsSettingToCut; - MoveAlong(1+settingNameLen); - NeedBytes(3); - nameLen=1+settingNameLen; - valLen=1+GetSettingValueLength(pBlob); - ofsSettingToCut=ofsBlobPtr-nameLen; - MoveAlong(valLen); - NeedBytes(1); - while(pBlob[0]) { - MoveAlong(pBlob[0]+1); - NeedBytes(3); - MoveAlong(1+GetSettingValueLength(pBlob)); - NeedBytes(1); - } - DBMoveChunk(ofsSettingToCut,ofsSettingToCut+nameLen+valLen,ofsBlobPtr+1-ofsSettingToCut); - } - - szCachedSettingName = GetCachedSetting(dbcgs->szModule,dbcgs->szSetting,moduleNameLen,settingNameLen); - GetCachedValuePtr((HANDLE)saveWparam, szCachedSettingName, -1 ); - - //quit - DBFlush(1); - LeaveCriticalSection(&csDbAccess); - { //notify - DBCONTACTWRITESETTING dbcws={0}; - dbcws.szModule=dbcgs->szModule; - dbcws.szSetting=dbcgs->szSetting; - dbcws.value.type=DBVT_DELETED; - NotifyEventHooks(hSettingChangeEvent,saveWparam,(LPARAM)&dbcws); - } - return 0; -} - -static INT_PTR EnumContactSettings(WPARAM wParam,LPARAM lParam) -{ - DBCONTACTENUMSETTINGS *dbces=(DBCONTACTENUMSETTINGS*)lParam; - struct DBContact *dbc; - DWORD ofsModuleName,ofsContact,ofsBlobPtr; - int bytesRemaining, result; - PBYTE pBlob; - char szSetting[256]; - - if (!dbces->szModule) - return -1; - - EnterCriticalSection(&csDbAccess); - - ofsModuleName=GetModuleNameOfs(dbces->szModule); - if(wParam==0) ofsContact=dbHeader.ofsUser; - else ofsContact=wParam; - dbc=(struct DBContact*)DBRead(ofsContact,sizeof(struct DBContact),NULL); - if(dbc->signature!=DBCONTACT_SIGNATURE) { - LeaveCriticalSection(&csDbAccess); - return -1; - } - dbces->ofsSettings=GetSettingsGroupOfsByModuleNameOfs(dbc,ofsModuleName); - if(!dbces->ofsSettings) { - LeaveCriticalSection(&csDbAccess); - return -1; - } - ofsBlobPtr=dbces->ofsSettings+offsetof(struct DBContactSettings,blob); - pBlob=(PBYTE)DBRead(ofsBlobPtr,1,&bytesRemaining); - if(pBlob[0]==0) { - LeaveCriticalSection(&csDbAccess); - return -1; - } - result = 0; - while(pBlob[0]) { - NeedBytes(1); - NeedBytes(1+pBlob[0]); - CopyMemory(szSetting,pBlob+1,pBlob[0]); szSetting[pBlob[0]]=0; - result = (dbces->pfnEnumProc)(szSetting,dbces->lParam); - MoveAlong(1+pBlob[0]); - NeedBytes(3); - MoveAlong(1+GetSettingValueLength(pBlob)); - NeedBytes(1); - } - LeaveCriticalSection(&csDbAccess); - return result; -} - -static INT_PTR EnumResidentSettings(WPARAM wParam,LPARAM lParam) -{ - int i; - int ret; - for(i = 0; i < lResidentSettings.realCount; i++) { - ret=((DBMODULEENUMPROC)lParam)(lResidentSettings.items[i],0,wParam); - if(ret) return ret; - } - return 0; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// -// Module initialization procedure - -static int stringCompare( DBCachedSettingName* p1, DBCachedSettingName* p2 ) -{ - return strcmp( p1->name, p2->name ); -} - -static int stringCompare2( char* p1, char* p2 ) -{ - return strcmp( p1, p2); -} - -int InitSettings(void) -{ - CreateServiceFunction(MS_DB_CONTACT_GETSETTING,GetContactSetting); - CreateServiceFunction(MS_DB_CONTACT_GETSETTING_STR,GetContactSettingStr); - CreateServiceFunction(MS_DB_CONTACT_GETSETTINGSTATIC,GetContactSettingStatic); - CreateServiceFunction(MS_DB_CONTACT_FREEVARIANT,FreeVariant); - CreateServiceFunction(MS_DB_CONTACT_WRITESETTING,WriteContactSetting); - CreateServiceFunction(MS_DB_CONTACT_DELETESETTING,DeleteContactSetting); - CreateServiceFunction(MS_DB_CONTACT_ENUMSETTINGS,EnumContactSettings); - CreateServiceFunction(MS_DB_SETSETTINGRESIDENT,SetSettingResident); - CreateServiceFunction("DB/ResidentSettings/Enum",EnumResidentSettings); - - hSettingChangeEvent=CreateHookableEvent(ME_DB_CONTACT_SETTINGCHANGED); - - hCacheHeap=HeapCreate(0,0,0); - lSettings.sortFunc=stringCompare; - lSettings.increment=100; - lContacts.sortFunc=HandleKeySort; - lContacts.increment=50; - lGlobalSettings.sortFunc=HandleKeySort; - lGlobalSettings.increment=50; - lResidentSettings.sortFunc=stringCompare2; - lResidentSettings.increment=50; - - mirCp = CallService( MS_LANGPACK_GETCODEPAGE, 0, 0 ); - return 0; -} - -void UninitSettings(void) -{ - HeapDestroy(hCacheHeap); - li.List_Destroy(&lContacts); - li.List_Destroy(&lSettings); - li.List_Destroy(&lGlobalSettings); - li.List_Destroy(&lResidentSettings); -} diff --git a/plugins/db3x_mmap/encrypt.c b/plugins/db3x_mmap/encrypt.c deleted file mode 100644 index a42d79eae2..0000000000 --- a/plugins/db3x_mmap/encrypt.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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" - -//VERY VERY VERY BASIC ENCRYPTION FUNCTION - - -void Encrypt(char*msg,BOOL up) -{ - int i; - int jump; - if (up) - { - jump=5; - } - else - { - jump=-5; - } - - for (i=0;msg[i];i++) - { - msg[i]=msg[i]+jump; - } - -} - -static INT_PTR EncodeString(WPARAM wParam,LPARAM lParam) -{ - Encrypt((char*)lParam,TRUE); - return 0; -} - -static INT_PTR DecodeString(WPARAM wParam,LPARAM lParam) -{ - Encrypt((char*)lParam,FALSE); - return 0; -} - -int InitCrypt(void) -{ - CreateServiceFunction(MS_DB_CRYPT_ENCODESTRING,EncodeString); - CreateServiceFunction(MS_DB_CRYPT_DECODESTRING,DecodeString); - return 0; -} diff --git a/plugins/db3x_mmap/encryption.h b/plugins/db3x_mmap/encryption.h deleted file mode 100644 index 73c2d7e13a..0000000000 --- a/plugins/db3x_mmap/encryption.h +++ /dev/null @@ -1,23 +0,0 @@ -/* -Miranda ICQ: the free icq client for MS Windows -Copyright (C) 2000-2 Richard Hughes, Roland Rabien & Tristan Van de Vreede - -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. -*/ -#ifndef MODULAR -#include - -void Encrypt(char*msg,BOOL up); -#endif \ No newline at end of file diff --git a/plugins/db3x_mmap/init.c b/plugins/db3x_mmap/init.c deleted file mode 100644 index 452c315d29..0000000000 --- a/plugins/db3x_mmap/init.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2003 Miranda ICQ/IM project, -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" - -struct MM_INTERFACE mmi; -struct LIST_INTERFACE li; -struct UTF8_INTERFACE utfi; -int hLangpack; - -extern char szDbPath[MAX_PATH]; - -static PLUGININFOEX pluginInfo = { - sizeof(PLUGININFOEX), - "Miranda mmap database driver", - __VERSION_DWORD, - "Provides Miranda database support: global settings, contacts, history, settings per contact.", - "Miranda-IM project", - "bio@msx.ru; ghazan@miranda-im.org", - "Copyright 2000-2011 Miranda IM project", - "", - UNICODE_AWARE, - DEFMOD_DB, - {0xf7a6b27c, 0x9d9c, 0x4a42, { 0xbe, 0x86, 0xa4, 0x48, 0xae, 0x10, 0x91, 0x61 }} //{F7A6B27C-9D9C-4a42-BE86-A448AE109161} -}; - -HINSTANCE g_hInst=NULL; -PLUGINLINK *pluginLink; - -static int getCapability( int flag ) -{ - return 0; -} - -// returns 0 if the profile is created, EMKPRF* -static int makeDatabase(char * profile, int * error) -{ - HANDLE hFile = CreateFileA(profile, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); - if ( hFile != INVALID_HANDLE_VALUE ) { - CreateDbHeaders(hFile); - CloseHandle(hFile); - return 0; - } - if ( error != NULL ) *error=EMKPRF_CREATEFAILED; - return 1; -} - -// returns 0 if the given profile has a valid header -static int grokHeader( char * profile, int * error ) -{ - int rc=1; - int chk=0; - struct DBHeader hdr; - HANDLE hFile = INVALID_HANDLE_VALUE; - DWORD dummy=0; - - hFile = CreateFileA(profile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); - if ( hFile == INVALID_HANDLE_VALUE ) { - if ( error != NULL ) *error=EGROKPRF_CANTREAD; - return 1; - } - // read the header, which can fail (for various reasons) - if ( !ReadFile(hFile, &hdr, sizeof(struct DBHeader), &dummy, NULL) ) { - if ( error != NULL) *error=EGROKPRF_CANTREAD; - CloseHandle(hFile); - return 1; - } - chk=CheckDbHeaders(&hdr); - if ( chk == 0 ) { - // all the internal tests passed, hurrah - rc=0; - if ( error != NULL ) *error=0; - } else { - // 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; - } - } // switch - } //if - CloseHandle(hFile); - return rc; -} - -// returns 0 if all the APIs are injected otherwise, 1 -static int LoadDatabase( char * profile, void * plink ) -{ - PLUGINLINK *link = plink; -#ifdef _DEBUG - _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); -#endif - // don't need thread notifications - strncpy(szDbPath, profile, sizeof(szDbPath)); - - // this is like Load()'s pluginLink - pluginLink=link; - - // set the memory, lists & UTF8 manager - mir_getLI( &li ); - mir_getMMI( &mmi ); - mir_getUTFI( &utfi ); - mir_getLP( &pluginInfo ); - - // inject all APIs and hooks into the core - return LoadDatabaseModule(); -} - -static int UnloadDatabase(int wasLoaded) -{ - if ( !wasLoaded) return 0; - UnloadDatabaseModule(); - return 0; -} - -static int getFriendlyName( char * buf, size_t cch, int shortName ) -{ - strncpy(buf,shortName ? "db3x mmap driver" : "db3x mmap database support",cch); - return 0; -} - -static DATABASELINK dblink = { - sizeof(DATABASELINK), - getCapability, - getFriendlyName, - makeDatabase, - grokHeader, - LoadDatabase, - UnloadDatabase, -}; - -BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD dwReason, LPVOID reserved) -{ - g_hInst=hInstDLL; - return TRUE; -} - -__declspec(dllexport) DATABASELINK* DatabasePluginInfo(void * reserved) -{ - return &dblink; -} - -__declspec(dllexport) PLUGININFOEX * MirandaPluginInfoEx(DWORD mirandaVersion) -{ - if ( mirandaVersion < MIRANDA_VERSION_CORE ) { - MessageBox( NULL, _T("The db3x_mmap plugin cannot be loaded. It requires Miranda IM 0.7.0.0 or later."), _T("db3x_mmap Plugin"), MB_OK|MB_ICONWARNING|MB_SETFOREGROUND|MB_TOPMOST ); - return NULL; - } - return &pluginInfo; -} - -static const MUUID interfaces[] = {MIID_DATABASE, MIID_LAST}; -__declspec(dllexport) const MUUID* MirandaPluginInterfaces(void) -{ - return interfaces; -} - -int __declspec(dllexport) Load(PLUGINLINK * link) -{ - return 1; -} - -int __declspec(dllexport) Unload(void) -{ - return 0; -} diff --git a/plugins/db3x_mmap/resource.h b/plugins/db3x_mmap/resource.h deleted file mode 100644 index 96abbfff99..0000000000 --- a/plugins/db3x_mmap/resource.h +++ /dev/null @@ -1,30 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by resource.rc -// -#define IDC_NOTOALL 3 -#define IDD_INSTALLINI 235 -#define IDD_WARNINICHANGE 236 -#define IDD_INIIMPORTDONE 237 -#define IDC_ININAME 1333 -#define IDC_VIEWINI 1334 -#define IDC_SECURITYINFO 1335 -#define IDC_SETTINGNAME 1336 -#define IDC_NEWVALUE 1337 -#define IDC_WARNNOMORE 1338 -#define IDC_DELETE 1339 -#define IDC_RECYCLE 1340 -#define IDC_NEWNAME 1341 -#define IDC_MOVE 1342 -#define IDC_LEAVE 1343 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 269 -#define _APS_NEXT_COMMAND_VALUE 40018 -#define _APS_NEXT_CONTROL_VALUE 1657 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/plugins/db3x_mmap/resource.rc b/plugins/db3x_mmap/resource.rc deleted file mode 100644 index 47b87e4156..0000000000 --- a/plugins/db3x_mmap/resource.rc +++ /dev/null @@ -1,2 +0,0 @@ -#include "db3x_mmap.rc" -#include "version.rc" diff --git a/plugins/db3x_mmap/version.h b/plugins/db3x_mmap/version.h deleted file mode 100644 index 826d9fdefb..0000000000 --- a/plugins/db3x_mmap/version.h +++ /dev/null @@ -1,5 +0,0 @@ -#include "../../include/m_version.h" - -#define __FILEVERSION_STRING MIRANDA_VERSION_FILEVERSION -#define __VERSION_STRING MIRANDA_VERSION_STRING -#define __VERSION_DWORD MIRANDA_VERSION_DWORD diff --git a/plugins/db3x_mmap/version.rc b/plugins/db3x_mmap/version.rc deleted file mode 100644 index 4cb51b5037..0000000000 --- a/plugins/db3x_mmap/version.rc +++ /dev/null @@ -1,39 +0,0 @@ - -#include -#include "version.h" - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION __FILEVERSION_STRING - PRODUCTVERSION __FILEVERSION_STRING - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "041904b0" - BEGIN - VALUE "FileDescription", "Miranda IM Mmap DataBase Engine 3x" - VALUE "FileVersion", __VERSION_STRING - VALUE "LegalCopyright", "Copyright (C) 2000-2007" - VALUE "OriginalFilename", "dbx_mmap.dll" - VALUE "ProductName", "Miranda IM Mmap DataBase Engine 3x" - VALUE "ProductVersion", __VERSION_STRING - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x419, 1200 - END -END -- cgit v1.2.3