C++20 modernization: nullptr, constexpr, smart pointers, thread safety, enum class

- Replace ~320 NULL occurrences with nullptr across 47 files (-184 net lines)
- static const -> constexpr for version, coin, utility constants
- Collapse 9 PushMessage overloads into 1 variadic template with fold expressions
- Convert boost::array -> std::array, boost::type_traits -> std:: equivalents
- pwalletMain, pScriptCheckQueue, pScriptCheckThreads -> unique_ptr
- mapOrphanBlocks values: raw CBlock* -> unique_ptr<CBlock>
- Fix data races: add locks to wallet registration, pindexBest reads, mempool exists
- pwalletdbEncryption: raw new/delete -> local unique_ptr, remove exit() calls
- PoS reward overflow: CBigNum intermediate for nCoinAge * nRewardCoinYear
- memset -> OPENSSL_cleanse for secure zeroing
- Fix const-cast UB in SetMerkleBranch
- Log silent catch(...) blocks instead of silently swallowing
- Enum class: GetMinFeeMode, WalletFeature
- std::string_view for 8 utility function parameters
- Range-for with structured bindings: 63 iterator loops modernized
- std::make_pair -> brace init: 35 sites
- Delegating constructors: CWallet, CBlockIndex
- Merkle tree caching, std::array for GetMedianTimePast
- CScript copy ctor -> = default, operator!= -> = default
This commit is contained in:
2026-05-08 21:34:24 -07:00
parent 47e358dc18
commit 150828b806
47 changed files with 747 additions and 931 deletions
+19 -19
View File
@@ -133,7 +133,7 @@ void CDBEnv::MakeMock()
#ifdef DB_LOG_IN_MEMORY
dbenv.log_set_config(DB_LOG_IN_MEMORY, 1);
#endif
int ret = dbenv.open(NULL,
int ret = dbenv.open(nullptr,
DB_CREATE |
DB_INIT_LOCK |
DB_INIT_LOG |
@@ -155,10 +155,10 @@ CDBEnv::VerifyResult CDBEnv::Verify(std::string strFile, bool (*recoverFunc)(CDB
assert(mapFileUseCount.count(strFile) == 0);
Db db(&dbenv, 0);
int result = db.verify(strFile.c_str(), NULL, NULL, 0);
int result = db.verify(strFile.c_str(), nullptr, nullptr, 0);
if (result == 0)
return VERIFY_OK;
else if (recoverFunc == NULL)
else if (recoverFunc == nullptr)
return RECOVER_FAIL;
// Try to recover:
@@ -178,7 +178,7 @@ bool CDBEnv::Salvage(std::string strFile, bool fAggressive,
stringstream strDump;
Db db(&dbenv, 0);
int result = db.verify(strFile.c_str(), NULL, &strDump, flags);
int result = db.verify(strFile.c_str(), nullptr, &strDump, flags);
if (result == DB_VERIFY_BAD)
{
printf("Error: Salvage found errors, all data may not be recoverable.\n");
@@ -231,10 +231,10 @@ void CDBEnv::CheckpointLSN(std::string strFile)
CDB::CDB(const char *pszFile, const char* pszMode) :
pdb(NULL), activeTxn(NULL)
pdb(nullptr), activeTxn(nullptr)
{
int ret;
if (pszFile == NULL)
if (pszFile == nullptr)
return;
fReadOnly = (!strchr(pszMode, '+') && !strchr(pszMode, 'w'));
@@ -251,7 +251,7 @@ CDB::CDB(const char *pszFile, const char* pszMode) :
strFile = pszFile;
++bitdb.mapFileUseCount[strFile];
pdb = bitdb.mapDb[strFile];
if (pdb == NULL)
if (pdb == nullptr)
{
pdb = new Db(&bitdb.dbenv, 0);
@@ -264,8 +264,8 @@ CDB::CDB(const char *pszFile, const char* pszMode) :
throw runtime_error(strprintf("CDB() : failed to configure for no temp file backing for database %s", pszFile));
}
ret = pdb->open(NULL, // Txn pointer
fMockDb ? NULL : pszFile, // Filename
ret = pdb->open(nullptr, // Txn pointer
fMockDb ? nullptr : pszFile, // Filename
"main", // Logical db name
DB_BTREE, // Database type
nFlags, // Flags
@@ -274,7 +274,7 @@ CDB::CDB(const char *pszFile, const char* pszMode) :
if (ret != 0)
{
delete pdb;
pdb = NULL;
pdb = nullptr;
--bitdb.mapFileUseCount[strFile];
strFile = "";
throw runtime_error(strprintf("CDB() : can't open database file %s, error %d", pszFile, ret));
@@ -307,8 +307,8 @@ void CDB::Close()
return;
if (activeTxn)
activeTxn->abort();
activeTxn = NULL;
pdb = NULL;
activeTxn = nullptr;
pdb = nullptr;
// Flush database activity from memory pool to disk log
unsigned int nMinutes = 0;
@@ -331,13 +331,13 @@ void CDBEnv::CloseDb(const string& strFile)
{
{
LOCK(cs_db);
if (mapDb[strFile] != NULL)
if (mapDb[strFile] != nullptr)
{
// Close the database handle
Db* pdb = mapDb[strFile];
pdb->close(0);
delete pdb;
mapDb[strFile] = NULL;
mapDb[strFile] = nullptr;
}
}
}
@@ -347,7 +347,7 @@ bool CDBEnv::RemoveDb(const string& strFile)
this->CloseDb(strFile);
LOCK(cs_db);
int rc = dbenv.dbremove(NULL, strFile.c_str(), NULL, DB_AUTO_COMMIT);
int rc = dbenv.dbremove(nullptr, strFile.c_str(), nullptr, DB_AUTO_COMMIT);
return (rc == 0);
}
@@ -371,7 +371,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
CDB db(strFile.c_str(), "r");
Db* pdbCopy = new Db(&bitdb.dbenv, 0);
int ret = pdbCopy->open(NULL, // Txn pointer
int ret = pdbCopy->open(nullptr, // Txn pointer
strFileRes.c_str(), // Filename
"main", // Logical db name
DB_BTREE, // Database type
@@ -412,7 +412,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
}
Dbt datKey(&ssKey[0], ssKey.size());
Dbt datValue(&ssValue[0], ssValue.size());
int ret2 = pdbCopy->put(NULL, &datKey, &datValue, DB_NOOVERWRITE);
int ret2 = pdbCopy->put(nullptr, &datKey, &datValue, DB_NOOVERWRITE);
if (ret2 > 0)
fSuccess = false;
}
@@ -428,10 +428,10 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
if (fSuccess)
{
Db dbA(&bitdb.dbenv, 0);
if (dbA.remove(strFile.c_str(), NULL, 0))
if (dbA.remove(strFile.c_str(), nullptr, 0))
fSuccess = false;
Db dbB(&bitdb.dbenv, 0);
if (dbB.rename(strFileRes.c_str(), NULL, strFile.c_str(), 0))
if (dbB.rename(strFileRes.c_str(), nullptr, strFile.c_str(), 0))
fSuccess = false;
}
if (!fSuccess)