mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-19 14:53:43 +01:00
Simplify fs::path by dropping filename() and make_preferred() overloads
These overloads were needed to allow passing `fs::path` objects directly to libstdc++'s `fstream` constructors, but after the previous commit, there is no longer any remaining code that does pass `fs::path` objects to `fstream` constructors. Writing new code which does this is also discouraged because the standard has been updated in https://wg21.link/lwg3430 to disallow it. Dropping these also means its no longer possible to pass `fs::path` arguments directly to `fstream::open` in libstdc++, which is somewhat unfortunate but not a big loss because it is already not possible to pass them to the constructor. So this commit updates `fstream::open` calls. Additionally, this change required updates to src/bitcoin.cpp since it was relying on the overloaded filename() method.
This commit is contained in:
@@ -209,7 +209,7 @@ static void ExecCommand(const std::vector<const char*>& args, std::string_view w
|
||||
|
||||
// Try to resolve any symlinks and figure out the directory containing the wrapper executable.
|
||||
std::error_code ec;
|
||||
fs::path wrapper_dir{fs::weakly_canonical(wrapper_path, ec)};
|
||||
auto wrapper_dir{fs::weakly_canonical(wrapper_path, ec)};
|
||||
if (wrapper_dir.empty()) wrapper_dir = wrapper_path; // Restore previous path if weakly_canonical failed.
|
||||
wrapper_dir = wrapper_dir.parent_path();
|
||||
|
||||
@@ -225,7 +225,7 @@ static void ExecCommand(const std::vector<const char*>& args, std::string_view w
|
||||
|
||||
// If wrapper is installed in a bin/ directory, look for target executable
|
||||
// in libexec/
|
||||
(wrapper_dir.filename() == "bin" && try_exec(fs::path{wrapper_dir.parent_path()} / "libexec" / arg0.filename())) ||
|
||||
(wrapper_dir.filename() == "bin" && try_exec(wrapper_dir.parent_path() / "libexec" / arg0.filename())) ||
|
||||
#ifdef WIN32
|
||||
// Otherwise check the "daemon" subdirectory in a windows install.
|
||||
(!wrapper_dir.empty() && try_exec(wrapper_dir / "daemon" / arg0.filename())) ||
|
||||
|
||||
@@ -78,7 +78,7 @@ bool ReadSettings(const fs::path& path, std::map<std::string, SettingsValue>& va
|
||||
if (!fs::exists(path)) return true;
|
||||
|
||||
std::ifstream file;
|
||||
file.open(path);
|
||||
file.open(path.std_path());
|
||||
if (!file.is_open()) {
|
||||
errors.emplace_back(strprintf("%s. Please check permissions.", fs::PathToString(path)));
|
||||
return false;
|
||||
@@ -133,7 +133,7 @@ bool WriteSettings(const fs::path& path,
|
||||
out.pushKVEnd(value.first, value.second);
|
||||
}
|
||||
std::ofstream file;
|
||||
file.open(path);
|
||||
file.open(path.std_path());
|
||||
if (file.fail()) {
|
||||
errors.emplace_back(strprintf("Error: Unable to open settings file %s for writing", fs::PathToString(path)));
|
||||
return false;
|
||||
|
||||
@@ -114,7 +114,7 @@ GenerateAuthCookieResult GenerateAuthCookie(const std::optional<fs::perms>& cook
|
||||
if (filepath_tmp.empty()) {
|
||||
return GenerateAuthCookieResult::DISABLED; // -norpccookiefile
|
||||
}
|
||||
file.open(filepath_tmp);
|
||||
file.open(filepath_tmp.std_path());
|
||||
if (!file.is_open()) {
|
||||
LogWarning("Unable to open cookie authentication file %s for writing", fs::PathToString(filepath_tmp));
|
||||
return GenerateAuthCookieResult::ERR;
|
||||
@@ -153,7 +153,7 @@ bool GetAuthCookie(std::string *cookie_out)
|
||||
if (filepath.empty()) {
|
||||
return true; // -norpccookiefile
|
||||
}
|
||||
file.open(filepath);
|
||||
file.open(filepath.std_path());
|
||||
if (!file.is_open())
|
||||
return false;
|
||||
std::getline(file, cookie);
|
||||
|
||||
@@ -45,7 +45,7 @@ inline std::ostream& operator<<(std::ostream& os, const std::pair<std::string, c
|
||||
inline void WriteText(const fs::path& path, const std::string& text)
|
||||
{
|
||||
std::ofstream file;
|
||||
file.open(path);
|
||||
file.open(path.std_path());
|
||||
file << text;
|
||||
}
|
||||
|
||||
|
||||
@@ -75,11 +75,6 @@ public:
|
||||
const std::u8string& utf8_str{std::filesystem::path::u8string()};
|
||||
return std::string{utf8_str.begin(), utf8_str.end()};
|
||||
}
|
||||
|
||||
// Required for path overloads in <fstream>.
|
||||
// See https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=96e0367ead5d8dcac3bec2865582e76e2fbab190
|
||||
path& make_preferred() { std::filesystem::path::make_preferred(); return *this; }
|
||||
path filename() const { return std::filesystem::path::filename(); }
|
||||
};
|
||||
|
||||
static inline path u8path(const std::string& utf8_str)
|
||||
|
||||
@@ -37,7 +37,7 @@ bool DumpWallet(const ArgsManager& args, WalletDatabase& db, bilingual_str& erro
|
||||
return false;
|
||||
}
|
||||
std::ofstream dump_file;
|
||||
dump_file.open(path);
|
||||
dump_file.open(path.std_path());
|
||||
if (dump_file.fail()) {
|
||||
error = strprintf(_("Unable to open %s for writing"), fs::PathToString(path));
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user