diff --git a/src/wallet/db.h b/src/wallet/db.h --- a/src/wallet/db.h +++ b/src/wallet/db.h @@ -239,11 +239,6 @@ void Flush(); void Close(); - static bool Recover(const fs::path &file_path, void *callbackDataIn, - bool (*recoverKVcallback)(void *callbackData, - CDataStream ssKey, - CDataStream ssValue), - std::string &out_backup_filename); /* flush the wallet passively (TRY_LOCK) ideal to be called periodically */ @@ -416,4 +411,10 @@ const char *pszSkip = nullptr); }; +bool RecoverDatabaseFile(const fs::path &file_path, void *callbackDataIn, + bool (*recoverKVcallback)(void *callbackData, + CDataStream ssKey, + CDataStream ssValue), + std::string &out_backup_filename); + #endif // BITCOIN_WALLET_DB_H diff --git a/src/wallet/db.cpp b/src/wallet/db.cpp --- a/src/wallet/db.cpp +++ b/src/wallet/db.cpp @@ -344,11 +344,11 @@ static const char *DATA_END = "DATA=END"; typedef std::pair, std::vector> KeyValPair; -bool BerkeleyBatch::Recover(const fs::path &file_path, void *callbackDataIn, - bool (*recoverKVcallback)(void *callbackData, - CDataStream ssKey, - CDataStream ssValue), - std::string &newFilename) { +bool RecoverDatabaseFile(const fs::path &file_path, void *callbackDataIn, + bool (*recoverKVcallback)(void *callbackData, + CDataStream ssKey, + CDataStream ssValue), + std::string &newFilename) { std::string filename; std::shared_ptr env = GetWalletEnv(file_path, filename); diff --git a/src/wallet/walletdb.h b/src/wallet/walletdb.h --- a/src/wallet/walletdb.h +++ b/src/wallet/walletdb.h @@ -245,21 +245,6 @@ DBErrors ZapWalletTx(std::vector &vWtx); DBErrors ZapSelectTx(std::vector &txIdsIn, std::vector &txIdsOut); - /* Try to (very carefully!) recover wallet database (with a possible key - * type filter) */ - static bool Recover(const fs::path &wallet_path, void *callbackDataIn, - bool (*recoverKVcallback)(void *callbackData, - CDataStream ssKey, - CDataStream ssValue), - std::string &out_backup_filename); - /* Recover convenience-function to bypass the key filter callback, called - * when verify fails, recovers everything */ - static bool Recover(const fs::path &wallet_path, - std::string &out_backup_filename); - /* Recover filter (used as callback), will only let keys (cryptographical - * keys) as KV/key-type pass through */ - static bool RecoverKeysOnlyFilter(void *callbackData, CDataStream ssKey, - CDataStream ssValue); /* Function to determine if a certain KV/key-type is a key (cryptographical * key) type */ static bool IsKeyType(const std::string &strType); @@ -294,4 +279,9 @@ bool ReadKeyValue(CWallet *pwallet, CDataStream &ssKey, CDataStream &ssValue, std::string &strType, std::string &strErr); +/* Recover filter (used as callback), will only let keys (cryptographical keys) + * as KV/key-type pass through */ +bool RecoverKeysOnlyFilter(void *callbackData, CDataStream ssKey, + CDataStream ssValue); + #endif // BITCOIN_WALLET_WALLETDB_H diff --git a/src/wallet/walletdb.cpp b/src/wallet/walletdb.cpp --- a/src/wallet/walletdb.cpp +++ b/src/wallet/walletdb.cpp @@ -965,28 +965,8 @@ fOneThread = false; } -// -// Try to (very carefully!) recover wallet file if there is a problem. -// -bool WalletBatch::Recover(const fs::path &wallet_path, void *callbackDataIn, - bool (*recoverKVcallback)(void *callbackData, - CDataStream ssKey, - CDataStream ssValue), - std::string &out_backup_filename) { - return BerkeleyBatch::Recover(wallet_path, callbackDataIn, - recoverKVcallback, out_backup_filename); -} - -bool WalletBatch::Recover(const fs::path &wallet_path, - std::string &out_backup_filename) { - // recover without a key filter callback - // results in recovering all record types - return WalletBatch::Recover(wallet_path, nullptr, nullptr, - out_backup_filename); -} - -bool WalletBatch::RecoverKeysOnlyFilter(void *callbackData, CDataStream ssKey, - CDataStream ssValue) { +bool RecoverKeysOnlyFilter(void *callbackData, CDataStream ssKey, + CDataStream ssValue) { CWallet *dummyWallet = reinterpret_cast(callbackData); std::string strType, strErr; bool fReadOK; @@ -995,7 +975,7 @@ LOCK(dummyWallet->cs_wallet); fReadOK = ReadKeyValue(dummyWallet, ssKey, ssValue, strType, strErr); } - if (!IsKeyType(strType) && strType != DBKeys::HDCHAIN) { + if (!WalletBatch::IsKeyType(strType) && strType != DBKeys::HDCHAIN) { return false; } if (!fReadOK) { diff --git a/src/wallet/wallettool.cpp b/src/wallet/wallettool.cpp --- a/src/wallet/wallettool.cpp +++ b/src/wallet/wallettool.cpp @@ -147,9 +147,8 @@ CWallet dummy_wallet(Params(), nullptr, WalletLocation(), WalletDatabase::CreateDummy()); std::string backup_filename; - return WalletBatch::Recover(path, (void *)&dummy_wallet, - WalletBatch::RecoverKeysOnlyFilter, - backup_filename); + return RecoverDatabaseFile(path, (void *)&dummy_wallet, + RecoverKeysOnlyFilter, backup_filename); } bool ExecuteWalletToolFunc(const std::string &command,