From ecba23097955dad7208baa687fc405c846aee794 Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Tue, 2 Jan 2024 16:35:30 -0500 Subject: [PATCH] wallet: implement BerkeleyRODatabase::Backup --- src/wallet/migrate.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/wallet/migrate.cpp b/src/wallet/migrate.cpp index f922d99a17..4c37dfee6f 100644 --- a/src/wallet/migrate.cpp +++ b/src/wallet/migrate.cpp @@ -1,6 +1,7 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include #include namespace wallet { @@ -16,7 +17,25 @@ std::unique_ptr BerkeleyRODatabase::MakeBatch(bool flush_on_close bool BerkeleyRODatabase::Backup(const std::string& dest) const { - return false; + fs::path src(m_filepath); + fs::path dst(fs::PathFromString(dest)); + + if (fs::is_directory(dst)) { + dst = BDBDataFile(dst); + } + try { + if (fs::exists(dst) && fs::equivalent(src, dst)) { + LogPrintf("cannot backup to wallet source file %s\n", fs::PathToString(dst)); + return false; + } + + fs::copy_file(src, dst, fs::copy_options::overwrite_existing); + LogPrintf("copied %s to %s\n", fs::PathToString(m_filepath), fs::PathToString(dst)); + return true; + } catch (const fs::filesystem_error& e) { + LogPrintf("error copying %s to %s - %s\n", fs::PathToString(m_filepath), fs::PathToString(dst), fsbridge::get_filesystem_error_message(e)); + return false; + } } bool BerkeleyROBatch::ReadKey(DataStream&& key, DataStream& value)