diff options
author | John Newbery <john@johnnewbery.com> | 2018-04-18 14:17:09 -0400 |
---|---|---|
committer | John Newbery <john@johnnewbery.com> | 2018-05-16 11:59:58 -0400 |
commit | 876eb64680968c8fe2a28d1ecfd88a08d8967ead (patch) | |
tree | db3bbc04d2c7b5d3c992bc4fb02090a61623a78f /src | |
parent | e0e90db07b4e798dd1625bd23c2e9bd96fc6ff49 (diff) |
[wallet] Pass error message back from CWallet::Verify()
Pass an error message back from CWallet::Verify(), and call
InitError/InitWarning from WalletInit::Verify().
This means that we can call CWallet::Verify() independently from
WalletInit and not have InitErrors printed to stdout. It also means that
the error can be reported to the user if dynamic wallet load fails.
Diffstat (limited to 'src')
-rw-r--r-- | src/wallet/init.cpp | 7 | ||||
-rw-r--r-- | src/wallet/wallet.cpp | 31 | ||||
-rw-r--r-- | src/wallet/wallet.h | 2 |
3 files changed, 18 insertions, 22 deletions
diff --git a/src/wallet/init.cpp b/src/wallet/init.cpp index 01c927f038..5cfa864512 100644 --- a/src/wallet/init.cpp +++ b/src/wallet/init.cpp @@ -207,7 +207,12 @@ bool WalletInit::Verify() const return InitError(strprintf(_("Error loading wallet %s. Duplicate -wallet filename specified."), wallet_file)); } - if (!CWallet::Verify(wallet_file, salvage_wallet)) return false; + std::string error_string; + std::string warning_string; + bool verify_success = CWallet::Verify(wallet_file, salvage_wallet, error_string, warning_string); + if (!error_string.empty()) InitError(error_string); + if (!warning_string.empty()) InitWarning(warning_string); + if (!verify_success) return false; } return true; diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index d4bbb7f069..74f36e9abe 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3990,7 +3990,7 @@ void CWallet::MarkPreSplitKeys() } } -bool CWallet::Verify(std::string wallet_file, bool salvage_wallet) +bool CWallet::Verify(std::string wallet_file, bool salvage_wallet, std::string& error_string, std::string& warning_string) { // Do some checking on wallet path. It should be either a: // @@ -4004,23 +4004,24 @@ bool CWallet::Verify(std::string wallet_file, bool salvage_wallet) if (!(path_type == fs::file_not_found || path_type == fs::directory_file || (path_type == fs::symlink_file && fs::is_directory(wallet_path)) || (path_type == fs::regular_file && fs::path(wallet_file).filename() == wallet_file))) { - return InitError(strprintf( - _("Invalid -wallet path '%s'. -wallet path should point to a directory where wallet.dat and " + error_string = strprintf( + "Invalid -wallet path '%s'. -wallet path should point to a directory where wallet.dat and " "database/log.?????????? files can be stored, a location where such a directory could be created, " - "or (for backwards compatibility) the name of an existing data file in -walletdir (%s)"), - wallet_file, GetWalletDir())); + "or (for backwards compatibility) the name of an existing data file in -walletdir (%s)", + wallet_file, GetWalletDir()); + return false; } // Make sure that the wallet path doesn't clash with an existing wallet path for (auto wallet : GetWallets()) { if (fs::absolute(wallet->GetName(), GetWalletDir()) == wallet_path) { - return InitError(strprintf(_("Error loading wallet %s. Duplicate -wallet filename specified."), wallet_file)); + error_string = strprintf("Error loading wallet %s. Duplicate -wallet filename specified.", wallet_file); + return false; } } - std::string strError; - if (!WalletBatch::VerifyEnvironment(wallet_path, strError)) { - return InitError(strError); + if (!WalletBatch::VerifyEnvironment(wallet_path, error_string)) { + return false; } if (salvage_wallet) { @@ -4032,17 +4033,7 @@ bool CWallet::Verify(std::string wallet_file, bool salvage_wallet) } } - std::string strWarning; - bool dbV = WalletBatch::VerifyDatabaseFile(wallet_path, strWarning, strError); - if (!strWarning.empty()) { - InitWarning(strWarning); - } - if (!dbV) { - InitError(strError); - return false; - } - - return true; + return WalletBatch::VerifyDatabaseFile(wallet_path, warning_string, error_string); } CWallet* CWallet::CreateWalletFromFile(const std::string& name, const fs::path& path) diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 200248bcf5..fecc2178e4 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -1119,7 +1119,7 @@ public: bool MarkReplaced(const uint256& originalHash, const uint256& newHash); //! Verify wallet naming and perform salvage on the wallet if required - static bool Verify(std::string wallet_file, bool salvage_wallet); + static bool Verify(std::string wallet_file, bool salvage_wallet, std::string& error_string, std::string& warning_string); /* Initializes the wallet, returns a new CWallet instance or a null pointer in case of an error */ static CWallet* CreateWalletFromFile(const std::string& name, const fs::path& path); |