From 2bb1c87700a80f0b20b4b2cbd68a0d82a18dbcc0 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Wed, 4 Feb 2015 21:19:27 +0100 Subject: refactor: move bdb (bitdb) interaction from init.cpp to wallet.cpp this will remove db.h from init.cpp --- src/init.cpp | 57 +++++++++++++-------------------------------------------- 1 file changed, 13 insertions(+), 44 deletions(-) (limited to 'src/init.cpp') diff --git a/src/init.cpp b/src/init.cpp index a930a97a94..95ec45015f 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -24,7 +24,6 @@ #include "util.h" #include "utilmoneystr.h" #ifdef ENABLE_WALLET -#include "wallet/db.h" #include "wallet/wallet.h" #include "wallet/walletdb.h" #endif @@ -151,7 +150,7 @@ void Shutdown() StopRPCThreads(); #ifdef ENABLE_WALLET if (pwalletMain) - bitdb.Flush(false); + pwalletMain->Flush(false); GenerateBitcoins(false, NULL, 0); #endif StopNode(); @@ -184,7 +183,7 @@ void Shutdown() } #ifdef ENABLE_WALLET if (pwalletMain) - bitdb.Flush(true); + pwalletMain->Flush(true); #endif #ifndef WIN32 boost::filesystem::remove(GetPidFile()); @@ -852,47 +851,17 @@ bool AppInit2(boost::thread_group& threadGroup) LogPrintf("Using wallet %s\n", strWalletFile); uiInterface.InitMessage(_("Verifying wallet...")); - if (!bitdb.Open(GetDataDir())) - { - // try moving the database env out of the way - boost::filesystem::path pathDatabase = GetDataDir() / "database"; - boost::filesystem::path pathDatabaseBak = GetDataDir() / strprintf("database.%d.bak", GetTime()); - try { - boost::filesystem::rename(pathDatabase, pathDatabaseBak); - LogPrintf("Moved old %s to %s. Retrying.\n", pathDatabase.string(), pathDatabaseBak.string()); - } catch (const boost::filesystem::filesystem_error&) { - // failure is ok (well, not really, but it's not worse than what we started with) - } - - // try again - if (!bitdb.Open(GetDataDir())) { - // if it still fails, it probably means we can't even create the database env - string msg = strprintf(_("Error initializing wallet database environment %s!"), strDataDir); - return InitError(msg); - } - } - - if (GetBoolArg("-salvagewallet", false)) - { - // Recover readable keypairs: - if (!CWalletDB::Recover(bitdb, strWalletFile, true)) - return false; - } - - if (boost::filesystem::exists(GetDataDir() / strWalletFile)) - { - CDBEnv::VerifyResult r = bitdb.Verify(strWalletFile, CWalletDB::Recover); - if (r == CDBEnv::RECOVER_OK) - { - string msg = strprintf(_("Warning: wallet.dat corrupt, data salvaged!" - " Original wallet.dat saved as wallet.{timestamp}.bak in %s; if" - " your balance or transactions are incorrect you should" - " restore from a backup."), strDataDir); - InitWarning(msg); - } - if (r == CDBEnv::RECOVER_FAIL) - return InitError(_("wallet.dat corrupt, salvage failed")); - } + std::string warningString; + std::string errorString; + + if (!CWallet::Verify(strWalletFile, warningString, errorString)) + return false; + + if (!warningString.empty()) + InitWarning(warningString); + if (!errorString.empty()) + return InitError(warningString); + } // (!fDisableWallet) #endif // ENABLE_WALLET // ********************************************************* Step 6: network initialization -- cgit v1.2.3