From 48540940b6c28bb4378abfeb500ec45a625b37b6 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Tue, 15 May 2012 10:38:20 +0000 Subject: initial commit git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Dbx_mmap_SA/Dbtool/user.cpp | 71 +++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 plugins/Dbx_mmap_SA/Dbtool/user.cpp (limited to 'plugins/Dbx_mmap_SA/Dbtool/user.cpp') diff --git a/plugins/Dbx_mmap_SA/Dbtool/user.cpp b/plugins/Dbx_mmap_SA/Dbtool/user.cpp new file mode 100644 index 0000000000..79f30eace7 --- /dev/null +++ b/plugins/Dbx_mmap_SA/Dbtool/user.cpp @@ -0,0 +1,71 @@ +/* +Miranda Database Tool +Copyright (C) 2001-2005 Richard Hughes + +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 "dbtool.h" + +static DBContact user; +static int phase; +static DWORD ofsUser; + +int WorkSettingsChain(DWORD ofsContact,DBContact *dbc,int firstTime); +int WorkEventChain(DWORD ofsContact,DBContact *dbc,int firstTime); + +int WorkUser(int firstTime) +{ + int first=0; + + if(firstTime) { + AddToStatus(STATUS_MESSAGE,TranslateT("Processing user data")); + if(!SignatureValid(dbhdr.ofsUser,DBCONTACT_SIGNATURE)) { + AddToStatus(STATUS_ERROR,TranslateT("User corrupted, this could cause major problems")); + return ERROR_NO_MORE_ITEMS; + } + if(ReadSegment(dbhdr.ofsUser,&user,sizeof(DBContact))!=ERROR_SUCCESS) + return ERROR_NO_MORE_ITEMS; + if(user.ofsNext) { + AddToStatus(STATUS_WARNING,TranslateT("More than one user contact: keeping only first")); + user.ofsNext=0; + } + if((ofsUser=WriteSegment(WSOFS_END,&user,sizeof(DBContact)))==WS_ERROR) + return ERROR_HANDLE_DISK_FULL; + dbhdr.ofsUser=ofsUser; + phase=0; + first=1; + } + switch(phase) { + int ret; + + case 0: + ret=WorkSettingsChain(ofsUser,&user,first); + if(ret==ERROR_NO_MORE_ITEMS) { + phase++; first=1; + } + else if(ret) return ret; + else break; + case 1: + ret=WorkEventChain(ofsUser,&user,first); + if(ret==ERROR_NO_MORE_ITEMS) { + if(WriteSegment(ofsUser,&user,sizeof(DBContact))==WS_ERROR) + return ERROR_HANDLE_DISK_FULL; + return ERROR_NO_MORE_ITEMS; + } + else if(ret) return ret; + break; + } + return ERROR_SUCCESS; +} \ No newline at end of file -- cgit v1.2.3