From 15e6e13624e3bd322db67861ec27bd5f9d18b6e8 Mon Sep 17 00:00:00 2001 From: Jonas Schnelli Date: Sat, 5 Mar 2016 16:08:10 -0500 Subject: [PATCH] [Wallet] optimize return value of InitLoadWallet() --- src/init.cpp | 7 +++++-- src/wallet/wallet.cpp | 14 +++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index 0fd8de08c..ba9860014 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1427,12 +1427,15 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) std::string warningString; std::string errorString; pwalletMain = CWallet::InitLoadWallet(fDisableWallet, strWalletFile, warningString, errorString); - if (!pwalletMain) - return false; if (!warningString.empty()) InitWarning(warningString); if (!errorString.empty()) + { + LogPrintf("%s", errorString); return InitError(errorString); + } + if (!pwalletMain) + return false; } #else // ENABLE_WALLET LogPrintf("No wallet support compiled in!\n"); diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 56287d4f4..d409d7480 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3002,6 +3002,7 @@ CWallet* CWallet::InitLoadWallet(bool fDisableWallet, const std::string& strWall CWallet *tempWallet = new CWallet(strWalletFile); DBErrors nZapWalletRet = tempWallet->ZapWalletTx(vWtx); if (nZapWalletRet != DB_LOAD_OK) { + errorString = _("Error loading wallet.dat: Wallet corrupted"); uiInterface.InitMessage(_("Error loading wallet.dat: Wallet corrupted")); return NULL; } @@ -3031,10 +3032,12 @@ CWallet* CWallet::InitLoadWallet(bool fDisableWallet, const std::string& strWall { errorString += strprintf(_("Wallet needed to be rewritten: restart %s to complete"), _(PACKAGE_NAME)) + "\n"; LogPrintf("%s", errorString); - return walletInstance; } else errorString += _("Error loading wallet.dat") + "\n"; + + if (!errorString.empty()) + return NULL; } if (GetBoolArg("-upgradewallet", fFirstRun)) @@ -3049,7 +3052,10 @@ CWallet* CWallet::InitLoadWallet(bool fDisableWallet, const std::string& strWall else LogPrintf("Allowing wallet upgrade up to %i\n", nMaxVersion); if (nMaxVersion < walletInstance->GetVersion()) + { errorString += _("Cannot downgrade wallet") + "\n"; + return NULL; + } walletInstance->SetMaxVersion(nMaxVersion); } @@ -3062,13 +3068,15 @@ CWallet* CWallet::InitLoadWallet(bool fDisableWallet, const std::string& strWall if (walletInstance->GetKeyFromPool(newDefaultKey)) { walletInstance->SetDefaultKey(newDefaultKey); if (!walletInstance->SetAddressBook(walletInstance->vchDefaultKey.GetID(), "", "receive")) + { errorString += _("Cannot write default address") += "\n"; + return NULL; + } } walletInstance->SetBestChain(chainActive.GetLocator()); } - LogPrintf("%s", errorString); LogPrintf(" wallet %15dms\n", GetTimeMillis() - nStart); RegisterValidationInterface(walletInstance); @@ -3099,7 +3107,7 @@ CWallet* CWallet::InitLoadWallet(bool fDisableWallet, const std::string& strWall if (pindexRescan != block) { errorString = _("Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node)"); - return walletInstance; + return NULL; } }