Merge #9902: Lightweight abstraction of boost::filesystem
f110272 Remove `namespace fs=fs` (Wladimir J. van der Laan) 75594bd torcontrol: Use fs::path instead of std::string for private key path (Wladimir J. van der Laan) 2a5f574 Use fsbridge for fopen and freopen (Wladimir J. van der Laan) bac5c9c Replace uses of boost::filesystem with fs (Wladimir J. van der Laan) 7d5172d Replace includes of boost/filesystem.h with fs.h (Wladimir J. van der Laan) 19e36bb Add fs.cpp/h (Wladimir J. van der Laan) Tree-SHA512: 2c34f059dfa6850b9323f3389e9090a6b5f839a457a2960d182c2ecfafd9883c956f5928bb796613402d3aad68ebc78259796a7a313f4a6cfa98aaf507a66842
This commit is contained in:
parent
5153439633
commit
a54ff70ff4
@ -154,6 +154,7 @@ BITCOIN_CORE_H = \
|
|||||||
governance/governance-votedb.h \
|
governance/governance-votedb.h \
|
||||||
flat-database.h \
|
flat-database.h \
|
||||||
hdchain.h \
|
hdchain.h \
|
||||||
|
fs.h \
|
||||||
httprpc.h \
|
httprpc.h \
|
||||||
httpserver.h \
|
httpserver.h \
|
||||||
indirectmap.h \
|
indirectmap.h \
|
||||||
@ -494,6 +495,7 @@ libdash_util_a_SOURCES = \
|
|||||||
compat/glibc_sanity.cpp \
|
compat/glibc_sanity.cpp \
|
||||||
compat/glibcxx_sanity.cpp \
|
compat/glibcxx_sanity.cpp \
|
||||||
compat/strnlen.cpp \
|
compat/strnlen.cpp \
|
||||||
|
fs.cpp \
|
||||||
random.cpp \
|
random.cpp \
|
||||||
rpc/protocol.cpp \
|
rpc/protocol.cpp \
|
||||||
stacktraces.cpp \
|
stacktraces.cpp \
|
||||||
|
@ -8,13 +8,13 @@
|
|||||||
#include "addrman.h"
|
#include "addrman.h"
|
||||||
#include "chainparams.h"
|
#include "chainparams.h"
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
#include "streams.h"
|
#include "streams.h"
|
||||||
#include "tinyformat.h"
|
#include "tinyformat.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
|
|
||||||
CBanDB::CBanDB()
|
CBanDB::CBanDB()
|
||||||
{
|
{
|
||||||
@ -36,8 +36,8 @@ bool CBanDB::Write(const banmap_t& banSet)
|
|||||||
ssBanlist << hash;
|
ssBanlist << hash;
|
||||||
|
|
||||||
// open temp output file, and associate with CAutoFile
|
// open temp output file, and associate with CAutoFile
|
||||||
boost::filesystem::path pathTmp = GetDataDir() / tmpfn;
|
fs::path pathTmp = GetDataDir() / tmpfn;
|
||||||
FILE *file = fopen(pathTmp.string().c_str(), "wb");
|
FILE *file = fsbridge::fopen(pathTmp, "wb");
|
||||||
CAutoFile fileout(file, SER_DISK, CLIENT_VERSION);
|
CAutoFile fileout(file, SER_DISK, CLIENT_VERSION);
|
||||||
if (fileout.IsNull())
|
if (fileout.IsNull())
|
||||||
return error("%s: Failed to open file %s", __func__, pathTmp.string());
|
return error("%s: Failed to open file %s", __func__, pathTmp.string());
|
||||||
@ -62,13 +62,13 @@ bool CBanDB::Write(const banmap_t& banSet)
|
|||||||
bool CBanDB::Read(banmap_t& banSet)
|
bool CBanDB::Read(banmap_t& banSet)
|
||||||
{
|
{
|
||||||
// open input file, and associate with CAutoFile
|
// open input file, and associate with CAutoFile
|
||||||
FILE *file = fopen(pathBanlist.string().c_str(), "rb");
|
FILE *file = fsbridge::fopen(pathBanlist, "rb");
|
||||||
CAutoFile filein(file, SER_DISK, CLIENT_VERSION);
|
CAutoFile filein(file, SER_DISK, CLIENT_VERSION);
|
||||||
if (filein.IsNull())
|
if (filein.IsNull())
|
||||||
return error("%s: Failed to open file %s", __func__, pathBanlist.string());
|
return error("%s: Failed to open file %s", __func__, pathBanlist.string());
|
||||||
|
|
||||||
// use file size to size memory buffer
|
// use file size to size memory buffer
|
||||||
uint64_t fileSize = boost::filesystem::file_size(pathBanlist);
|
uint64_t fileSize = fs::file_size(pathBanlist);
|
||||||
uint64_t dataSize = 0;
|
uint64_t dataSize = 0;
|
||||||
// Don't try to resize to a negative number if file is small
|
// Don't try to resize to a negative number if file is small
|
||||||
if (fileSize >= sizeof(uint256))
|
if (fileSize >= sizeof(uint256))
|
||||||
@ -133,8 +133,8 @@ bool CAddrDB::Write(const CAddrMan& addr)
|
|||||||
ssPeers << hash;
|
ssPeers << hash;
|
||||||
|
|
||||||
// open temp output file, and associate with CAutoFile
|
// open temp output file, and associate with CAutoFile
|
||||||
boost::filesystem::path pathTmp = GetDataDir() / tmpfn;
|
fs::path pathTmp = GetDataDir() / tmpfn;
|
||||||
FILE *file = fopen(pathTmp.string().c_str(), "wb");
|
FILE *file = fsbridge::fopen(pathTmp, "wb");
|
||||||
CAutoFile fileout(file, SER_DISK, CLIENT_VERSION);
|
CAutoFile fileout(file, SER_DISK, CLIENT_VERSION);
|
||||||
if (fileout.IsNull())
|
if (fileout.IsNull())
|
||||||
return error("%s: Failed to open file %s", __func__, pathTmp.string());
|
return error("%s: Failed to open file %s", __func__, pathTmp.string());
|
||||||
@ -159,13 +159,13 @@ bool CAddrDB::Write(const CAddrMan& addr)
|
|||||||
bool CAddrDB::Read(CAddrMan& addr)
|
bool CAddrDB::Read(CAddrMan& addr)
|
||||||
{
|
{
|
||||||
// open input file, and associate with CAutoFile
|
// open input file, and associate with CAutoFile
|
||||||
FILE *file = fopen(pathAddr.string().c_str(), "rb");
|
FILE *file = fsbridge::fopen(pathAddr, "rb");
|
||||||
CAutoFile filein(file, SER_DISK, CLIENT_VERSION);
|
CAutoFile filein(file, SER_DISK, CLIENT_VERSION);
|
||||||
if (filein.IsNull())
|
if (filein.IsNull())
|
||||||
return error("%s: Failed to open file %s", __func__, pathAddr.string());
|
return error("%s: Failed to open file %s", __func__, pathAddr.string());
|
||||||
|
|
||||||
// use file size to size memory buffer
|
// use file size to size memory buffer
|
||||||
uint64_t fileSize = boost::filesystem::file_size(pathAddr);
|
uint64_t fileSize = fs::file_size(pathAddr);
|
||||||
uint64_t dataSize = 0;
|
uint64_t dataSize = 0;
|
||||||
// Don't try to resize to a negative number if file is small
|
// Don't try to resize to a negative number if file is small
|
||||||
if (fileSize >= sizeof(uint256))
|
if (fileSize >= sizeof(uint256))
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
#ifndef BITCOIN_ADDRDB_H
|
#ifndef BITCOIN_ADDRDB_H
|
||||||
#define BITCOIN_ADDRDB_H
|
#define BITCOIN_ADDRDB_H
|
||||||
|
|
||||||
|
#include "fs.h"
|
||||||
#include "serialize.h"
|
#include "serialize.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <boost/filesystem/path.hpp>
|
|
||||||
|
|
||||||
class CSubNet;
|
class CSubNet;
|
||||||
class CAddrMan;
|
class CAddrMan;
|
||||||
@ -80,7 +80,7 @@ typedef std::map<CSubNet, CBanEntry> banmap_t;
|
|||||||
class CAddrDB
|
class CAddrDB
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
boost::filesystem::path pathAddr;
|
fs::path pathAddr;
|
||||||
public:
|
public:
|
||||||
CAddrDB();
|
CAddrDB();
|
||||||
bool Write(const CAddrMan& addr);
|
bool Write(const CAddrMan& addr);
|
||||||
@ -92,7 +92,7 @@ public:
|
|||||||
class CBanDB
|
class CBanDB
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
boost::filesystem::path pathBanlist;
|
fs::path pathBanlist;
|
||||||
public:
|
public:
|
||||||
CBanDB();
|
CBanDB();
|
||||||
bool Write(const banmap_t& banSet);
|
bool Write(const banmap_t& banSet);
|
||||||
|
@ -10,13 +10,13 @@
|
|||||||
|
|
||||||
#include "chainparamsbase.h"
|
#include "chainparamsbase.h"
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "rpc/client.h"
|
#include "rpc/client.h"
|
||||||
#include "rpc/protocol.h"
|
#include "rpc/protocol.h"
|
||||||
#include "stacktraces.h"
|
#include "stacktraces.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "utilstrencodings.h"
|
#include "utilstrencodings.h"
|
||||||
|
|
||||||
#include <boost/filesystem/operations.hpp>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include <event2/buffer.h>
|
#include <event2/buffer.h>
|
||||||
@ -99,7 +99,7 @@ static int AppInitRPC(int argc, char* argv[])
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
bool datadirFromCmdLine = IsArgSet("-datadir");
|
bool datadirFromCmdLine = IsArgSet("-datadir");
|
||||||
if (datadirFromCmdLine && !boost::filesystem::is_directory(GetDataDir(false))) {
|
if (datadirFromCmdLine && !fs::is_directory(GetDataDir(false))) {
|
||||||
fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", GetArg("-datadir", "").c_str());
|
fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", GetArg("-datadir", "").c_str());
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include "chainparams.h"
|
#include "chainparams.h"
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "rpc/server.h"
|
#include "rpc/server.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "noui.h"
|
#include "noui.h"
|
||||||
@ -22,7 +23,6 @@
|
|||||||
#include "stacktraces.h"
|
#include "stacktraces.h"
|
||||||
|
|
||||||
#include <boost/algorithm/string/predicate.hpp>
|
#include <boost/algorithm/string/predicate.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -100,7 +100,7 @@ bool AppInit(int argc, char* argv[])
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
bool datadirFromCmdLine = IsArgSet("-datadir");
|
bool datadirFromCmdLine = IsArgSet("-datadir");
|
||||||
if (datadirFromCmdLine && !boost::filesystem::is_directory(GetDataDir(false)))
|
if (datadirFromCmdLine && !fs::is_directory(GetDataDir(false)))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", GetArg("-datadir", "").c_str());
|
fprintf(stderr, "Error: Specified data directory \"%s\" does not exist.\n", GetArg("-datadir", "").c_str());
|
||||||
return false;
|
return false;
|
||||||
|
@ -4,11 +4,10 @@
|
|||||||
|
|
||||||
#include "dbwrapper.h"
|
#include "dbwrapper.h"
|
||||||
|
|
||||||
|
#include "fs.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
|
|
||||||
#include <leveldb/cache.h>
|
#include <leveldb/cache.h>
|
||||||
#include <leveldb/env.h>
|
#include <leveldb/env.h>
|
||||||
#include <leveldb/filter_policy.h>
|
#include <leveldb/filter_policy.h>
|
||||||
@ -91,7 +90,7 @@ static leveldb::Options GetOptions(size_t nCacheSize)
|
|||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
CDBWrapper::CDBWrapper(const boost::filesystem::path& path, size_t nCacheSize, bool fMemory, bool fWipe, bool obfuscate)
|
CDBWrapper::CDBWrapper(const fs::path& path, size_t nCacheSize, bool fMemory, bool fWipe, bool obfuscate)
|
||||||
{
|
{
|
||||||
penv = NULL;
|
penv = NULL;
|
||||||
readoptions.verify_checksums = true;
|
readoptions.verify_checksums = true;
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#define BITCOIN_DBWRAPPER_H
|
#define BITCOIN_DBWRAPPER_H
|
||||||
|
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "serialize.h"
|
#include "serialize.h"
|
||||||
#include "streams.h"
|
#include "streams.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
@ -240,7 +241,7 @@ public:
|
|||||||
* @param[in] obfuscate If true, store data obfuscated via simple XOR. If false, XOR
|
* @param[in] obfuscate If true, store data obfuscated via simple XOR. If false, XOR
|
||||||
* with a zero'd byte array.
|
* with a zero'd byte array.
|
||||||
*/
|
*/
|
||||||
CDBWrapper(const boost::filesystem::path& path, size_t nCacheSize, bool fMemory = false, bool fWipe = false, bool obfuscate = false);
|
CDBWrapper(const fs::path& path, size_t nCacheSize, bool fMemory = false, bool fWipe = false, bool obfuscate = false);
|
||||||
~CDBWrapper();
|
~CDBWrapper();
|
||||||
|
|
||||||
template <typename K>
|
template <typename K>
|
||||||
|
17
src/fs.cpp
Normal file
17
src/fs.cpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include "fs.h"
|
||||||
|
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
|
||||||
|
namespace fsbridge {
|
||||||
|
|
||||||
|
FILE *fopen(const fs::path& p, const char *mode)
|
||||||
|
{
|
||||||
|
return ::fopen(p.string().c_str(), mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE *freopen(const fs::path& p, const char *mode, FILE *stream)
|
||||||
|
{
|
||||||
|
return ::freopen(p.string().c_str(), mode, stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // fsbridge
|
24
src/fs.h
Normal file
24
src/fs.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Copyright (c) 2017 The Bitcoin Core developers
|
||||||
|
// Distributed under the MIT software license, see the accompanying
|
||||||
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
#ifndef BITCOIN_FS_H
|
||||||
|
#define BITCOIN_FS_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
#include <boost/filesystem/fstream.hpp>
|
||||||
|
#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
|
||||||
|
|
||||||
|
/** Filesystem operations and types */
|
||||||
|
namespace fs = boost::filesystem;
|
||||||
|
|
||||||
|
/** Bridge operations to C stdio */
|
||||||
|
namespace fsbridge {
|
||||||
|
FILE *fopen(const fs::path& p, const char *mode);
|
||||||
|
FILE *freopen(const fs::path& p, const char *mode, FILE *stream);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
46
src/init.cpp
46
src/init.cpp
@ -18,6 +18,7 @@
|
|||||||
#include "checkpoints.h"
|
#include "checkpoints.h"
|
||||||
#include "compat/sanity.h"
|
#include "compat/sanity.h"
|
||||||
#include "consensus/validation.h"
|
#include "consensus/validation.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "httpserver.h"
|
#include "httpserver.h"
|
||||||
#include "httprpc.h"
|
#include "httprpc.h"
|
||||||
#include "key.h"
|
#include "key.h"
|
||||||
@ -86,7 +87,6 @@
|
|||||||
#include <boost/algorithm/string/replace.hpp>
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
#include <boost/algorithm/string/split.hpp>
|
#include <boost/algorithm/string/split.hpp>
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/function.hpp>
|
#include <boost/function.hpp>
|
||||||
#include <boost/interprocess/sync/file_lock.hpp>
|
#include <boost/interprocess/sync/file_lock.hpp>
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
@ -284,8 +284,8 @@ void PrepareShutdown()
|
|||||||
|
|
||||||
if (fFeeEstimatesInitialized)
|
if (fFeeEstimatesInitialized)
|
||||||
{
|
{
|
||||||
boost::filesystem::path est_path = GetDataDir() / FEE_ESTIMATES_FILENAME;
|
fs::path est_path = GetDataDir() / FEE_ESTIMATES_FILENAME;
|
||||||
CAutoFile est_fileout(fopen(est_path.string().c_str(), "wb"), SER_DISK, CLIENT_VERSION);
|
CAutoFile est_fileout(fsbridge::fopen(est_path, "wb"), SER_DISK, CLIENT_VERSION);
|
||||||
if (!est_fileout.IsNull())
|
if (!est_fileout.IsNull())
|
||||||
mempool.WriteFeeEstimates(est_fileout);
|
mempool.WriteFeeEstimates(est_fileout);
|
||||||
else
|
else
|
||||||
@ -340,8 +340,8 @@ void PrepareShutdown()
|
|||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
try {
|
try {
|
||||||
boost::filesystem::remove(GetPidFile());
|
fs::remove(GetPidFile());
|
||||||
} catch (const boost::filesystem::filesystem_error& e) {
|
} catch (const fs::filesystem_error& e) {
|
||||||
LogPrintf("%s: Unable to remove pidfile: %s\n", __func__, e.what());
|
LogPrintf("%s: Unable to remove pidfile: %s\n", __func__, e.what());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -723,14 +723,14 @@ struct CImportingNow
|
|||||||
// works correctly.
|
// works correctly.
|
||||||
void CleanupBlockRevFiles()
|
void CleanupBlockRevFiles()
|
||||||
{
|
{
|
||||||
std::map<std::string, boost::filesystem::path> mapBlockFiles;
|
std::map<std::string, fs::path> mapBlockFiles;
|
||||||
|
|
||||||
// Glob all blk?????.dat and rev?????.dat files from the blocks directory.
|
// Glob all blk?????.dat and rev?????.dat files from the blocks directory.
|
||||||
// Remove the rev files immediately and insert the blk file paths into an
|
// Remove the rev files immediately and insert the blk file paths into an
|
||||||
// ordered map keyed by block file index.
|
// ordered map keyed by block file index.
|
||||||
LogPrintf("Removing unusable blk?????.dat and rev?????.dat files for -reindex with -prune\n");
|
LogPrintf("Removing unusable blk?????.dat and rev?????.dat files for -reindex with -prune\n");
|
||||||
boost::filesystem::path blocksdir = GetDataDir() / "blocks";
|
fs::path blocksdir = GetDataDir() / "blocks";
|
||||||
for (boost::filesystem::directory_iterator it(blocksdir); it != boost::filesystem::directory_iterator(); it++) {
|
for (fs::directory_iterator it(blocksdir); it != fs::directory_iterator(); it++) {
|
||||||
if (is_regular_file(*it) &&
|
if (is_regular_file(*it) &&
|
||||||
it->path().filename().string().length() == 12 &&
|
it->path().filename().string().length() == 12 &&
|
||||||
it->path().filename().string().substr(8,4) == ".dat")
|
it->path().filename().string().substr(8,4) == ".dat")
|
||||||
@ -747,7 +747,7 @@ void CleanupBlockRevFiles()
|
|||||||
// keeping a separate counter. Once we hit a gap (or if 0 doesn't exist)
|
// keeping a separate counter. Once we hit a gap (or if 0 doesn't exist)
|
||||||
// start removing block files.
|
// start removing block files.
|
||||||
int nContigCounter = 0;
|
int nContigCounter = 0;
|
||||||
BOOST_FOREACH(const PAIRTYPE(std::string, boost::filesystem::path)& item, mapBlockFiles) {
|
BOOST_FOREACH(const PAIRTYPE(std::string, fs::path)& item, mapBlockFiles) {
|
||||||
if (atoi(item.first) == nContigCounter) {
|
if (atoi(item.first) == nContigCounter) {
|
||||||
nContigCounter++;
|
nContigCounter++;
|
||||||
continue;
|
continue;
|
||||||
@ -756,7 +756,7 @@ void CleanupBlockRevFiles()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThreadImport(std::vector<boost::filesystem::path> vImportFiles)
|
void ThreadImport(std::vector<fs::path> vImportFiles)
|
||||||
{
|
{
|
||||||
const CChainParams& chainparams = Params();
|
const CChainParams& chainparams = Params();
|
||||||
RenameThread("dash-loadblk");
|
RenameThread("dash-loadblk");
|
||||||
@ -769,7 +769,7 @@ void ThreadImport(std::vector<boost::filesystem::path> vImportFiles)
|
|||||||
int nFile = 0;
|
int nFile = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
CDiskBlockPos pos(nFile, 0);
|
CDiskBlockPos pos(nFile, 0);
|
||||||
if (!boost::filesystem::exists(GetBlockPosFilename(pos, "blk")))
|
if (!fs::exists(GetBlockPosFilename(pos, "blk")))
|
||||||
break; // No block files left to reindex
|
break; // No block files left to reindex
|
||||||
FILE *file = OpenBlockFile(pos, true);
|
FILE *file = OpenBlockFile(pos, true);
|
||||||
if (!file)
|
if (!file)
|
||||||
@ -786,11 +786,11 @@ void ThreadImport(std::vector<boost::filesystem::path> vImportFiles)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// hardcoded $DATADIR/bootstrap.dat
|
// hardcoded $DATADIR/bootstrap.dat
|
||||||
boost::filesystem::path pathBootstrap = GetDataDir() / "bootstrap.dat";
|
fs::path pathBootstrap = GetDataDir() / "bootstrap.dat";
|
||||||
if (boost::filesystem::exists(pathBootstrap)) {
|
if (fs::exists(pathBootstrap)) {
|
||||||
FILE *file = fopen(pathBootstrap.string().c_str(), "rb");
|
FILE *file = fsbridge::fopen(pathBootstrap, "rb");
|
||||||
if (file) {
|
if (file) {
|
||||||
boost::filesystem::path pathBootstrapOld = GetDataDir() / "bootstrap.dat.old";
|
fs::path pathBootstrapOld = GetDataDir() / "bootstrap.dat.old";
|
||||||
LogPrintf("Importing bootstrap.dat...\n");
|
LogPrintf("Importing bootstrap.dat...\n");
|
||||||
LoadExternalBlockFile(chainparams, file);
|
LoadExternalBlockFile(chainparams, file);
|
||||||
RenameOver(pathBootstrap, pathBootstrapOld);
|
RenameOver(pathBootstrap, pathBootstrapOld);
|
||||||
@ -800,8 +800,8 @@ void ThreadImport(std::vector<boost::filesystem::path> vImportFiles)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -loadblock=
|
// -loadblock=
|
||||||
BOOST_FOREACH(const boost::filesystem::path& path, vImportFiles) {
|
BOOST_FOREACH(const fs::path& path, vImportFiles) {
|
||||||
FILE *file = fopen(path.string().c_str(), "rb");
|
FILE *file = fsbridge::fopen(path, "rb");
|
||||||
if (file) {
|
if (file) {
|
||||||
LogPrintf("Importing blocks file %s...\n", path.string());
|
LogPrintf("Importing blocks file %s...\n", path.string());
|
||||||
LoadExternalBlockFile(chainparams, file);
|
LoadExternalBlockFile(chainparams, file);
|
||||||
@ -1439,8 +1439,8 @@ static bool LockDataDirectory(bool probeOnly)
|
|||||||
std::string strDataDir = GetDataDir().string();
|
std::string strDataDir = GetDataDir().string();
|
||||||
|
|
||||||
// Make sure only a single Dash Core process is using the data directory.
|
// Make sure only a single Dash Core process is using the data directory.
|
||||||
boost::filesystem::path pathLockFile = GetDataDir() / ".lock";
|
fs::path pathLockFile = GetDataDir() / ".lock";
|
||||||
FILE* file = fopen(pathLockFile.string().c_str(), "a"); // empty lock file; created if it doesn't exist.
|
FILE* file = fsbridge::fopen(pathLockFile, "a"); // empty lock file; created if it doesn't exist.
|
||||||
if (file) fclose(file);
|
if (file) fclose(file);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -1765,7 +1765,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|||||||
fReindex = GetBoolArg("-reindex", false);
|
fReindex = GetBoolArg("-reindex", false);
|
||||||
bool fReindexChainState = GetBoolArg("-reindex-chainstate", false);
|
bool fReindexChainState = GetBoolArg("-reindex-chainstate", false);
|
||||||
|
|
||||||
boost::filesystem::create_directories(GetDataDir() / "blocks");
|
fs::create_directories(GetDataDir() / "blocks");
|
||||||
|
|
||||||
// cache size calculations
|
// cache size calculations
|
||||||
int64_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20);
|
int64_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20);
|
||||||
@ -1922,8 +1922,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|||||||
}
|
}
|
||||||
LogPrintf(" block index %15dms\n", GetTimeMillis() - nStart);
|
LogPrintf(" block index %15dms\n", GetTimeMillis() - nStart);
|
||||||
|
|
||||||
boost::filesystem::path est_path = GetDataDir() / FEE_ESTIMATES_FILENAME;
|
fs::path est_path = GetDataDir() / FEE_ESTIMATES_FILENAME;
|
||||||
CAutoFile est_filein(fopen(est_path.string().c_str(), "rb"), SER_DISK, CLIENT_VERSION);
|
CAutoFile est_filein(fsbridge::fopen(est_path, "rb"), SER_DISK, CLIENT_VERSION);
|
||||||
// Allowed to fail as this file IS missing on first startup.
|
// Allowed to fail as this file IS missing on first startup.
|
||||||
if (!est_filein.IsNull())
|
if (!est_filein.IsNull())
|
||||||
mempool.ReadFeeEstimates(est_filein);
|
mempool.ReadFeeEstimates(est_filein);
|
||||||
@ -2098,7 +2098,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|||||||
if (IsArgSet("-blocknotify"))
|
if (IsArgSet("-blocknotify"))
|
||||||
uiInterface.NotifyBlockTip.connect(BlockNotifyCallback);
|
uiInterface.NotifyBlockTip.connect(BlockNotifyCallback);
|
||||||
|
|
||||||
std::vector<boost::filesystem::path> vImportFiles;
|
std::vector<fs::path> vImportFiles;
|
||||||
if (mapMultiArgs.count("-loadblock"))
|
if (mapMultiArgs.count("-loadblock"))
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(const std::string& strFile, mapMultiArgs.at("-loadblock"))
|
BOOST_FOREACH(const std::string& strFile, mapMultiArgs.at("-loadblock"))
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "addrman.h"
|
#include "addrman.h"
|
||||||
#include "bloom.h"
|
#include "bloom.h"
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "limitedmap.h"
|
#include "limitedmap.h"
|
||||||
#include "netaddress.h"
|
#include "netaddress.h"
|
||||||
@ -35,7 +36,6 @@
|
|||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <boost/filesystem/path.hpp>
|
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <boost/signals2/signal.hpp>
|
#include <boost/signals2/signal.hpp>
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
#include "chainparams.h"
|
#include "chainparams.h"
|
||||||
#include "clientmodel.h"
|
#include "clientmodel.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "guiconstants.h"
|
#include "guiconstants.h"
|
||||||
#include "guiutil.h"
|
#include "guiutil.h"
|
||||||
#include "intro.h"
|
#include "intro.h"
|
||||||
@ -41,7 +42,6 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <boost/filesystem/operations.hpp>
|
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
@ -646,7 +646,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
/// 6. Determine availability of data directory and parse dash.conf
|
/// 6. Determine availability of data directory and parse dash.conf
|
||||||
/// - Do not call GetDataDir(true) before this step finishes
|
/// - Do not call GetDataDir(true) before this step finishes
|
||||||
if (!boost::filesystem::is_directory(GetDataDir(false)))
|
if (!fs::is_directory(GetDataDir(false)))
|
||||||
{
|
{
|
||||||
QMessageBox::critical(0, QObject::tr(PACKAGE_NAME),
|
QMessageBox::critical(0, QObject::tr(PACKAGE_NAME),
|
||||||
QObject::tr("Error: Specified data directory \"%1\" does not exist.").arg(QString::fromStdString(GetArg("-datadir", ""))));
|
QObject::tr("Error: Specified data directory \"%1\" does not exist.").arg(QString::fromStdString(GetArg("-datadir", ""))));
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "qvalidatedlineedit.h"
|
#include "qvalidatedlineedit.h"
|
||||||
#include "walletmodel.h"
|
#include "walletmodel.h"
|
||||||
|
|
||||||
|
#include "fs.h"
|
||||||
#include "primitives/transaction.h"
|
#include "primitives/transaction.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "policy/policy.h"
|
#include "policy/policy.h"
|
||||||
@ -36,9 +37,6 @@
|
|||||||
#include "shlwapi.h"
|
#include "shlwapi.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/filesystem/fstream.hpp>
|
|
||||||
#include <boost/filesystem/detail/utf8_codecvt_facet.hpp>
|
|
||||||
#include <boost/scoped_array.hpp>
|
#include <boost/scoped_array.hpp>
|
||||||
|
|
||||||
#include <QAbstractItemView>
|
#include <QAbstractItemView>
|
||||||
@ -66,7 +64,7 @@
|
|||||||
#include <QFontDatabase>
|
#include <QFontDatabase>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static boost::filesystem::detail::utf8_codecvt_facet utf8;
|
static fs::detail::utf8_codecvt_facet utf8;
|
||||||
|
|
||||||
#if defined(Q_OS_MAC)
|
#if defined(Q_OS_MAC)
|
||||||
extern double NSAppKitVersionNumber;
|
extern double NSAppKitVersionNumber;
|
||||||
@ -166,7 +164,7 @@ bool parseBitcoinURI(const QUrl &uri, SendCoinsRecipient *out)
|
|||||||
QUrlQuery uriQuery(uri);
|
QUrlQuery uriQuery(uri);
|
||||||
QList<QPair<QString, QString> > items = uriQuery.queryItems();
|
QList<QPair<QString, QString> > items = uriQuery.queryItems();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rv.fUseInstantSend = false;
|
rv.fUseInstantSend = false;
|
||||||
for (QList<QPair<QString, QString> >::iterator i = items.begin(); i != items.end(); i++)
|
for (QList<QPair<QString, QString> >::iterator i = items.begin(); i != items.end(); i++)
|
||||||
{
|
{
|
||||||
@ -254,7 +252,7 @@ QString formatBitcoinURI(const SendCoinsRecipient &info)
|
|||||||
ret += QString("%1message=%2").arg(paramCount == 0 ? "?" : "&").arg(msg);
|
ret += QString("%1message=%2").arg(paramCount == 0 ? "?" : "&").arg(msg);
|
||||||
paramCount++;
|
paramCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(info.fUseInstantSend)
|
if(info.fUseInstantSend)
|
||||||
{
|
{
|
||||||
ret += QString("%1IS=1").arg(paramCount == 0 ? "?" : "&");
|
ret += QString("%1IS=1").arg(paramCount == 0 ? "?" : "&");
|
||||||
@ -427,10 +425,10 @@ bool isObscured(QWidget *w)
|
|||||||
|
|
||||||
void openDebugLogfile()
|
void openDebugLogfile()
|
||||||
{
|
{
|
||||||
boost::filesystem::path pathDebug = GetDataDir() / "debug.log";
|
fs::path pathDebug = GetDataDir() / "debug.log";
|
||||||
|
|
||||||
/* Open debug.log with the associated application */
|
/* Open debug.log with the associated application */
|
||||||
if (boost::filesystem::exists(pathDebug))
|
if (fs::exists(pathDebug))
|
||||||
QDesktopServices::openUrl(QUrl::fromLocalFile(boostPathToQString(pathDebug)));
|
QDesktopServices::openUrl(QUrl::fromLocalFile(boostPathToQString(pathDebug)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -635,7 +633,7 @@ TableViewLastColumnResizingFixer::TableViewLastColumnResizingFixer(QTableView* t
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
boost::filesystem::path static StartupShortcutPath()
|
fs::path static StartupShortcutPath()
|
||||||
{
|
{
|
||||||
std::string chain = ChainNameFromCommandLine();
|
std::string chain = ChainNameFromCommandLine();
|
||||||
if (chain == CBaseChainParams::MAIN)
|
if (chain == CBaseChainParams::MAIN)
|
||||||
@ -648,13 +646,13 @@ boost::filesystem::path static StartupShortcutPath()
|
|||||||
bool GetStartOnSystemStartup()
|
bool GetStartOnSystemStartup()
|
||||||
{
|
{
|
||||||
// check for "Dash Core*.lnk"
|
// check for "Dash Core*.lnk"
|
||||||
return boost::filesystem::exists(StartupShortcutPath());
|
return fs::exists(StartupShortcutPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SetStartOnSystemStartup(bool fAutoStart)
|
bool SetStartOnSystemStartup(bool fAutoStart)
|
||||||
{
|
{
|
||||||
// If the shortcut exists already, remove it for updating
|
// If the shortcut exists already, remove it for updating
|
||||||
boost::filesystem::remove(StartupShortcutPath());
|
fs::remove(StartupShortcutPath());
|
||||||
|
|
||||||
if (fAutoStart)
|
if (fAutoStart)
|
||||||
{
|
{
|
||||||
@ -724,10 +722,8 @@ bool SetStartOnSystemStartup(bool fAutoStart)
|
|||||||
// Follow the Desktop Application Autostart Spec:
|
// Follow the Desktop Application Autostart Spec:
|
||||||
// http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html
|
// http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html
|
||||||
|
|
||||||
boost::filesystem::path static GetAutostartDir()
|
fs::path static GetAutostartDir()
|
||||||
{
|
{
|
||||||
namespace fs = boost::filesystem;
|
|
||||||
|
|
||||||
char* pszConfigHome = getenv("XDG_CONFIG_HOME");
|
char* pszConfigHome = getenv("XDG_CONFIG_HOME");
|
||||||
if (pszConfigHome) return fs::path(pszConfigHome) / "autostart";
|
if (pszConfigHome) return fs::path(pszConfigHome) / "autostart";
|
||||||
char* pszHome = getenv("HOME");
|
char* pszHome = getenv("HOME");
|
||||||
@ -735,7 +731,7 @@ boost::filesystem::path static GetAutostartDir()
|
|||||||
return fs::path();
|
return fs::path();
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::filesystem::path static GetAutostartFilePath()
|
fs::path static GetAutostartFilePath()
|
||||||
{
|
{
|
||||||
std::string chain = ChainNameFromCommandLine();
|
std::string chain = ChainNameFromCommandLine();
|
||||||
if (chain == CBaseChainParams::MAIN)
|
if (chain == CBaseChainParams::MAIN)
|
||||||
@ -745,7 +741,7 @@ boost::filesystem::path static GetAutostartFilePath()
|
|||||||
|
|
||||||
bool GetStartOnSystemStartup()
|
bool GetStartOnSystemStartup()
|
||||||
{
|
{
|
||||||
boost::filesystem::ifstream optionFile(GetAutostartFilePath());
|
fs::ifstream optionFile(GetAutostartFilePath());
|
||||||
if (!optionFile.good())
|
if (!optionFile.good())
|
||||||
return false;
|
return false;
|
||||||
// Scan through file for "Hidden=true":
|
// Scan through file for "Hidden=true":
|
||||||
@ -765,7 +761,7 @@ bool GetStartOnSystemStartup()
|
|||||||
bool SetStartOnSystemStartup(bool fAutoStart)
|
bool SetStartOnSystemStartup(bool fAutoStart)
|
||||||
{
|
{
|
||||||
if (!fAutoStart)
|
if (!fAutoStart)
|
||||||
boost::filesystem::remove(GetAutostartFilePath());
|
fs::remove(GetAutostartFilePath());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char pszExePath[MAX_PATH+1];
|
char pszExePath[MAX_PATH+1];
|
||||||
@ -773,9 +769,9 @@ bool SetStartOnSystemStartup(bool fAutoStart)
|
|||||||
if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1)
|
if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
boost::filesystem::create_directories(GetAutostartDir());
|
fs::create_directories(GetAutostartDir());
|
||||||
|
|
||||||
boost::filesystem::ofstream optionFile(GetAutostartFilePath(), std::ios_base::out|std::ios_base::trunc);
|
fs::ofstream optionFile(GetAutostartFilePath(), std::ios_base::out|std::ios_base::trunc);
|
||||||
if (!optionFile.good())
|
if (!optionFile.good())
|
||||||
return false;
|
return false;
|
||||||
std::string chain = ChainNameFromCommandLine();
|
std::string chain = ChainNameFromCommandLine();
|
||||||
@ -915,7 +911,7 @@ QString getThemeName()
|
|||||||
if(!theme.isEmpty()){
|
if(!theme.isEmpty()){
|
||||||
return theme;
|
return theme;
|
||||||
}
|
}
|
||||||
return QString("light");
|
return QString("light");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open CSS when configured
|
// Open CSS when configured
|
||||||
@ -927,18 +923,18 @@ QString loadStyleSheet()
|
|||||||
QString theme = settings.value("theme", "").toString();
|
QString theme = settings.value("theme", "").toString();
|
||||||
|
|
||||||
if(!theme.isEmpty()){
|
if(!theme.isEmpty()){
|
||||||
cssName = QString(":/css/") + theme;
|
cssName = QString(":/css/") + theme;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cssName = QString(":/css/light");
|
cssName = QString(":/css/light");
|
||||||
settings.setValue("theme", "light");
|
settings.setValue("theme", "light");
|
||||||
}
|
}
|
||||||
|
|
||||||
QFile qFile(cssName);
|
QFile qFile(cssName);
|
||||||
if (qFile.open(QFile::ReadOnly)) {
|
if (qFile.open(QFile::ReadOnly)) {
|
||||||
styleSheet = QLatin1String(qFile.readAll());
|
styleSheet = QLatin1String(qFile.readAll());
|
||||||
}
|
}
|
||||||
|
|
||||||
return styleSheet;
|
return styleSheet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -948,12 +944,12 @@ void setClipboard(const QString& str)
|
|||||||
QApplication::clipboard()->setText(str, QClipboard::Selection);
|
QApplication::clipboard()->setText(str, QClipboard::Selection);
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::filesystem::path qstringToBoostPath(const QString &path)
|
fs::path qstringToBoostPath(const QString &path)
|
||||||
{
|
{
|
||||||
return boost::filesystem::path(path.toStdString(), utf8);
|
return fs::path(path.toStdString(), utf8);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString boostPathToQString(const boost::filesystem::path &path)
|
QString boostPathToQString(const fs::path &path)
|
||||||
{
|
{
|
||||||
return QString::fromStdString(path.string(utf8));
|
return QString::fromStdString(path.string(utf8));
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#define BITCOIN_QT_GUIUTIL_H
|
#define BITCOIN_QT_GUIUTIL_H
|
||||||
|
|
||||||
#include "amount.h"
|
#include "amount.h"
|
||||||
|
#include "fs.h"
|
||||||
|
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
@ -16,8 +17,6 @@
|
|||||||
#include <QTableView>
|
#include <QTableView>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
|
|
||||||
class QValidatedLineEdit;
|
class QValidatedLineEdit;
|
||||||
class SendCoinsRecipient;
|
class SendCoinsRecipient;
|
||||||
|
|
||||||
@ -198,10 +197,10 @@ namespace GUIUtil
|
|||||||
QString getThemeName();
|
QString getThemeName();
|
||||||
|
|
||||||
/* Convert QString to OS specific boost path through UTF-8 */
|
/* Convert QString to OS specific boost path through UTF-8 */
|
||||||
boost::filesystem::path qstringToBoostPath(const QString &path);
|
fs::path qstringToBoostPath(const QString &path);
|
||||||
|
|
||||||
/* Convert OS specific boost path to QString through UTF-8 */
|
/* Convert OS specific boost path to QString through UTF-8 */
|
||||||
QString boostPathToQString(const boost::filesystem::path &path);
|
QString boostPathToQString(const fs::path &path);
|
||||||
|
|
||||||
/* Convert seconds into a QString with days, hours, mins, secs */
|
/* Convert seconds into a QString with days, hours, mins, secs */
|
||||||
QString formatDurationStr(int secs);
|
QString formatDurationStr(int secs);
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "config/dash-config.h"
|
#include "config/dash-config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "fs.h"
|
||||||
#include "intro.h"
|
#include "intro.h"
|
||||||
#include "ui_intro.h"
|
#include "ui_intro.h"
|
||||||
|
|
||||||
@ -14,8 +15,6 @@
|
|||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
|
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
@ -71,7 +70,6 @@ FreespaceChecker::FreespaceChecker(Intro *_intro)
|
|||||||
|
|
||||||
void FreespaceChecker::check()
|
void FreespaceChecker::check()
|
||||||
{
|
{
|
||||||
namespace fs = boost::filesystem;
|
|
||||||
QString dataDirStr = intro->getPathToCheck();
|
QString dataDirStr = intro->getPathToCheck();
|
||||||
fs::path dataDir = GUIUtil::qstringToBoostPath(dataDirStr);
|
fs::path dataDir = GUIUtil::qstringToBoostPath(dataDirStr);
|
||||||
uint64_t freeBytesAvailable = 0;
|
uint64_t freeBytesAvailable = 0;
|
||||||
@ -191,7 +189,6 @@ QString Intro::getDefaultDataDirectory()
|
|||||||
|
|
||||||
bool Intro::pickDataDirectory()
|
bool Intro::pickDataDirectory()
|
||||||
{
|
{
|
||||||
namespace fs = boost::filesystem;
|
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
/* If data directory provided on command line, no need to look at settings
|
/* If data directory provided on command line, no need to look at settings
|
||||||
or show a picking dialog */
|
or show a picking dialog */
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include "chainparams.h"
|
#include "chainparams.h"
|
||||||
#include "consensus/validation.h"
|
#include "consensus/validation.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "validation.h"
|
#include "validation.h"
|
||||||
#include "rpc/register.h"
|
#include "rpc/register.h"
|
||||||
#include "rpc/server.h"
|
#include "rpc/server.h"
|
||||||
@ -20,8 +21,6 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
|
|
||||||
static UniValue rpcNestedTest_rpc(const JSONRPCRequest& request)
|
static UniValue rpcNestedTest_rpc(const JSONRPCRequest& request)
|
||||||
{
|
{
|
||||||
if (request.fHelp) {
|
if (request.fHelp) {
|
||||||
@ -168,5 +167,5 @@ void RPCNestedTests::rpcNestedTests()
|
|||||||
delete evoDb;
|
delete evoDb;
|
||||||
evoDb = nullptr;
|
evoDb = nullptr;
|
||||||
|
|
||||||
boost::filesystem::remove_all(boost::filesystem::path(path));
|
fs::remove_all(fs::path(path));
|
||||||
}
|
}
|
||||||
|
@ -67,9 +67,9 @@ static const std::string COOKIEAUTH_USER = "__cookie__";
|
|||||||
/** Default name for auth cookie file */
|
/** Default name for auth cookie file */
|
||||||
static const std::string COOKIEAUTH_FILE = ".cookie";
|
static const std::string COOKIEAUTH_FILE = ".cookie";
|
||||||
|
|
||||||
boost::filesystem::path GetAuthCookieFile()
|
fs::path GetAuthCookieFile()
|
||||||
{
|
{
|
||||||
boost::filesystem::path path(GetArg("-rpccookiefile", COOKIEAUTH_FILE));
|
fs::path path(GetArg("-rpccookiefile", COOKIEAUTH_FILE));
|
||||||
if (!path.is_complete()) path = GetDataDir() / path;
|
if (!path.is_complete()) path = GetDataDir() / path;
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
@ -86,7 +86,7 @@ bool GenerateAuthCookie(std::string *cookie_out)
|
|||||||
* these are set to 077 in init.cpp unless overridden with -sysperms.
|
* these are set to 077 in init.cpp unless overridden with -sysperms.
|
||||||
*/
|
*/
|
||||||
std::ofstream file;
|
std::ofstream file;
|
||||||
boost::filesystem::path filepath = GetAuthCookieFile();
|
fs::path filepath = GetAuthCookieFile();
|
||||||
file.open(filepath.string().c_str());
|
file.open(filepath.string().c_str());
|
||||||
if (!file.is_open()) {
|
if (!file.is_open()) {
|
||||||
LogPrintf("Unable to open cookie authentication file %s for writing\n", filepath.string());
|
LogPrintf("Unable to open cookie authentication file %s for writing\n", filepath.string());
|
||||||
@ -105,7 +105,7 @@ bool GetAuthCookie(std::string *cookie_out)
|
|||||||
{
|
{
|
||||||
std::ifstream file;
|
std::ifstream file;
|
||||||
std::string cookie;
|
std::string cookie;
|
||||||
boost::filesystem::path filepath = GetAuthCookieFile();
|
fs::path filepath = GetAuthCookieFile();
|
||||||
file.open(filepath.string().c_str());
|
file.open(filepath.string().c_str());
|
||||||
if (!file.is_open())
|
if (!file.is_open())
|
||||||
return false;
|
return false;
|
||||||
@ -120,8 +120,8 @@ bool GetAuthCookie(std::string *cookie_out)
|
|||||||
void DeleteAuthCookie()
|
void DeleteAuthCookie()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
boost::filesystem::remove(GetAuthCookieFile());
|
fs::remove(GetAuthCookieFile());
|
||||||
} catch (const boost::filesystem::filesystem_error& e) {
|
} catch (const fs::filesystem_error& e) {
|
||||||
LogPrintf("%s: Unable to remove random auth cookie file: %s\n", __func__, e.what());
|
LogPrintf("%s: Unable to remove random auth cookie file: %s\n", __func__, e.what());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,11 +6,12 @@
|
|||||||
#ifndef BITCOIN_RPCPROTOCOL_H
|
#ifndef BITCOIN_RPCPROTOCOL_H
|
||||||
#define BITCOIN_RPCPROTOCOL_H
|
#define BITCOIN_RPCPROTOCOL_H
|
||||||
|
|
||||||
|
#include "fs.h"
|
||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
|
|
||||||
#include <univalue.h>
|
#include <univalue.h>
|
||||||
|
|
||||||
@ -89,7 +90,7 @@ std::string JSONRPCReply(const UniValue& result, const UniValue& error, const Un
|
|||||||
UniValue JSONRPCError(int code, const std::string& message);
|
UniValue JSONRPCError(int code, const std::string& message);
|
||||||
|
|
||||||
/** Get name of RPC authentication cookie file */
|
/** Get name of RPC authentication cookie file */
|
||||||
boost::filesystem::path GetAuthCookieFile();
|
fs::path GetAuthCookieFile();
|
||||||
/** Generate a new RPC authentication cookie and write it to disk */
|
/** Generate a new RPC authentication cookie and write it to disk */
|
||||||
bool GenerateAuthCookie(std::string *cookie_out);
|
bool GenerateAuthCookie(std::string *cookie_out);
|
||||||
/** Read the RPC authentication cookie from disk */
|
/** Read the RPC authentication cookie from disk */
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "rpc/server.h"
|
#include "rpc/server.h"
|
||||||
|
|
||||||
#include "base58.h"
|
#include "base58.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
#include "sync.h"
|
#include "sync.h"
|
||||||
@ -17,7 +18,6 @@
|
|||||||
#include <univalue.h>
|
#include <univalue.h>
|
||||||
|
|
||||||
#include <boost/bind.hpp>
|
#include <boost/bind.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
#include <boost/signals2/signal.hpp>
|
#include <boost/signals2/signal.hpp>
|
||||||
|
@ -28,7 +28,7 @@ BOOST_AUTO_TEST_CASE(dbwrapper)
|
|||||||
// Perform tests both obfuscated and non-obfuscated.
|
// Perform tests both obfuscated and non-obfuscated.
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
bool obfuscate = (bool)i;
|
bool obfuscate = (bool)i;
|
||||||
boost::filesystem::path ph = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();
|
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
||||||
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
||||||
char key = 'k';
|
char key = 'k';
|
||||||
uint256 in = GetRandHash();
|
uint256 in = GetRandHash();
|
||||||
@ -49,7 +49,7 @@ BOOST_AUTO_TEST_CASE(dbwrapper_batch)
|
|||||||
// Perform tests both obfuscated and non-obfuscated.
|
// Perform tests both obfuscated and non-obfuscated.
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
bool obfuscate = (bool)i;
|
bool obfuscate = (bool)i;
|
||||||
boost::filesystem::path ph = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();
|
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
||||||
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
||||||
|
|
||||||
char key = 'i';
|
char key = 'i';
|
||||||
@ -86,7 +86,7 @@ BOOST_AUTO_TEST_CASE(dbwrapper_iterator)
|
|||||||
// Perform tests both obfuscated and non-obfuscated.
|
// Perform tests both obfuscated and non-obfuscated.
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
bool obfuscate = (bool)i;
|
bool obfuscate = (bool)i;
|
||||||
boost::filesystem::path ph = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();
|
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
||||||
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
CDBWrapper dbw(ph, (1 << 20), true, false, obfuscate);
|
||||||
|
|
||||||
// The two keys are intentionally chosen for ordering
|
// The two keys are intentionally chosen for ordering
|
||||||
@ -125,8 +125,8 @@ BOOST_AUTO_TEST_CASE(dbwrapper_iterator)
|
|||||||
// Test that we do not obfuscation if there is existing data.
|
// Test that we do not obfuscation if there is existing data.
|
||||||
BOOST_AUTO_TEST_CASE(existing_data_no_obfuscate)
|
BOOST_AUTO_TEST_CASE(existing_data_no_obfuscate)
|
||||||
{
|
{
|
||||||
// We're going to share this boost::filesystem::path between two wrappers
|
// We're going to share this fs::path between two wrappers
|
||||||
boost::filesystem::path ph = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();
|
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
||||||
create_directories(ph);
|
create_directories(ph);
|
||||||
|
|
||||||
// Set up a non-obfuscated wrapper to write some initial data.
|
// Set up a non-obfuscated wrapper to write some initial data.
|
||||||
@ -167,8 +167,8 @@ BOOST_AUTO_TEST_CASE(existing_data_no_obfuscate)
|
|||||||
// Ensure that we start obfuscating during a reindex.
|
// Ensure that we start obfuscating during a reindex.
|
||||||
BOOST_AUTO_TEST_CASE(existing_data_reindex)
|
BOOST_AUTO_TEST_CASE(existing_data_reindex)
|
||||||
{
|
{
|
||||||
// We're going to share this boost::filesystem::path between two wrappers
|
// We're going to share this fs::path between two wrappers
|
||||||
boost::filesystem::path ph = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();
|
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
||||||
create_directories(ph);
|
create_directories(ph);
|
||||||
|
|
||||||
// Set up a non-obfuscated wrapper to write some initial data.
|
// Set up a non-obfuscated wrapper to write some initial data.
|
||||||
@ -204,7 +204,7 @@ BOOST_AUTO_TEST_CASE(existing_data_reindex)
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(iterator_ordering)
|
BOOST_AUTO_TEST_CASE(iterator_ordering)
|
||||||
{
|
{
|
||||||
boost::filesystem::path ph = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();
|
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
||||||
CDBWrapper dbw(ph, (1 << 20), true, false, false);
|
CDBWrapper dbw(ph, (1 << 20), true, false, false);
|
||||||
for (int x=0x00; x<256; ++x) {
|
for (int x=0x00; x<256; ++x) {
|
||||||
uint8_t key = x;
|
uint8_t key = x;
|
||||||
@ -275,7 +275,7 @@ BOOST_AUTO_TEST_CASE(iterator_string_ordering)
|
|||||||
{
|
{
|
||||||
char buf[10];
|
char buf[10];
|
||||||
|
|
||||||
boost::filesystem::path ph = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path();
|
fs::path ph = fs::temp_directory_path() / fs::unique_path();
|
||||||
CDBWrapper dbw(ph, (1 << 20), true, false, false);
|
CDBWrapper dbw(ph, (1 << 20), true, false, false);
|
||||||
for (int x=0x00; x<10; ++x) {
|
for (int x=0x00; x<10; ++x) {
|
||||||
for (int y = 0; y < 10; y++) {
|
for (int y = 0; y < 10; y++) {
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "chainparams.h"
|
#include "chainparams.h"
|
||||||
#include "consensus/consensus.h"
|
#include "consensus/consensus.h"
|
||||||
#include "consensus/validation.h"
|
#include "consensus/validation.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "key.h"
|
#include "key.h"
|
||||||
#include "validation.h"
|
#include "validation.h"
|
||||||
#include "miner.h"
|
#include "miner.h"
|
||||||
@ -29,7 +30,6 @@
|
|||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
|
|
||||||
FastRandomContext insecure_rand_ctx(true);
|
FastRandomContext insecure_rand_ctx(true);
|
||||||
@ -69,7 +69,7 @@ TestingSetup::TestingSetup(const std::string& chainName) : BasicTestingSetup(cha
|
|||||||
RegisterAllCoreRPCCommands(tableRPC);
|
RegisterAllCoreRPCCommands(tableRPC);
|
||||||
ClearDatadirCache();
|
ClearDatadirCache();
|
||||||
pathTemp = GetTempPath() / strprintf("test_dash_%lu_%i", (unsigned long)GetTime(), (int)(GetRand(100000)));
|
pathTemp = GetTempPath() / strprintf("test_dash_%lu_%i", (unsigned long)GetTime(), (int)(GetRand(100000)));
|
||||||
boost::filesystem::create_directories(pathTemp);
|
fs::create_directories(pathTemp);
|
||||||
ForceSetArg("-datadir", pathTemp.string());
|
ForceSetArg("-datadir", pathTemp.string());
|
||||||
mempool.setSanityCheck(1.0);
|
mempool.setSanityCheck(1.0);
|
||||||
g_connman = std::unique_ptr<CConnman>(new CConnman(0x1337, 0x1337)); // Deterministic randomness for tests.
|
g_connman = std::unique_ptr<CConnman>(new CConnman(0x1337, 0x1337)); // Deterministic randomness for tests.
|
||||||
@ -104,7 +104,7 @@ TestingSetup::~TestingSetup()
|
|||||||
llmq::DestroyLLMQSystem();
|
llmq::DestroyLLMQSystem();
|
||||||
delete pcoinsdbview;
|
delete pcoinsdbview;
|
||||||
delete pblocktree;
|
delete pblocktree;
|
||||||
boost::filesystem::remove_all(pathTemp);
|
fs::remove_all(pathTemp);
|
||||||
}
|
}
|
||||||
|
|
||||||
TestChainSetup::TestChainSetup(int blockCount) : TestingSetup(CBaseChainParams::REGTEST)
|
TestChainSetup::TestChainSetup(int blockCount) : TestingSetup(CBaseChainParams::REGTEST)
|
||||||
|
@ -7,12 +7,12 @@
|
|||||||
#define BITCOIN_TEST_TEST_DASH_H
|
#define BITCOIN_TEST_TEST_DASH_H
|
||||||
|
|
||||||
#include "chainparamsbase.h"
|
#include "chainparamsbase.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "key.h"
|
#include "key.h"
|
||||||
#include "pubkey.h"
|
#include "pubkey.h"
|
||||||
#include "txdb.h"
|
#include "txdb.h"
|
||||||
#include "txmempool.h"
|
#include "txmempool.h"
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
|
|
||||||
/** Basic testing setup.
|
/** Basic testing setup.
|
||||||
@ -31,7 +31,7 @@ struct BasicTestingSetup {
|
|||||||
class CConnman;
|
class CConnman;
|
||||||
struct TestingSetup: public BasicTestingSetup {
|
struct TestingSetup: public BasicTestingSetup {
|
||||||
CCoinsViewDB *pcoinsdbview;
|
CCoinsViewDB *pcoinsdbview;
|
||||||
boost::filesystem::path pathTemp;
|
fs::path pathTemp;
|
||||||
boost::thread_group threadGroup;
|
boost::thread_group threadGroup;
|
||||||
CConnman* connman;
|
CConnman* connman;
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
#include <shlobj.h>
|
#include <shlobj.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
#include "fs.h"
|
||||||
|
|
||||||
boost::filesystem::path GetTempPath() {
|
fs::path GetTempPath() {
|
||||||
return boost::filesystem::temp_directory_path();
|
return fs::temp_directory_path();
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
#ifndef BITCOIN_TEST_TESTUTIL_H
|
#ifndef BITCOIN_TEST_TESTUTIL_H
|
||||||
#define BITCOIN_TEST_TESTUTIL_H
|
#define BITCOIN_TEST_TESTUTIL_H
|
||||||
|
|
||||||
#include <boost/filesystem/path.hpp>
|
#include "fs.h"
|
||||||
|
|
||||||
boost::filesystem::path GetTempPath();
|
fs::path GetTempPath();
|
||||||
|
|
||||||
#endif // BITCOIN_TEST_TESTUTIL_H
|
#endif // BITCOIN_TEST_TESTUTIL_H
|
||||||
|
@ -314,9 +314,9 @@ static std::map<std::string,std::string> ParseTorReplyMapping(const std::string
|
|||||||
* @param maxsize Puts a maximum size limit on the file that is read. If the file is larger than this, truncated data
|
* @param maxsize Puts a maximum size limit on the file that is read. If the file is larger than this, truncated data
|
||||||
* (with len > maxsize) will be returned.
|
* (with len > maxsize) will be returned.
|
||||||
*/
|
*/
|
||||||
static std::pair<bool,std::string> ReadBinaryFile(const std::string &filename, size_t maxsize=std::numeric_limits<size_t>::max())
|
static std::pair<bool,std::string> ReadBinaryFile(const fs::path &filename, size_t maxsize=std::numeric_limits<size_t>::max())
|
||||||
{
|
{
|
||||||
FILE *f = fopen(filename.c_str(), "rb");
|
FILE *f = fsbridge::fopen(filename, "rb");
|
||||||
if (f == NULL)
|
if (f == NULL)
|
||||||
return std::make_pair(false,"");
|
return std::make_pair(false,"");
|
||||||
std::string retval;
|
std::string retval;
|
||||||
@ -334,9 +334,9 @@ static std::pair<bool,std::string> ReadBinaryFile(const std::string &filename, s
|
|||||||
/** Write contents of std::string to a file.
|
/** Write contents of std::string to a file.
|
||||||
* @return true on success.
|
* @return true on success.
|
||||||
*/
|
*/
|
||||||
static bool WriteBinaryFile(const std::string &filename, const std::string &data)
|
static bool WriteBinaryFile(const fs::path &filename, const std::string &data)
|
||||||
{
|
{
|
||||||
FILE *f = fopen(filename.c_str(), "wb");
|
FILE *f = fsbridge::fopen(filename, "wb");
|
||||||
if (f == NULL)
|
if (f == NULL)
|
||||||
return false;
|
return false;
|
||||||
if (fwrite(data.data(), 1, data.size(), f) != data.size()) {
|
if (fwrite(data.data(), 1, data.size(), f) != data.size()) {
|
||||||
@ -359,7 +359,7 @@ public:
|
|||||||
~TorController();
|
~TorController();
|
||||||
|
|
||||||
/** Get name fo file to store private key in */
|
/** Get name fo file to store private key in */
|
||||||
std::string GetPrivateKeyFile();
|
fs::path GetPrivateKeyFile();
|
||||||
|
|
||||||
/** Reconnect, after getting disconnected */
|
/** Reconnect, after getting disconnected */
|
||||||
void Reconnect();
|
void Reconnect();
|
||||||
@ -411,7 +411,7 @@ TorController::TorController(struct event_base* _base, const std::string& _targe
|
|||||||
// Read service private key if cached
|
// Read service private key if cached
|
||||||
std::pair<bool,std::string> pkf = ReadBinaryFile(GetPrivateKeyFile());
|
std::pair<bool,std::string> pkf = ReadBinaryFile(GetPrivateKeyFile());
|
||||||
if (pkf.first) {
|
if (pkf.first) {
|
||||||
LogPrint(BCLog::TOR, "tor: Reading cached private key from %s\n", GetPrivateKeyFile());
|
LogPrint(BCLog::TOR, "tor: Reading cached private key from %s\n", GetPrivateKeyFile().string());
|
||||||
private_key = pkf.second;
|
private_key = pkf.second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -442,9 +442,9 @@ void TorController::add_onion_cb(TorControlConnection& _conn, const TorControlRe
|
|||||||
service = LookupNumeric(std::string(service_id+".onion").c_str(), GetListenPort());
|
service = LookupNumeric(std::string(service_id+".onion").c_str(), GetListenPort());
|
||||||
LogPrintf("tor: Got service ID %s, advertising service %s\n", service_id, service.ToString());
|
LogPrintf("tor: Got service ID %s, advertising service %s\n", service_id, service.ToString());
|
||||||
if (WriteBinaryFile(GetPrivateKeyFile(), private_key)) {
|
if (WriteBinaryFile(GetPrivateKeyFile(), private_key)) {
|
||||||
LogPrint(BCLog::TOR, "tor: Cached service private key to %s\n", GetPrivateKeyFile());
|
LogPrint(BCLog::TOR, "tor: Cached service private key to %s\n", GetPrivateKeyFile().string());
|
||||||
} else {
|
} else {
|
||||||
LogPrintf("tor: Error writing service private key to %s\n", GetPrivateKeyFile());
|
LogPrintf("tor: Error writing service private key to %s\n", GetPrivateKeyFile().string());
|
||||||
}
|
}
|
||||||
AddLocal(service, LOCAL_MANUAL);
|
AddLocal(service, LOCAL_MANUAL);
|
||||||
// ... onion requested - keep connection open
|
// ... onion requested - keep connection open
|
||||||
@ -651,9 +651,9 @@ void TorController::Reconnect()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string TorController::GetPrivateKeyFile()
|
fs::path TorController::GetPrivateKeyFile()
|
||||||
{
|
{
|
||||||
return (GetDataDir() / "onion_private_key").string();
|
return GetDataDir() / "onion_private_key";
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorController::reconnect_cb(evutil_socket_t fd, short what, void *arg)
|
void TorController::reconnect_cb(evutil_socket_t fd, short what, void *arg)
|
||||||
|
67
src/util.cpp
67
src/util.cpp
@ -13,6 +13,7 @@
|
|||||||
#include "support/allocators/secure.h"
|
#include "support/allocators/secure.h"
|
||||||
#include "chainparamsbase.h"
|
#include "chainparamsbase.h"
|
||||||
#include "ctpl.h"
|
#include "ctpl.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
#include "serialize.h"
|
#include "serialize.h"
|
||||||
#include "stacktraces.h"
|
#include "stacktraces.h"
|
||||||
@ -86,8 +87,6 @@
|
|||||||
#include <boost/algorithm/string/predicate.hpp> // for startswith() and endswith()
|
#include <boost/algorithm/string/predicate.hpp> // for startswith() and endswith()
|
||||||
#include <boost/algorithm/string/split.hpp>
|
#include <boost/algorithm/string/split.hpp>
|
||||||
#include <boost/algorithm/string/classification.hpp>
|
#include <boost/algorithm/string/classification.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/filesystem/fstream.hpp>
|
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <boost/program_options/detail/config_file.hpp>
|
#include <boost/program_options/detail/config_file.hpp>
|
||||||
#include <boost/program_options/parsers.hpp>
|
#include <boost/program_options/parsers.hpp>
|
||||||
@ -235,8 +234,8 @@ void OpenDebugLog()
|
|||||||
|
|
||||||
assert(fileout == NULL);
|
assert(fileout == NULL);
|
||||||
assert(vMsgsBeforeOpenLog);
|
assert(vMsgsBeforeOpenLog);
|
||||||
boost::filesystem::path pathDebug = GetDataDir() / "debug.log";
|
fs::path pathDebug = GetDataDir() / "debug.log";
|
||||||
fileout = fopen(pathDebug.string().c_str(), "a");
|
fileout = fsbridge::fopen(pathDebug, "a");
|
||||||
if (fileout) {
|
if (fileout) {
|
||||||
setbuf(fileout, NULL); // unbuffered
|
setbuf(fileout, NULL); // unbuffered
|
||||||
// dump buffered messages from before we opened the log
|
// dump buffered messages from before we opened the log
|
||||||
@ -451,8 +450,8 @@ int LogPrintStr(const std::string &str)
|
|||||||
// reopen the log file, if requested
|
// reopen the log file, if requested
|
||||||
if (fReopenDebugLog) {
|
if (fReopenDebugLog) {
|
||||||
fReopenDebugLog = false;
|
fReopenDebugLog = false;
|
||||||
boost::filesystem::path pathDebug = GetDataDir() / "debug.log";
|
fs::path pathDebug = GetDataDir() / "debug.log";
|
||||||
if (freopen(pathDebug.string().c_str(),"a",fileout) != NULL)
|
if (fsbridge::freopen(pathDebug,"a",fileout) != NULL)
|
||||||
setbuf(fileout, NULL); // unbuffered
|
setbuf(fileout, NULL); // unbuffered
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -609,9 +608,8 @@ void PrintExceptionContinue(const std::exception_ptr pex, const char* pszThread)
|
|||||||
fprintf(stderr, "\n\n************************\n%s\n", message.c_str());
|
fprintf(stderr, "\n\n************************\n%s\n", message.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::filesystem::path GetDefaultDataDir()
|
fs::path GetDefaultDataDir()
|
||||||
{
|
{
|
||||||
namespace fs = boost::filesystem;
|
|
||||||
// Windows < Vista: C:\Documents and Settings\Username\Application Data\DashCore
|
// Windows < Vista: C:\Documents and Settings\Username\Application Data\DashCore
|
||||||
// Windows >= Vista: C:\Users\Username\AppData\Roaming\DashCore
|
// Windows >= Vista: C:\Users\Username\AppData\Roaming\DashCore
|
||||||
// Mac: ~/Library/Application Support/DashCore
|
// Mac: ~/Library/Application Support/DashCore
|
||||||
@ -636,13 +634,12 @@ boost::filesystem::path GetDefaultDataDir()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static boost::filesystem::path pathCached;
|
static fs::path pathCached;
|
||||||
static boost::filesystem::path pathCachedNetSpecific;
|
static fs::path pathCachedNetSpecific;
|
||||||
static CCriticalSection csPathCached;
|
static CCriticalSection csPathCached;
|
||||||
|
|
||||||
const boost::filesystem::path &GetDataDir(bool fNetSpecific)
|
const fs::path &GetDataDir(bool fNetSpecific)
|
||||||
{
|
{
|
||||||
namespace fs = boost::filesystem;
|
|
||||||
|
|
||||||
LOCK(csPathCached);
|
LOCK(csPathCached);
|
||||||
|
|
||||||
@ -684,13 +681,13 @@ void ClearDatadirCache()
|
|||||||
{
|
{
|
||||||
LOCK(csPathCached);
|
LOCK(csPathCached);
|
||||||
|
|
||||||
pathCached = boost::filesystem::path();
|
pathCached = fs::path();
|
||||||
pathCachedNetSpecific = boost::filesystem::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())
|
if (!pathConfigFile.is_complete())
|
||||||
pathConfigFile = GetDataDir(false) / pathConfigFile;
|
pathConfigFile = GetDataDir(false) / pathConfigFile;
|
||||||
|
|
||||||
@ -699,7 +696,7 @@ boost::filesystem::path GetConfigFile(const std::string& confPath)
|
|||||||
|
|
||||||
void ReadConfigFile(const std::string& confPath)
|
void ReadConfigFile(const std::string& confPath)
|
||||||
{
|
{
|
||||||
boost::filesystem::ifstream streamConfig(GetConfigFile(confPath));
|
fs::ifstream streamConfig(GetConfigFile(confPath));
|
||||||
if (!streamConfig.good()){
|
if (!streamConfig.good()){
|
||||||
// Create empty dash.conf if it does not excist
|
// Create empty dash.conf if it does not excist
|
||||||
FILE* configFile = fopen(GetConfigFile(confPath).string().c_str(), "a");
|
FILE* configFile = fopen(GetConfigFile(confPath).string().c_str(), "a");
|
||||||
@ -729,16 +726,16 @@ void ReadConfigFile(const std::string& confPath)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef WIN32
|
#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;
|
if (!pathPidFile.is_complete()) pathPidFile = GetDataDir() / pathPidFile;
|
||||||
return 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");
|
FILE* file = fsbridge::fopen(path, "w");
|
||||||
if (file)
|
if (file)
|
||||||
{
|
{
|
||||||
fprintf(file, "%d\n", pid);
|
fprintf(file, "%d\n", pid);
|
||||||
@ -747,7 +744,7 @@ void CreatePidFile(const boost::filesystem::path &path, pid_t pid)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest)
|
bool RenameOver(fs::path src, fs::path dest)
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
return MoveFileExA(src.string().c_str(), dest.string().c_str(),
|
return MoveFileExA(src.string().c_str(), dest.string().c_str(),
|
||||||
@ -763,13 +760,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
|
* Specifically handles case where path p exists, but it wasn't possible for the user to
|
||||||
* write to the parent directory.
|
* write to the parent directory.
|
||||||
*/
|
*/
|
||||||
bool TryCreateDirectory(const boost::filesystem::path& p)
|
bool TryCreateDirectory(const fs::path& p)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return boost::filesystem::create_directory(p);
|
return fs::create_directory(p);
|
||||||
} catch (const boost::filesystem::filesystem_error&) {
|
} catch (const fs::filesystem_error&) {
|
||||||
if (!boost::filesystem::exists(p) || !boost::filesystem::is_directory(p))
|
if (!fs::exists(p) || !fs::is_directory(p))
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -876,11 +873,11 @@ void ShrinkDebugFile()
|
|||||||
// Amount of debug.log to save at end when shrinking (must fit in memory)
|
// Amount of debug.log to save at end when shrinking (must fit in memory)
|
||||||
constexpr size_t RECENT_DEBUG_HISTORY_SIZE = 10 * 1000000;
|
constexpr size_t RECENT_DEBUG_HISTORY_SIZE = 10 * 1000000;
|
||||||
// Scroll debug.log if it's getting too big
|
// 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");
|
FILE* file = fsbridge::fopen(pathLog, "r");
|
||||||
// If debug.log file is more than 10% bigger the RECENT_DEBUG_HISTORY_SIZE
|
// 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
|
// 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
|
// Restart the file with some of the end
|
||||||
std::vector<char> vch(RECENT_DEBUG_HISTORY_SIZE, 0);
|
std::vector<char> vch(RECENT_DEBUG_HISTORY_SIZE, 0);
|
||||||
@ -888,7 +885,7 @@ void ShrinkDebugFile()
|
|||||||
int nBytes = fread(vch.data(), 1, vch.size(), file);
|
int nBytes = fread(vch.data(), 1, vch.size(), file);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
file = fopen(pathLog.string().c_str(), "w");
|
file = fsbridge::fopen(pathLog, "w");
|
||||||
if (file)
|
if (file)
|
||||||
{
|
{
|
||||||
fwrite(vch.data(), 1, nBytes, file);
|
fwrite(vch.data(), 1, nBytes, file);
|
||||||
@ -900,10 +897,8 @@ void ShrinkDebugFile()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate)
|
fs::path GetSpecialFolderPath(int nFolder, bool fCreate)
|
||||||
{
|
{
|
||||||
namespace fs = boost::filesystem;
|
|
||||||
|
|
||||||
char pszPath[MAX_PATH] = "";
|
char pszPath[MAX_PATH] = "";
|
||||||
|
|
||||||
if(SHGetSpecialFolderPathA(NULL, pszPath, nFolder, fCreate))
|
if(SHGetSpecialFolderPathA(NULL, pszPath, nFolder, fCreate))
|
||||||
@ -1017,9 +1012,9 @@ void SetupEnvironment()
|
|||||||
// The path locale is lazy initialized and to avoid deinitialization errors
|
// The path locale is lazy initialized and to avoid deinitialization errors
|
||||||
// in multithreading environments, it is set explicitly by the main thread.
|
// in multithreading environments, it is set explicitly by the main thread.
|
||||||
// A dummy locale is used to extract the internal default locale, used by
|
// 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.
|
// fs::path, which is then used to explicitly imbue the path.
|
||||||
std::locale loc = boost::filesystem::path::imbue(std::locale::classic());
|
std::locale loc = fs::path::imbue(std::locale::classic());
|
||||||
boost::filesystem::path::imbue(loc);
|
fs::path::imbue(loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SetupNetworking()
|
bool SetupNetworking()
|
||||||
|
18
src/util.h
18
src/util.h
@ -16,6 +16,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "tinyformat.h"
|
#include "tinyformat.h"
|
||||||
#include "utiltime.h"
|
#include "utiltime.h"
|
||||||
#include "amount.h"
|
#include "amount.h"
|
||||||
@ -28,7 +29,6 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <boost/filesystem/path.hpp>
|
|
||||||
#include <boost/signals2/signal.hpp>
|
#include <boost/signals2/signal.hpp>
|
||||||
#include <boost/thread/exceptions.hpp>
|
#include <boost/thread/exceptions.hpp>
|
||||||
|
|
||||||
@ -197,20 +197,20 @@ void FileCommit(FILE *file);
|
|||||||
bool TruncateFile(FILE *file, unsigned int length);
|
bool TruncateFile(FILE *file, unsigned int length);
|
||||||
int RaiseFileDescriptorLimit(int nMinFD);
|
int RaiseFileDescriptorLimit(int nMinFD);
|
||||||
void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length);
|
void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length);
|
||||||
bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest);
|
bool RenameOver(fs::path src, fs::path dest);
|
||||||
bool TryCreateDirectory(const boost::filesystem::path& p);
|
bool TryCreateDirectory(const fs::path& p);
|
||||||
boost::filesystem::path GetDefaultDataDir();
|
fs::path GetDefaultDataDir();
|
||||||
const boost::filesystem::path &GetDataDir(bool fNetSpecific = true);
|
const fs::path &GetDataDir(bool fNetSpecific = true);
|
||||||
boost::filesystem::path GetBackupsDir();
|
boost::filesystem::path GetBackupsDir();
|
||||||
void ClearDatadirCache();
|
void ClearDatadirCache();
|
||||||
boost::filesystem::path GetConfigFile(const std::string& confPath);
|
fs::path GetConfigFile(const std::string& confPath);
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
boost::filesystem::path GetPidFile();
|
fs::path GetPidFile();
|
||||||
void CreatePidFile(const boost::filesystem::path &path, pid_t pid);
|
void CreatePidFile(const fs::path &path, pid_t pid);
|
||||||
#endif
|
#endif
|
||||||
void ReadConfigFile(const std::string& confPath);
|
void ReadConfigFile(const std::string& confPath);
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate = true);
|
fs::path GetSpecialFolderPath(int nFolder, bool fCreate = true);
|
||||||
#endif
|
#endif
|
||||||
void OpenDebugLog();
|
void OpenDebugLog();
|
||||||
void ShrinkDebugFile();
|
void ShrinkDebugFile();
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "consensus/consensus.h"
|
#include "consensus/consensus.h"
|
||||||
#include "consensus/merkle.h"
|
#include "consensus/merkle.h"
|
||||||
#include "consensus/validation.h"
|
#include "consensus/validation.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
#include "policy/policy.h"
|
#include "policy/policy.h"
|
||||||
@ -54,8 +55,6 @@
|
|||||||
|
|
||||||
#include <boost/algorithm/string/replace.hpp>
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
#include <boost/algorithm/string/join.hpp>
|
#include <boost/algorithm/string/join.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/filesystem/fstream.hpp>
|
|
||||||
#include <boost/math/distributions/poisson.hpp>
|
#include <boost/math/distributions/poisson.hpp>
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
|
|
||||||
@ -3732,8 +3731,8 @@ void UnlinkPrunedFiles(const std::set<int>& setFilesToPrune)
|
|||||||
{
|
{
|
||||||
for (std::set<int>::iterator it = setFilesToPrune.begin(); it != setFilesToPrune.end(); ++it) {
|
for (std::set<int>::iterator it = setFilesToPrune.begin(); it != setFilesToPrune.end(); ++it) {
|
||||||
CDiskBlockPos pos(*it, 0);
|
CDiskBlockPos pos(*it, 0);
|
||||||
boost::filesystem::remove(GetBlockPosFilename(pos, "blk"));
|
fs::remove(GetBlockPosFilename(pos, "blk"));
|
||||||
boost::filesystem::remove(GetBlockPosFilename(pos, "rev"));
|
fs::remove(GetBlockPosFilename(pos, "rev"));
|
||||||
LogPrintf("Prune: %s deleted blk/rev (%05u)\n", __func__, *it);
|
LogPrintf("Prune: %s deleted blk/rev (%05u)\n", __func__, *it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3817,7 +3816,7 @@ void FindFilesToPrune(std::set<int>& setFilesToPrune, uint64_t nPruneAfterHeight
|
|||||||
|
|
||||||
bool CheckDiskSpace(uint64_t nAdditionalBytes)
|
bool CheckDiskSpace(uint64_t nAdditionalBytes)
|
||||||
{
|
{
|
||||||
uint64_t nFreeBytesAvailable = boost::filesystem::space(GetDataDir()).available;
|
uint64_t nFreeBytesAvailable = fs::space(GetDataDir()).available;
|
||||||
|
|
||||||
// Check for nMinDiskSpace bytes (currently 50MB)
|
// Check for nMinDiskSpace bytes (currently 50MB)
|
||||||
if (nFreeBytesAvailable < nMinDiskSpace + nAdditionalBytes)
|
if (nFreeBytesAvailable < nMinDiskSpace + nAdditionalBytes)
|
||||||
@ -3830,11 +3829,11 @@ FILE* OpenDiskFile(const CDiskBlockPos &pos, const char *prefix, bool fReadOnly)
|
|||||||
{
|
{
|
||||||
if (pos.IsNull())
|
if (pos.IsNull())
|
||||||
return NULL;
|
return NULL;
|
||||||
boost::filesystem::path path = GetBlockPosFilename(pos, prefix);
|
fs::path path = GetBlockPosFilename(pos, prefix);
|
||||||
boost::filesystem::create_directories(path.parent_path());
|
fs::create_directories(path.parent_path());
|
||||||
FILE* file = fopen(path.string().c_str(), "rb+");
|
FILE* file = fsbridge::fopen(path, "rb+");
|
||||||
if (!file && !fReadOnly)
|
if (!file && !fReadOnly)
|
||||||
file = fopen(path.string().c_str(), "wb+");
|
file = fsbridge::fopen(path, "wb+");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
LogPrintf("Unable to open file %s\n", path.string());
|
LogPrintf("Unable to open file %s\n", path.string());
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -3857,7 +3856,7 @@ FILE* OpenUndoFile(const CDiskBlockPos &pos, bool fReadOnly) {
|
|||||||
return OpenDiskFile(pos, "rev", fReadOnly);
|
return OpenDiskFile(pos, "rev", fReadOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::filesystem::path GetBlockPosFilename(const CDiskBlockPos &pos, const char *prefix)
|
fs::path GetBlockPosFilename(const CDiskBlockPos &pos, const char *prefix)
|
||||||
{
|
{
|
||||||
return GetDataDir() / "blocks" / strprintf("%s%05u.dat", prefix, pos.nFile);
|
return GetDataDir() / "blocks" / strprintf("%s%05u.dat", prefix, pos.nFile);
|
||||||
}
|
}
|
||||||
@ -4554,7 +4553,7 @@ bool LoadMempool(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int64_t nExpiryTimeout = GetArg("-mempoolexpiry", DEFAULT_MEMPOOL_EXPIRY) * 60 * 60;
|
int64_t nExpiryTimeout = GetArg("-mempoolexpiry", DEFAULT_MEMPOOL_EXPIRY) * 60 * 60;
|
||||||
FILE* filestr = fopen((GetDataDir() / "mempool.dat").string().c_str(), "rb");
|
FILE* filestr = fsbridge::fopen(GetDataDir() / "mempool.dat", "rb");
|
||||||
CAutoFile file(filestr, SER_DISK, CLIENT_VERSION);
|
CAutoFile file(filestr, SER_DISK, CLIENT_VERSION);
|
||||||
if (file.IsNull()) {
|
if (file.IsNull()) {
|
||||||
LogPrintf("Failed to open mempool file from disk. Continuing anyway.\n");
|
LogPrintf("Failed to open mempool file from disk. Continuing anyway.\n");
|
||||||
@ -4634,7 +4633,7 @@ void DumpMempool(void)
|
|||||||
int64_t mid = GetTimeMicros();
|
int64_t mid = GetTimeMicros();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
FILE* filestr = fopen((GetDataDir() / "mempool.dat.new").string().c_str(), "wb");
|
FILE* filestr = fsbridge::fopen(GetDataDir() / "mempool.dat.new", "wb");
|
||||||
if (!filestr) {
|
if (!filestr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "amount.h"
|
#include "amount.h"
|
||||||
#include "chain.h"
|
#include "chain.h"
|
||||||
#include "coins.h"
|
#include "coins.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "protocol.h" // For CMessageHeader::MessageStartChars
|
#include "protocol.h" // For CMessageHeader::MessageStartChars
|
||||||
#include "script/script_error.h"
|
#include "script/script_error.h"
|
||||||
#include "sync.h"
|
#include "sync.h"
|
||||||
@ -32,7 +33,6 @@
|
|||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
|
||||||
#include <boost/unordered_map.hpp>
|
#include <boost/unordered_map.hpp>
|
||||||
#include <boost/filesystem/path.hpp>
|
|
||||||
|
|
||||||
class CBlockIndex;
|
class CBlockIndex;
|
||||||
class CBlockTreeDB;
|
class CBlockTreeDB;
|
||||||
@ -260,7 +260,7 @@ FILE* OpenBlockFile(const CDiskBlockPos &pos, bool fReadOnly = false);
|
|||||||
/** Open an undo file (rev?????.dat) */
|
/** Open an undo file (rev?????.dat) */
|
||||||
FILE* OpenUndoFile(const CDiskBlockPos &pos, bool fReadOnly = false);
|
FILE* OpenUndoFile(const CDiskBlockPos &pos, bool fReadOnly = false);
|
||||||
/** Translation to a filesystem path */
|
/** Translation to a filesystem path */
|
||||||
boost::filesystem::path GetBlockPosFilename(const CDiskBlockPos &pos, const char *prefix);
|
fs::path GetBlockPosFilename(const CDiskBlockPos &pos, const char *prefix);
|
||||||
/** Import blocks from an external file */
|
/** Import blocks from an external file */
|
||||||
bool LoadExternalBlockFile(const CChainParams& chainparams, FILE* fileIn, CDiskBlockPos *dbp = NULL);
|
bool LoadExternalBlockFile(const CChainParams& chainparams, FILE* fileIn, CDiskBlockPos *dbp = NULL);
|
||||||
/** Initialize a new block tree database + block data on disk */
|
/** Initialize a new block tree database + block data on disk */
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "db.h"
|
#include "db.h"
|
||||||
|
|
||||||
#include "addrman.h"
|
#include "addrman.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
@ -17,7 +18,6 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
#include <boost/version.hpp>
|
#include <boost/version.hpp>
|
||||||
@ -66,7 +66,7 @@ void CDBEnv::Close()
|
|||||||
EnvShutdown();
|
EnvShutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CDBEnv::Open(const boost::filesystem::path& pathIn)
|
bool CDBEnv::Open(const fs::path& pathIn)
|
||||||
{
|
{
|
||||||
if (fDbEnvInit)
|
if (fDbEnvInit)
|
||||||
return true;
|
return true;
|
||||||
@ -74,9 +74,9 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn)
|
|||||||
boost::this_thread::interruption_point();
|
boost::this_thread::interruption_point();
|
||||||
|
|
||||||
strPath = pathIn.string();
|
strPath = pathIn.string();
|
||||||
boost::filesystem::path pathLogDir = pathIn / "database";
|
fs::path pathLogDir = pathIn / "database";
|
||||||
TryCreateDirectory(pathLogDir);
|
TryCreateDirectory(pathLogDir);
|
||||||
boost::filesystem::path pathErrorFile = pathIn / "db.log";
|
fs::path pathErrorFile = pathIn / "db.log";
|
||||||
LogPrintf("CDBEnv::Open: LogDir=%s ErrorFile=%s\n", pathLogDir.string(), pathErrorFile.string());
|
LogPrintf("CDBEnv::Open: LogDir=%s ErrorFile=%s\n", pathLogDir.string(), pathErrorFile.string());
|
||||||
|
|
||||||
unsigned int nEnvFlags = 0;
|
unsigned int nEnvFlags = 0;
|
||||||
@ -89,7 +89,7 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn)
|
|||||||
dbenv->set_lg_max(1048576);
|
dbenv->set_lg_max(1048576);
|
||||||
dbenv->set_lk_max_locks(40000);
|
dbenv->set_lk_max_locks(40000);
|
||||||
dbenv->set_lk_max_objects(40000);
|
dbenv->set_lk_max_objects(40000);
|
||||||
dbenv->set_errfile(fopen(pathErrorFile.string().c_str(), "a")); /// debug
|
dbenv->set_errfile(fsbridge::fopen(pathErrorFile, "a")); /// debug
|
||||||
dbenv->set_flags(DB_AUTO_COMMIT, 1);
|
dbenv->set_flags(DB_AUTO_COMMIT, 1);
|
||||||
dbenv->set_flags(DB_TXN_WRITE_NOSYNC, 1);
|
dbenv->set_flags(DB_TXN_WRITE_NOSYNC, 1);
|
||||||
dbenv->log_set_config(DB_LOG_AUTO_REMOVE, 1);
|
dbenv->log_set_config(DB_LOG_AUTO_REMOVE, 1);
|
||||||
@ -226,13 +226,13 @@ bool CDB::Recover(const std::string& filename, void *callbackDataIn, bool (*reco
|
|||||||
return fSuccess;
|
return fSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CDB::VerifyEnvironment(const std::string& walletFile, const boost::filesystem::path& dataDir, std::string& errorStr)
|
bool CDB::VerifyEnvironment(const std::string& walletFile, const fs::path& dataDir, std::string& errorStr)
|
||||||
{
|
{
|
||||||
LogPrintf("Using BerkeleyDB version %s\n", DbEnv::version(0, 0, 0));
|
LogPrintf("Using BerkeleyDB version %s\n", DbEnv::version(0, 0, 0));
|
||||||
LogPrintf("Using wallet %s\n", walletFile);
|
LogPrintf("Using wallet %s\n", walletFile);
|
||||||
|
|
||||||
// Wallet file must be a plain filename without a directory
|
// Wallet file must be a plain filename without a directory
|
||||||
if (walletFile != boost::filesystem::basename(walletFile) + boost::filesystem::extension(walletFile))
|
if (walletFile != fs::basename(walletFile) + fs::extension(walletFile))
|
||||||
{
|
{
|
||||||
errorStr = strprintf(_("Wallet %s resides outside data directory %s"), walletFile, dataDir.string());
|
errorStr = strprintf(_("Wallet %s resides outside data directory %s"), walletFile, dataDir.string());
|
||||||
return false;
|
return false;
|
||||||
@ -241,12 +241,12 @@ bool CDB::VerifyEnvironment(const std::string& walletFile, const boost::filesyst
|
|||||||
if (!bitdb.Open(dataDir))
|
if (!bitdb.Open(dataDir))
|
||||||
{
|
{
|
||||||
// try moving the database env out of the way
|
// try moving the database env out of the way
|
||||||
boost::filesystem::path pathDatabase = dataDir / "database";
|
fs::path pathDatabase = dataDir / "database";
|
||||||
boost::filesystem::path pathDatabaseBak = dataDir / strprintf("database.%d.bak", GetTime());
|
fs::path pathDatabaseBak = dataDir / strprintf("database.%d.bak", GetTime());
|
||||||
try {
|
try {
|
||||||
boost::filesystem::rename(pathDatabase, pathDatabaseBak);
|
fs::rename(pathDatabase, pathDatabaseBak);
|
||||||
LogPrintf("Moved old %s to %s. Retrying.\n", pathDatabase.string(), pathDatabaseBak.string());
|
LogPrintf("Moved old %s to %s. Retrying.\n", pathDatabase.string(), pathDatabaseBak.string());
|
||||||
} catch (const boost::filesystem::filesystem_error&) {
|
} catch (const fs::filesystem_error&) {
|
||||||
// failure is ok (well, not really, but it's not worse than what we started with)
|
// failure is ok (well, not really, but it's not worse than what we started with)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,9 +260,9 @@ bool CDB::VerifyEnvironment(const std::string& walletFile, const boost::filesyst
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CDB::VerifyDatabaseFile(const std::string& walletFile, const boost::filesystem::path& dataDir, std::string& warningStr, std::string& errorStr, bool (*recoverFunc)(const std::string& strFile))
|
bool CDB::VerifyDatabaseFile(const std::string& walletFile, const fs::path& dataDir, std::string& warningStr, std::string& errorStr, bool (*recoverFunc)(const std::string& strFile))
|
||||||
{
|
{
|
||||||
if (boost::filesystem::exists(dataDir / walletFile))
|
if (fs::exists(dataDir / walletFile))
|
||||||
{
|
{
|
||||||
CDBEnv::VerifyResult r = bitdb.Verify(walletFile, recoverFunc);
|
CDBEnv::VerifyResult r = bitdb.Verify(walletFile, recoverFunc);
|
||||||
if (r == CDBEnv::RECOVER_OK)
|
if (r == CDBEnv::RECOVER_OK)
|
||||||
@ -589,7 +589,7 @@ void CDBEnv::Flush(bool fShutdown)
|
|||||||
dbenv->log_archive(&listp, DB_ARCH_REMOVE);
|
dbenv->log_archive(&listp, DB_ARCH_REMOVE);
|
||||||
Close();
|
Close();
|
||||||
if (!fMockDb)
|
if (!fMockDb)
|
||||||
boost::filesystem::remove_all(boost::filesystem::path(strPath) / "database");
|
fs::remove_all(fs::path(strPath) / "database");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#define BITCOIN_WALLET_DB_H
|
#define BITCOIN_WALLET_DB_H
|
||||||
|
|
||||||
#include "clientversion.h"
|
#include "clientversion.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "serialize.h"
|
#include "serialize.h"
|
||||||
#include "streams.h"
|
#include "streams.h"
|
||||||
#include "sync.h"
|
#include "sync.h"
|
||||||
@ -16,8 +17,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <boost/filesystem/path.hpp>
|
|
||||||
|
|
||||||
#include <db_cxx.h>
|
#include <db_cxx.h>
|
||||||
|
|
||||||
static const unsigned int DEFAULT_WALLET_DBLOGSIZE = 100;
|
static const unsigned int DEFAULT_WALLET_DBLOGSIZE = 100;
|
||||||
@ -28,7 +27,7 @@ class CDBEnv
|
|||||||
private:
|
private:
|
||||||
bool fDbEnvInit;
|
bool fDbEnvInit;
|
||||||
bool fMockDb;
|
bool fMockDb;
|
||||||
// Don't change into boost::filesystem::path, as that can result in
|
// Don't change into fs::path, as that can result in
|
||||||
// shutdown problems/crashes caused by a static initialized internal pointer.
|
// shutdown problems/crashes caused by a static initialized internal pointer.
|
||||||
std::string strPath;
|
std::string strPath;
|
||||||
|
|
||||||
@ -67,7 +66,7 @@ public:
|
|||||||
typedef std::pair<std::vector<unsigned char>, std::vector<unsigned char> > KeyValPair;
|
typedef std::pair<std::vector<unsigned char>, std::vector<unsigned char> > KeyValPair;
|
||||||
bool Salvage(const std::string& strFile, bool fAggressive, std::vector<KeyValPair>& vResult);
|
bool Salvage(const std::string& strFile, bool fAggressive, std::vector<KeyValPair>& vResult);
|
||||||
|
|
||||||
bool Open(const boost::filesystem::path& path);
|
bool Open(const fs::path& path);
|
||||||
void Close();
|
void Close();
|
||||||
void Flush(bool fShutdown);
|
void Flush(bool fShutdown);
|
||||||
void CheckpointLSN(const std::string& strFile);
|
void CheckpointLSN(const std::string& strFile);
|
||||||
@ -110,9 +109,9 @@ public:
|
|||||||
ideal to be called periodically */
|
ideal to be called periodically */
|
||||||
static bool PeriodicFlush(std::string strFile);
|
static bool PeriodicFlush(std::string strFile);
|
||||||
/* verifies the database environment */
|
/* verifies the database environment */
|
||||||
static bool VerifyEnvironment(const std::string& walletFile, const boost::filesystem::path& dataDir, std::string& errorStr);
|
static bool VerifyEnvironment(const std::string& walletFile, const fs::path& dataDir, std::string& errorStr);
|
||||||
/* verifies the database file */
|
/* verifies the database file */
|
||||||
static bool VerifyDatabaseFile(const std::string& walletFile, const boost::filesystem::path& dataDir, std::string& warningStr, std::string& errorStr, bool (*recoverFunc)(const std::string& strFile));
|
static bool VerifyDatabaseFile(const std::string& walletFile, const fs::path& dataDir, std::string& warningStr, std::string& errorStr, bool (*recoverFunc)(const std::string& strFile));
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CDB(const CDB&);
|
CDB(const CDB&);
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "wallet/coincontrol.h"
|
#include "wallet/coincontrol.h"
|
||||||
#include "consensus/consensus.h"
|
#include "consensus/consensus.h"
|
||||||
#include "consensus/validation.h"
|
#include "consensus/validation.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "key.h"
|
#include "key.h"
|
||||||
#include "keystore.h"
|
#include "keystore.h"
|
||||||
#include "validation.h"
|
#include "validation.h"
|
||||||
@ -42,7 +43,6 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include <boost/algorithm/string/replace.hpp>
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
|
|
||||||
CWallet* pwalletMain = NULL;
|
CWallet* pwalletMain = NULL;
|
||||||
@ -5172,16 +5172,16 @@ bool CWallet::BackupWallet(const std::string& strDest)
|
|||||||
bitdb.mapFileUseCount.erase(strWalletFile);
|
bitdb.mapFileUseCount.erase(strWalletFile);
|
||||||
|
|
||||||
// Copy wallet file
|
// Copy wallet file
|
||||||
boost::filesystem::path pathSrc = GetDataDir() / strWalletFile;
|
fs::path pathSrc = GetDataDir() / strWalletFile;
|
||||||
boost::filesystem::path pathDest(strDest);
|
fs::path pathDest(strDest);
|
||||||
if (boost::filesystem::is_directory(pathDest))
|
if (fs::is_directory(pathDest))
|
||||||
pathDest /= strWalletFile;
|
pathDest /= strWalletFile;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
boost::filesystem::copy_file(pathSrc, pathDest, boost::filesystem::copy_option::overwrite_if_exists);
|
fs::copy_file(pathSrc, pathDest, fs::copy_option::overwrite_if_exists);
|
||||||
LogPrintf("copied %s to %s\n", strWalletFile, pathDest.string());
|
LogPrintf("copied %s to %s\n", strWalletFile, pathDest.string());
|
||||||
return true;
|
return true;
|
||||||
} catch (const boost::filesystem::filesystem_error& e) {
|
} catch (const fs::filesystem_error& e) {
|
||||||
LogPrintf("error copying %s to %s - %s\n", strWalletFile, pathDest.string(), e.what());
|
LogPrintf("error copying %s to %s - %s\n", strWalletFile, pathDest.string(), e.what());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include "base58.h"
|
#include "base58.h"
|
||||||
#include "consensus/validation.h"
|
#include "consensus/validation.h"
|
||||||
|
#include "fs.h"
|
||||||
#include "validation.h" // For CheckTransaction
|
#include "validation.h" // For CheckTransaction
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
#include "serialize.h"
|
#include "serialize.h"
|
||||||
@ -18,7 +19,6 @@
|
|||||||
|
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
|
|
||||||
@ -875,12 +875,12 @@ bool CWalletDB::RecoverKeysOnlyFilter(void *callbackData, CDataStream ssKey, CDa
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CWalletDB::VerifyEnvironment(const std::string& walletFile, const boost::filesystem::path& dataDir, std::string& errorStr)
|
bool CWalletDB::VerifyEnvironment(const std::string& walletFile, const fs::path& dataDir, std::string& errorStr)
|
||||||
{
|
{
|
||||||
return CDB::VerifyEnvironment(walletFile, dataDir, errorStr);
|
return CDB::VerifyEnvironment(walletFile, dataDir, errorStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CWalletDB::VerifyDatabaseFile(const std::string& walletFile, const boost::filesystem::path& dataDir, std::string& warningStr, std::string& errorStr)
|
bool CWalletDB::VerifyDatabaseFile(const std::string& walletFile, const fs::path& dataDir, std::string& warningStr, std::string& errorStr)
|
||||||
{
|
{
|
||||||
return CDB::VerifyDatabaseFile(walletFile, dataDir, errorStr, warningStr, CWalletDB::Recover);
|
return CDB::VerifyDatabaseFile(walletFile, dataDir, errorStr, warningStr, CWalletDB::Recover);
|
||||||
}
|
}
|
||||||
|
@ -140,9 +140,9 @@ public:
|
|||||||
/* Function to determine if a certain KV/key-type is a key (cryptographical key) type */
|
/* Function to determine if a certain KV/key-type is a key (cryptographical key) type */
|
||||||
static bool IsKeyType(const std::string& strType);
|
static bool IsKeyType(const std::string& strType);
|
||||||
/* verifies the database environment */
|
/* verifies the database environment */
|
||||||
static bool VerifyEnvironment(const std::string& walletFile, const boost::filesystem::path& dataDir, std::string& errorStr);
|
static bool VerifyEnvironment(const std::string& walletFile, const fs::path& dataDir, std::string& errorStr);
|
||||||
/* verifies the database file */
|
/* verifies the database file */
|
||||||
static bool VerifyDatabaseFile(const std::string& walletFile, const boost::filesystem::path& dataDir, std::string& warningStr, std::string& errorStr);
|
static bool VerifyDatabaseFile(const std::string& walletFile, const fs::path& dataDir, std::string& warningStr, std::string& errorStr);
|
||||||
|
|
||||||
//! write the hdchain model (external chain child index counter)
|
//! write the hdchain model (external chain child index counter)
|
||||||
bool WriteHDChain(const CHDChain& chain);
|
bool WriteHDChain(const CHDChain& chain);
|
||||||
|
Loading…
Reference in New Issue
Block a user