|
|
|
@ -214,7 +214,7 @@ void OpenDebugLog()
@@ -214,7 +214,7 @@ void OpenDebugLog()
|
|
|
|
|
|
|
|
|
|
assert(fileout == NULL); |
|
|
|
|
assert(vMsgsBeforeOpenLog); |
|
|
|
|
boost::filesystem::path pathDebug = GetDataDir() / "debug.log"; |
|
|
|
|
fs::path pathDebug = GetDataDir() / "debug.log"; |
|
|
|
|
fileout = fopen(pathDebug.string().c_str(), "a"); |
|
|
|
|
if (fileout) { |
|
|
|
|
setbuf(fileout, NULL); // unbuffered
|
|
|
|
@ -353,7 +353,7 @@ int LogPrintStr(const std::string &str)
@@ -353,7 +353,7 @@ int LogPrintStr(const std::string &str)
|
|
|
|
|
// reopen the log file, if requested
|
|
|
|
|
if (fReopenDebugLog) { |
|
|
|
|
fReopenDebugLog = false; |
|
|
|
|
boost::filesystem::path pathDebug = GetDataDir() / "debug.log"; |
|
|
|
|
fs::path pathDebug = GetDataDir() / "debug.log"; |
|
|
|
|
if (freopen(pathDebug.string().c_str(),"a",fileout) != NULL) |
|
|
|
|
setbuf(fileout, NULL); // unbuffered
|
|
|
|
|
} |
|
|
|
@ -511,9 +511,9 @@ void PrintExceptionContinue(const std::exception* pex, const char* pszThread)
@@ -511,9 +511,9 @@ void PrintExceptionContinue(const std::exception* pex, const char* pszThread)
|
|
|
|
|
fprintf(stderr, "\n\n************************\n%s\n", message.c_str()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
boost::filesystem::path GetDefaultDataDir() |
|
|
|
|
fs::path GetDefaultDataDir() |
|
|
|
|
{ |
|
|
|
|
namespace fs = boost::filesystem; |
|
|
|
|
namespace fs = fs; |
|
|
|
|
// Windows < Vista: C:\Documents and Settings\Username\Application Data\Bitcoin
|
|
|
|
|
// Windows >= Vista: C:\Users\Username\AppData\Roaming\Bitcoin
|
|
|
|
|
// Mac: ~/Library/Application Support/Bitcoin
|
|
|
|
@ -538,13 +538,13 @@ boost::filesystem::path GetDefaultDataDir()
@@ -538,13 +538,13 @@ boost::filesystem::path GetDefaultDataDir()
|
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static boost::filesystem::path pathCached; |
|
|
|
|
static boost::filesystem::path pathCachedNetSpecific; |
|
|
|
|
static fs::path pathCached; |
|
|
|
|
static fs::path pathCachedNetSpecific; |
|
|
|
|
static CCriticalSection csPathCached; |
|
|
|
|
|
|
|
|
|
const boost::filesystem::path &GetDataDir(bool fNetSpecific) |
|
|
|
|
const fs::path &GetDataDir(bool fNetSpecific) |
|
|
|
|
{ |
|
|
|
|
namespace fs = boost::filesystem; |
|
|
|
|
namespace fs = fs; |
|
|
|
|
|
|
|
|
|
LOCK(csPathCached); |
|
|
|
|
|
|
|
|
@ -576,13 +576,13 @@ void ClearDatadirCache()
@@ -576,13 +576,13 @@ void ClearDatadirCache()
|
|
|
|
|
{ |
|
|
|
|
LOCK(csPathCached); |
|
|
|
|
|
|
|
|
|
pathCached = boost::filesystem::path(); |
|
|
|
|
pathCachedNetSpecific = boost::filesystem::path(); |
|
|
|
|
pathCached = fs::path(); |
|
|
|
|
pathCachedNetSpecific = fs::path(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
boost::filesystem::path GetConfigFile(const std::string& confPath) |
|
|
|
|
fs::path GetConfigFile(const std::string& confPath) |
|
|
|
|
{ |
|
|
|
|
boost::filesystem::path pathConfigFile(confPath); |
|
|
|
|
fs::path pathConfigFile(confPath); |
|
|
|
|
if (!pathConfigFile.is_complete()) |
|
|
|
|
pathConfigFile = GetDataDir(false) / pathConfigFile; |
|
|
|
|
|
|
|
|
@ -591,7 +591,7 @@ boost::filesystem::path GetConfigFile(const std::string& confPath)
@@ -591,7 +591,7 @@ boost::filesystem::path GetConfigFile(const std::string& confPath)
|
|
|
|
|
|
|
|
|
|
void ReadConfigFile(const std::string& confPath) |
|
|
|
|
{ |
|
|
|
|
boost::filesystem::ifstream streamConfig(GetConfigFile(confPath)); |
|
|
|
|
fs::ifstream streamConfig(GetConfigFile(confPath)); |
|
|
|
|
if (!streamConfig.good()) |
|
|
|
|
return; // No bitcoin.conf file is OK
|
|
|
|
|
|
|
|
|
@ -616,14 +616,14 @@ void ReadConfigFile(const std::string& confPath)
@@ -616,14 +616,14 @@ void ReadConfigFile(const std::string& confPath)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifndef WIN32 |
|
|
|
|
boost::filesystem::path GetPidFile() |
|
|
|
|
fs::path GetPidFile() |
|
|
|
|
{ |
|
|
|
|
boost::filesystem::path pathPidFile(GetArg("-pid", BITCOIN_PID_FILENAME)); |
|
|
|
|
fs::path pathPidFile(GetArg("-pid", BITCOIN_PID_FILENAME)); |
|
|
|
|
if (!pathPidFile.is_complete()) pathPidFile = GetDataDir() / pathPidFile; |
|
|
|
|
return pathPidFile; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void CreatePidFile(const boost::filesystem::path &path, pid_t pid) |
|
|
|
|
void CreatePidFile(const fs::path &path, pid_t pid) |
|
|
|
|
{ |
|
|
|
|
FILE* file = fopen(path.string().c_str(), "w"); |
|
|
|
|
if (file) |
|
|
|
@ -634,7 +634,7 @@ void CreatePidFile(const boost::filesystem::path &path, pid_t pid)
@@ -634,7 +634,7 @@ void CreatePidFile(const boost::filesystem::path &path, pid_t pid)
|
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest) |
|
|
|
|
bool RenameOver(fs::path src, fs::path dest) |
|
|
|
|
{ |
|
|
|
|
#ifdef WIN32 |
|
|
|
|
return MoveFileExA(src.string().c_str(), dest.string().c_str(), |
|
|
|
@ -650,13 +650,13 @@ bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest)
@@ -650,13 +650,13 @@ bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest)
|
|
|
|
|
* Specifically handles case where path p exists, but it wasn't possible for the user to |
|
|
|
|
* write to the parent directory. |
|
|
|
|
*/ |
|
|
|
|
bool TryCreateDirectory(const boost::filesystem::path& p) |
|
|
|
|
bool TryCreateDirectory(const fs::path& p) |
|
|
|
|
{ |
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
|
return boost::filesystem::create_directory(p); |
|
|
|
|
} catch (const boost::filesystem::filesystem_error&) { |
|
|
|
|
if (!boost::filesystem::exists(p) || !boost::filesystem::is_directory(p)) |
|
|
|
|
return fs::create_directory(p); |
|
|
|
|
} catch (const fs::filesystem_error&) { |
|
|
|
|
if (!fs::exists(p) || !fs::is_directory(p)) |
|
|
|
|
throw; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -763,11 +763,11 @@ void ShrinkDebugFile()
@@ -763,11 +763,11 @@ void ShrinkDebugFile()
|
|
|
|
|
// Amount of debug.log to save at end when shrinking (must fit in memory)
|
|
|
|
|
constexpr size_t RECENT_DEBUG_HISTORY_SIZE = 10 * 1000000; |
|
|
|
|
// Scroll debug.log if it's getting too big
|
|
|
|
|
boost::filesystem::path pathLog = GetDataDir() / "debug.log"; |
|
|
|
|
fs::path pathLog = GetDataDir() / "debug.log"; |
|
|
|
|
FILE* file = fopen(pathLog.string().c_str(), "r"); |
|
|
|
|
// If debug.log file is more than 10% bigger the RECENT_DEBUG_HISTORY_SIZE
|
|
|
|
|
// trim it down by saving only the last RECENT_DEBUG_HISTORY_SIZE bytes
|
|
|
|
|
if (file && boost::filesystem::file_size(pathLog) > 11 * (RECENT_DEBUG_HISTORY_SIZE / 10)) |
|
|
|
|
if (file && fs::file_size(pathLog) > 11 * (RECENT_DEBUG_HISTORY_SIZE / 10)) |
|
|
|
|
{ |
|
|
|
|
// Restart the file with some of the end
|
|
|
|
|
std::vector<char> vch(RECENT_DEBUG_HISTORY_SIZE, 0); |
|
|
|
@ -787,9 +787,9 @@ void ShrinkDebugFile()
@@ -787,9 +787,9 @@ void ShrinkDebugFile()
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef WIN32 |
|
|
|
|
boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate) |
|
|
|
|
fs::path GetSpecialFolderPath(int nFolder, bool fCreate) |
|
|
|
|
{ |
|
|
|
|
namespace fs = boost::filesystem; |
|
|
|
|
namespace fs = fs; |
|
|
|
|
|
|
|
|
|
char pszPath[MAX_PATH] = ""; |
|
|
|
|
|
|
|
|
@ -850,9 +850,9 @@ void SetupEnvironment()
@@ -850,9 +850,9 @@ void SetupEnvironment()
|
|
|
|
|
// The path locale is lazy initialized and to avoid deinitialization errors
|
|
|
|
|
// in multithreading environments, it is set explicitly by the main thread.
|
|
|
|
|
// A dummy locale is used to extract the internal default locale, used by
|
|
|
|
|
// boost::filesystem::path, which is then used to explicitly imbue the path.
|
|
|
|
|
std::locale loc = boost::filesystem::path::imbue(std::locale::classic()); |
|
|
|
|
boost::filesystem::path::imbue(loc); |
|
|
|
|
// fs::path, which is then used to explicitly imbue the path.
|
|
|
|
|
std::locale loc = fs::path::imbue(std::locale::classic()); |
|
|
|
|
fs::path::imbue(loc); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool SetupNetworking() |
|
|
|
|