From ed2e18398b3ab657e98e3e1fe135cbf8dd94fda3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Barbosa?= Date: Sat, 20 Oct 2018 14:29:48 +0100 Subject: Remove fs::relative call and fix listwalletdir tests The implementation of fs::relative resolves symlinks which is not intended in ListWalletDir. The replacement does what is required, and listwalletdir tests are fixed accordingly. Also, building with boost 1.47 required 2 changes: - replace fs::relative with an alternative implementation; - fix fs::recursive_directory_iterator iteration. --- src/wallet/walletutil.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/wallet/walletutil.cpp b/src/wallet/walletutil.cpp index c0c9afe13e..d66d8a3775 100644 --- a/src/wallet/walletutil.cpp +++ b/src/wallet/walletutil.cpp @@ -52,12 +52,17 @@ static bool IsBerkeleyBtree(const fs::path& path) std::vector ListWalletDir() { const fs::path wallet_dir = GetWalletDir(); + const size_t offset = wallet_dir.string().size() + 1; std::vector paths; - for (auto it = fs::recursive_directory_iterator(wallet_dir); it != end(it); ++it) { + for (auto it = fs::recursive_directory_iterator(wallet_dir); it != fs::recursive_directory_iterator(); ++it) { + // Get wallet path relative to walletdir by removing walletdir from the wallet path. + // This can be replaced by boost::filesystem::lexically_relative once boost is bumped to 1.60. + const fs::path path = it->path().string().substr(offset); + if (it->status().type() == fs::directory_file && IsBerkeleyBtree(it->path() / "wallet.dat")) { // Found a directory which contains wallet.dat btree file, add it as a wallet. - paths.emplace_back(fs::relative(it->path(), wallet_dir)); + paths.emplace_back(path); } else if (it.level() == 0 && it->symlink_status().type() == fs::regular_file && IsBerkeleyBtree(it->path())) { if (it->path().filename() == "wallet.dat") { // Found top-level wallet.dat btree file, add top level directory "" @@ -68,7 +73,7 @@ std::vector ListWalletDir() // software will never create these files but will allow them to be // opened in a shared database environment for backwards compatibility. // Add it to the list of available wallets. - paths.emplace_back(fs::relative(it->path(), wallet_dir)); + paths.emplace_back(path); } } } -- cgit v1.2.3