From d5d6965af7e69367babf40b7fb1d7fca8617cabe Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 26 Jul 2012 14:56:53 +0000 Subject: dbtool is divided into two parts: DbChecker & appendix for db3x_mmap plugin git-svn-id: http://svn.miranda-ng.org/main/trunk@1195 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Db3x_mmap/src/dbtool/initialchecks.cpp | 81 ++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 plugins/Db3x_mmap/src/dbtool/initialchecks.cpp (limited to 'plugins/Db3x_mmap/src/dbtool/initialchecks.cpp') diff --git a/plugins/Db3x_mmap/src/dbtool/initialchecks.cpp b/plugins/Db3x_mmap/src/dbtool/initialchecks.cpp new file mode 100644 index 0000000000..21ccff5976 --- /dev/null +++ b/plugins/Db3x_mmap/src/dbtool/initialchecks.cpp @@ -0,0 +1,81 @@ +/* +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 "..\commonheaders.h" + +extern DWORD sourceFileSize,spaceUsed; + +int WorkInitialChecks(int firstTime) +{ + DWORD bytesRead; + + sourceFileSize = GetFileSize(opts.hFile,NULL); + if (sourceFileSize == 0) { + AddToStatus(STATUS_WARNING,TranslateT("Database is newly created and has no data to process")); + AddToStatus(STATUS_SUCCESS,TranslateT("Processing completed successfully")); + return ERROR_INVALID_DATA; + } + ReadFile(opts.hFile,&dbhdr,sizeof(dbhdr),&bytesRead,NULL); + if (bytesRead")); + opts.hOutFile = INVALID_HANDLE_VALUE; + } + else { + _tcscpy(opts.outputFilename,opts.filename); + *_tcsrchr(opts.outputFilename,'.') = 0; + _tcscat(opts.outputFilename,TranslateT(" (Output).dat")); + opts.hOutFile = CreateFile(opts.outputFilename,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_FLAG_SEQUENTIAL_SCAN,NULL); + if (opts.hOutFile == INVALID_HANDLE_VALUE) { + AddToStatus(STATUS_FATAL,TranslateT("Can't create output file (%u)"),GetLastError()); + return ERROR_ACCESS_DENIED; + } + } + + opts.hMap = CreateFileMapping(opts.hFile, NULL, opts.bAggressive?PAGE_WRITECOPY:PAGE_READONLY, 0, 0, NULL); + + if (opts.hMap) + opts.pFile = (BYTE*)MapViewOfFile(opts.hMap, opts.bAggressive?FILE_MAP_COPY:FILE_MAP_READ, 0, 0 ,0); + else { + AddToStatus(STATUS_FATAL,TranslateT("Can't create file mapping (%u)"),GetLastError()); + return ERROR_ACCESS_DENIED; + } + + if (!opts.pFile) { + AddToStatus(STATUS_FATAL,TranslateT("Can't create map view of file (%u)"),GetLastError()); + return ERROR_ACCESS_DENIED; + } + if (ReadSegment(0,&dbhdr,sizeof(dbhdr)) != ERROR_SUCCESS) return ERROR_READ_FAULT; + if (WriteSegment(0,&dbhdr,sizeof(dbhdr)) == WS_ERROR) return ERROR_HANDLE_DISK_FULL; + spaceUsed = dbhdr.ofsFileEnd-dbhdr.slackSpace; + dbhdr.ofsFileEnd = sizeof(dbhdr); + return ERROR_NO_MORE_ITEMS; +} -- cgit v1.2.3