![]() |
Bitcoin ABC
0.26.3
P2P Digital Currency
|
#include <util/system.h>
#include <chainparamsbase.h>
#include <sync.h>
#include <util/getuniquepath.h>
#include <util/strencodings.h>
#include <util/string.h>
#include <util/translation.h>
#include <univalue.h>
#include <memory>
#include <thread>
#include <typeinfo>
#include <algorithm>
#include <cassert>
#include <fcntl.h>
#include <sched.h>
#include <sys/resource.h>
#include <sys/stat.h>
Go to the source code of this file.
Namespaces | |
util | |
Functions | |
static std::map< std::string, std::unique_ptr< fsbridge::FileLock > > dir_locks | GUARDED_BY (cs_dir_locks) |
A map that contains all the currently held directory locks. More... | |
bool | LockDirectory (const fs::path &directory, const std::string lockfile_name, bool probe_only) |
void | UnlockDirectory (const fs::path &directory, const std::string &lockfile_name) |
void | ReleaseDirectoryLocks () |
Release all directory locks. More... | |
bool | DirIsWritable (const fs::path &directory) |
bool | CheckDiskSpace (const fs::path &dir, uint64_t additional_bytes) |
std::streampos | GetFileSize (const char *path, std::streamsize max) |
Get the size of a file by scanning it. More... | |
static bool | InterpretBool (const std::string &strValue) |
Interpret a string argument as a boolean. More... | |
static std::string | SettingName (const std::string &arg) |
static util::SettingsValue | InterpretOption (std::string §ion, std::string &key, const std::string &value) |
Interpret -nofoo as if the user supplied -foo=0. More... | |
static bool | CheckValid (const std::string &key, const util::SettingsValue &val, unsigned int flags, std::string &error) |
Check settings value validity according to flags. More... | |
bool | ParseKeyValue (std::string &key, std::string &val) |
static void | SaveErrors (const std::vector< std::string > errors, std::vector< std::string > *error_out) |
bool | HelpRequested (const ArgsManager &args) |
void | SetupHelpOptions (ArgsManager &args) |
Add help options to the args manager. More... | |
std::string | HelpMessageGroup (const std::string &message) |
Format a string to be used as group of options in help messages. More... | |
std::string | HelpMessageOpt (const std::string &option, const std::string &message) |
Format a string to be used as option description in help messages. More... | |
static std::string | FormatException (const std::exception *pex, const char *pszThread) |
void | PrintExceptionContinue (const std::exception *pex, const char *pszThread) |
fs::path | GetDefaultDataDir () |
bool | CheckDataDirOption () |
fs::path | GetConfigFile (const std::string &confPath) |
static bool | GetConfigOptions (std::istream &stream, const std::string &filepath, std::string &error, std::vector< std::pair< std::string, std::string >> &options, std::list< SectionInfo > §ions) |
bool | RenameOver (fs::path src, fs::path dest) |
bool | TryCreateDirectories (const fs::path &p) |
Ignores exceptions thrown by Boost's create_directories if the requested directory exists. More... | |
bool | FileCommit (FILE *file) |
bool | TruncateFile (FILE *file, unsigned int length) |
int | RaiseFileDescriptorLimit (int nMinFD) |
This function tries to raise the file descriptor limit to the requested number. More... | |
void | AllocateFileRange (FILE *file, unsigned int offset, unsigned int length) |
This function tries to make a particular range of a file allocated (corresponding to disk space) it is advisory, and the range specified in the arguments will never contain live data. More... | |
std::string | ShellEscape (const std::string &arg) |
void | SetupEnvironment () |
bool | SetupNetworking () |
int | GetNumCores () |
Return the number of cores available on the current system. More... | |
std::string | CopyrightHolders (const std::string &strPrefix) |
int64_t | GetStartupTime () |
Server/client environment: argument handling, config file parsing, thread wrappers, startup time. More... | |
fs::path | AbsPathForConfigVal (const fs::path &path, bool net_specific) |
Most paths passed as configuration arguments are treated as relative to the datadir if they are not absolute. More... | |
void | ScheduleBatchPriority () |
On platforms that support it, tell the kernel the calling thread is CPU-intensive and non-interactive. More... | |
Variables | |
const int64_t | nStartupTime = GetTime() |
const char *const | BITCOIN_CONF_FILENAME = "bitcoin.conf" |
const char *const | BITCOIN_SETTINGS_FILENAME = "settings.json" |
ArgsManager | gArgs |
static Mutex | cs_dir_locks |
Mutex to protect dir_locks. More... | |
static const int | screenWidth = 79 |
static const int | optIndent = 2 |
static const int | msgIndent = 7 |
Most paths passed as configuration arguments are treated as relative to the datadir if they are not absolute.
path | The path to be conditionally prefixed with datadir. |
net_specific | Use network specific datadir variant |
Definition at line 1383 of file system.cpp.
void AllocateFileRange | ( | FILE * | file, |
unsigned int | offset, | ||
unsigned int | length | ||
) |
This function tries to make a particular range of a file allocated (corresponding to disk space) it is advisory, and the range specified in the arguments will never contain live data.
Definition at line 1226 of file system.cpp.
bool CheckDataDirOption | ( | ) |
Definition at line 837 of file system.cpp.
bool CheckDiskSpace | ( | const fs::path & | dir, |
uint64_t | additional_bytes | ||
) |
|
static |
Check settings value validity according to flags.
TODO: Add more meaningful error checks here in the future See "here's how the flags are meant to behave" in https://github.com/bitcoin/bitcoin/pull/16097#issuecomment-514627823
Definition at line 233 of file system.cpp.
std::string CopyrightHolders | ( | const std::string & | strPrefix | ) |
Definition at line 1373 of file system.cpp.
bool DirIsWritable | ( | const fs::path & | directory | ) |
Definition at line 126 of file system.cpp.
bool FileCommit | ( | FILE * | file | ) |
|
static |
fs::path GetConfigFile | ( | const std::string & | confPath | ) |
Definition at line 843 of file system.cpp.
|
static |
Definition at line 848 of file system.cpp.
fs::path GetDefaultDataDir | ( | ) |
std::streampos GetFileSize | ( | const char * | path, |
std::streamsize | max = std::numeric_limits< std::streamsize >::max() |
||
) |
Get the size of a file by scanning it.
[in] | path | The file path |
[in] | max | Stop seeking beyond this limit |
Definition at line 148 of file system.cpp.
int GetNumCores | ( | ) |
Return the number of cores available on the current system.
Definition at line 1369 of file system.cpp.
int64_t GetStartupTime | ( | ) |
Server/client environment: argument handling, config file parsing, thread wrappers, startup time.
Definition at line 1379 of file system.cpp.
|
static |
A map that contains all the currently held directory locks.
After successful locking, these will be held here until the global destructor cleans them up and thus automatically unlocks them, or ReleaseDirectoryLocks is called.
std::string HelpMessageGroup | ( | const std::string & | message | ) |
Format a string to be used as group of options in help messages.
message | Group name (e.g. "RPC server options:") |
Definition at line 776 of file system.cpp.
std::string HelpMessageOpt | ( | const std::string & | option, |
const std::string & | message | ||
) |
Format a string to be used as option description in help messages.
option | Option message (e.g. "-rpcuser=<user>") |
message | Option description (e.g. "Username for JSON-RPC connections") |
Definition at line 780 of file system.cpp.
bool HelpRequested | ( | const ArgsManager & | args | ) |
Definition at line 761 of file system.cpp.
|
static |
Interpret a string argument as a boolean.
The definition of atoi() requires that non-numeric string values like "foo", return 0. This means that if a user unintentionally supplies a non-integer argument here, the return value is always false. This means that -foo=false does what the user probably expects, but -foo=true is well defined but does not do what they probably expected.
The return value of atoi() is undefined when given input not representable as an int. On most systems this means string value between "-2147483648" and "2147483647" are well defined (this method will return true). Setting -txindex=2147483648 on most systems, however, is probably undefined.
For a more extensive discussion of this topic (and a wide range of opinions on the Right Way to change this code), see PR12713.
Definition at line 171 of file system.cpp.
|
static |
Interpret -nofoo as if the user supplied -foo=0.
This method also tracks when the -no form was supplied, and if so, checks whether there was a double-negative (-nofoo=0 -> -foo=1).
If there was not a double negative, it removes the "no" from the key and returns false.
If there was a double negative, it removes "no" from the key, and returns true.
If there was no "no", it returns the string value untouched.
Where an option was negated can be later checked using the IsArgNegated() method. One use case for this is to have a way to disable options that are not normally boolean (e.g. using -nodebuglogfile to request that debug log output is not sent to any file at all).
Definition at line 202 of file system.cpp.
bool LockDirectory | ( | const fs::path & | directory, |
const std::string | lockfile_name, | ||
bool | probe_only | ||
) |
Definition at line 87 of file system.cpp.
bool ParseKeyValue | ( | std::string & | key, |
std::string & | val | ||
) |
Definition at line 305 of file system.cpp.
void PrintExceptionContinue | ( | const std::exception * | pex, |
const char * | pszThread | ||
) |
Definition at line 806 of file system.cpp.
int RaiseFileDescriptorLimit | ( | int | nMinFD | ) |
This function tries to raise the file descriptor limit to the requested number.
It returns the actual file descriptor limit (which may be more or less than nMinFD)
Definition at line 1200 of file system.cpp.
void ReleaseDirectoryLocks | ( | ) |
Release all directory locks.
This is used for unit testing only, at runtime the global destructor will take care of the locks.
Definition at line 121 of file system.cpp.
|
static |
Definition at line 518 of file system.cpp.
void ScheduleBatchPriority | ( | ) |
On platforms that support it, tell the kernel the calling thread is CPU-intensive and non-interactive.
See SCHED_BATCH in sched(7) for details.
Definition at line 1391 of file system.cpp.
|
static |
void SetupEnvironment | ( | ) |
void SetupHelpOptions | ( | ArgsManager & | args | ) |
Add help options to the args manager.
Definition at line 766 of file system.cpp.
bool SetupNetworking | ( | ) |
std::string ShellEscape | ( | const std::string & | arg | ) |
Definition at line 1291 of file system.cpp.
bool TruncateFile | ( | FILE * | file, |
unsigned int | length | ||
) |
bool TryCreateDirectories | ( | const fs::path & | p | ) |
Ignores exceptions thrown by Boost's create_directories if the requested directory exists.
Specifically handles case where path p exists, but it wasn't possible for the user to write to the parent directory.
Definition at line 1137 of file system.cpp.
void UnlockDirectory | ( | const fs::path & | directory, |
const std::string & | lockfile_name | ||
) |
Definition at line 115 of file system.cpp.
const char* const BITCOIN_CONF_FILENAME = "bitcoin.conf" |
Definition at line 72 of file system.cpp.
const char* const BITCOIN_SETTINGS_FILENAME = "settings.json" |
Definition at line 73 of file system.cpp.
|
static |
Mutex to protect dir_locks.
Definition at line 78 of file system.cpp.
ArgsManager gArgs |
Definition at line 75 of file system.cpp.
|
static |
Definition at line 774 of file system.cpp.
const int64_t nStartupTime = GetTime() |
Definition at line 70 of file system.cpp.
|
static |
Definition at line 773 of file system.cpp.
|
static |
Definition at line 772 of file system.cpp.