diff --git a/src/wallet/db.cpp b/src/wallet/db.cpp index ea06767e9b..952525010a 100644 --- a/src/wallet/db.cpp +++ b/src/wallet/db.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -18,6 +19,24 @@ namespace wallet { std::vector ListDatabases(const fs::path& wallet_dir) { + const fs::path& data_dir = gArgs.GetDataDirNet(); + const fs::path& blocks_dir = gArgs.GetBlocksDirPath(); + + // Here we place the top level dirs we want to skip in case walletdir is datadir or blocksdir + // Those directories are referenced in doc/files.md + const std::set ignore_paths = { + blocks_dir, + data_dir / "blktree", + data_dir / "blocks", + data_dir / "chainstate", + data_dir / "coins", + data_dir / "database", + data_dir / "indexes", + data_dir / "regtest", + data_dir / "signet", + data_dir / "testnet3" + }; + std::vector paths; std::error_code ec; @@ -32,6 +51,12 @@ std::vector ListDatabases(const fs::path& wallet_dir) continue; } + // We don't want to iterate through those special node dirs + if (ignore_paths.count(it->path())) { + it.disable_recursion_pending(); + continue; + } + try { const fs::path path{it->path().lexically_relative(wallet_dir)};