kernel: allow null data_directory

An empty path may be represented with a nullptr. For example,
std::string_view::data() may return nullptr.

Removes the BITCOINKERNEL_ARG_NONNULL attribute for data_directory,
and instead handles such null arguments in the implementation.

Also documents how BITCOINKERNEL_ARG_NONNULL should be used.
This commit is contained in:
stickies-v
2025-11-12 22:27:45 +00:00
parent a3ac59a431
commit 6657bcbdb4
4 changed files with 39 additions and 8 deletions

View File

@@ -625,6 +625,20 @@ BOOST_AUTO_TEST_CASE(btck_chainman_tests)
ChainstateManagerOptions chainman_opts{context, test_directory.m_directory.string(), (test_directory.m_directory / "blocks").string()};
ChainMan chainman{context, chainman_opts};
}
{ // null or empty data_directory or blocks_directory are not allowed
Context context{};
auto valid_dir{test_directory.m_directory.string()};
std::vector<std::pair<std::string_view, std::string_view>> illegal_cases{
{"", valid_dir},
{valid_dir, {nullptr, 0}},
{"", ""},
{{nullptr, 0}, {nullptr, 0}},
};
for (auto& [data_dir, blocks_dir] : illegal_cases) {
BOOST_CHECK_THROW(ChainstateManagerOptions(context, data_dir, blocks_dir),
std::runtime_error);
};
}
auto notifications{std::make_shared<TestKernelNotifications>()};
auto context{create_context(notifications, ChainType::MAINNET)};