From c2df6e7bbf6efdb36f751379c154623191864a1f Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 21 Jul 2012 18:25:03 +0000 Subject: Dbx_mmap_SA ready git-svn-id: http://svn.miranda-ng.org/main/trunk@1094 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Dbx_mmap_SA/database.cpp | 218 --------------------------------------- 1 file changed, 218 deletions(-) delete mode 100644 plugins/Dbx_mmap_SA/database.cpp (limited to 'plugins/Dbx_mmap_SA/database.cpp') diff --git a/plugins/Dbx_mmap_SA/database.cpp b/plugins/Dbx_mmap_SA/database.cpp deleted file mode 100644 index 56c44850a1..0000000000 --- a/plugins/Dbx_mmap_SA/database.cpp +++ /dev/null @@ -1,218 +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); -int InitEvents(void); -int InitModuleNames(void); -void UninitModuleNames(void); -int InitCache(void); -void UninitCache(void); -int InitIni(void); -void UninitIni(void); -int InitPreset(void); -void UninitPreset(void); -int InitDialogs(void); -void InitSecurity(void); -void UnloadSecurity(void); - -HANDLE hDbFile = INVALID_HANDLE_VALUE; -CRITICAL_SECTION csDbAccess; -struct DBHeader dbHeader; -TCHAR szDbPath[MAX_PATH]; - -static void UnloadDatabase(void) -{ - // update profile last modified time - DWORD bytesWritten; - SetFilePointer(hDbFile,0,NULL,FILE_BEGIN); - WriteFile(hDbFile,dbHeader.signature,sizeof(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(); - UninitPreset(); - UninitSettings(); - UninitModuleNames(); - UninitCache(); - UnloadDatabase(); - UnloadSecurity(); - DeleteCriticalSection(&csDbAccess); -} - -INT_PTR GetProfileName(WPARAM wParam, LPARAM lParam) -{ - TCHAR *p = _tcsrchr(szDbPath, '\\'); - if ( p == 0 ) return 1; - p++; - _tcsncpy((TCHAR*)lParam, p, (size_t) wParam); - return 0; -} - -int LoadDatabaseModule(void) -{ - InitializeCriticalSection(&csDbAccess); - log0("DB logging running"); - { - DWORD dummy = 0; - hDbFile = CreateFile(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; - } - } - InitSecurity(); - CheckDbHeaders(&dbHeader); - - TCHAR szDBName[MAX_PATH]; - GetProfileName((WPARAM)50, (LPARAM)szDBName); - if (bEncoding && !g_Db->CheckPassword(dbHeader.checkWord, szDBName)) - return 1; - - if (InitCache()) return 1; - if (InitModuleNames()) return 1; - if (InitContacts()) return 1; - if (InitSettings()) return 1; - if (InitEvents()) return 1; - if (InitPreset()) return 1; - if (InitDialogs()) 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 -- cgit v1.2.3