Add AbsPathForConfigVal to consolidate datadir prefixing for path args

Most commandline/config args are interpreted as relative to datadir if
not passed absolute. Consolidate the logic for this normalization.
pull/12305/head
James O'Beirne 7 years ago
parent a1e13055c2
commit 54604600c3

@ -72,9 +72,7 @@ static fs::path GetAuthCookieFile(bool temp=false)
if (temp) { if (temp) {
arg += ".tmp"; arg += ".tmp";
} }
fs::path path(arg); return AbsPathForConfigVal(fs::path(arg));
if (!path.is_complete()) path = GetDataDir() / path;
return path;
} }
bool GenerateAuthCookie(std::string *cookie_out) bool GenerateAuthCookie(std::string *cookie_out)

@ -4,6 +4,7 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <util.h> #include <util.h>
#include <fs.h>
#include <chainparamsbase.h> #include <chainparamsbase.h>
#include <random.h> #include <random.h>
@ -188,11 +189,7 @@ static void DebugPrintInit()
fs::path GetDebugLogPath() fs::path GetDebugLogPath()
{ {
fs::path logfile(gArgs.GetArg("-debuglogfile", DEFAULT_DEBUGLOGFILE)); fs::path logfile(gArgs.GetArg("-debuglogfile", DEFAULT_DEBUGLOGFILE));
if (logfile.is_absolute()) { return AbsPathForConfigVal(logfile);
return logfile;
} else {
return GetDataDir() / logfile;
}
} }
bool OpenDebugLog() bool OpenDebugLog()
@ -624,11 +621,7 @@ void ClearDatadirCache()
fs::path GetConfigFile(const std::string& confPath) fs::path GetConfigFile(const std::string& confPath)
{ {
fs::path pathConfigFile(confPath); return AbsPathForConfigVal(fs::path(confPath), false);
if (!pathConfigFile.is_complete())
pathConfigFile = GetDataDir(false) / pathConfigFile;
return pathConfigFile;
} }
void ArgsManager::ReadConfigFile(const std::string& confPath) void ArgsManager::ReadConfigFile(const std::string& confPath)
@ -663,9 +656,7 @@ void ArgsManager::ReadConfigFile(const std::string& confPath)
#ifndef WIN32 #ifndef WIN32
fs::path GetPidFile() fs::path GetPidFile()
{ {
fs::path pathPidFile(gArgs.GetArg("-pid", BITCOIN_PID_FILENAME)); return AbsPathForConfigVal(fs::path(gArgs.GetArg("-pid", BITCOIN_PID_FILENAME)));
if (!pathPidFile.is_complete()) pathPidFile = GetDataDir() / pathPidFile;
return pathPidFile;
} }
void CreatePidFile(const fs::path &path, pid_t pid) void CreatePidFile(const fs::path &path, pid_t pid)
@ -936,3 +927,8 @@ int64_t GetStartupTime()
{ {
return nStartupTime; return nStartupTime;
} }
fs::path AbsPathForConfigVal(const fs::path& path, bool net_specific)
{
return fs::absolute(path, GetDataDir(net_specific));
}

@ -191,6 +191,16 @@ bool OpenDebugLog();
void ShrinkDebugFile(); void ShrinkDebugFile();
void runCommand(const std::string& strCommand); void runCommand(const std::string& strCommand);
/**
* Most paths passed as configuration arguments are treated as relative to
* the datadir if they are not absolute.
*
* @param path The path to be conditionally prefixed with datadir.
* @param net_specific Forwarded to GetDataDir().
* @return The normalized path.
*/
fs::path AbsPathForConfigVal(const fs::path& path, bool net_specific = true);
inline bool IsSwitchChar(char c) inline bool IsSwitchChar(char c)
{ {
#ifdef WIN32 #ifdef WIN32

Loading…
Cancel
Save