util: add ArgsManager datadir helper functions

* Add ArgsManager::EnsureDataDir()
  Creates data directory if it doesn't exist
* Add ArgsManager::GetConfigFilePath()
  Return config file path (read-only)
This commit is contained in:
willcl-ark 2023-02-09 14:42:02 +00:00
parent 2c1fe27bf3
commit 56e370fbb9
No known key found for this signature in database
GPG key ID: CE6EC49945C17EA6
2 changed files with 37 additions and 0 deletions

View file

@ -446,6 +446,27 @@ const fs::path& ArgsManager::GetDataDir(bool net_specific) const
return path;
}
void ArgsManager::EnsureDataDir() const
{
/**
* "/wallets" subdirectories are created in all **new**
* datadirs, because wallet code will create new wallets in the "wallets"
* subdirectory only if exists already, otherwise it will create them in
* the top-level datadir where they could interfere with other files.
* Wallet init code currently avoids creating "wallets" directories itself
* for backwards compatibility, but this be changed in the future and
* wallet code here could go away (#16220).
*/
auto path{GetDataDir(false)};
if (!fs::exists(path)) {
fs::create_directories(path / "wallets");
}
path = GetDataDir(true);
if (!fs::exists(path)) {
fs::create_directories(path / "wallets");
}
}
void ArgsManager::ClearPathCache()
{
LOCK(cs_args);
@ -965,6 +986,11 @@ bool ArgsManager::ReadConfigStream(std::istream& stream, const std::string& file
return true;
}
fs::path ArgsManager::GetConfigFilePath() const
{
return GetConfigFile(GetPathArg("-conf", BITCOIN_CONF_FILENAME));
}
bool ArgsManager::ReadConfigFiles(std::string& error, bool ignore_invalid_keys)
{
{

View file

@ -242,6 +242,11 @@ protected:
void SelectConfigNetwork(const std::string& network);
[[nodiscard]] bool ParseParameters(int argc, const char* const argv[], std::string& error);
/**
* Return config file path (read-only)
*/
fs::path GetConfigFilePath() const;
[[nodiscard]] bool ReadConfigFiles(std::string& error, bool ignore_invalid_keys = false);
/**
@ -475,6 +480,12 @@ protected:
*/
void LogArgs() const;
/**
* If datadir does not exist, create it along with wallets/
* subdirectory(s).
*/
void EnsureDataDir() const;
private:
/**
* Get data directory path