Merge pull request #3549

7d9d134 Remove redundant .c_str()s (Wladimir J. van der Laan)
b77dfdc Typesafe strprintf/error/LogPrint functions (Wladimir J. van der Laan)
This commit is contained in:
Wladimir J. van der Laan 2014-01-23 17:25:12 +01:00
commit 6403c6c835
No known key found for this signature in database
GPG key ID: 74810B012346C9A6
26 changed files with 1299 additions and 338 deletions

View file

@ -189,7 +189,7 @@ case $host in
AC_MSG_ERROR("windres not found") AC_MSG_ERROR("windres not found")
fi fi
CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -D__USE_MINGW_ANSI_STDIO" CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB"
LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE" LEVELDB_TARGET_FLAGS="TARGET_OS=OS_WINDOWS_CROSSCOMPILE"
if test "x$CXXFLAGS_overridden" = "xno"; then if test "x$CXXFLAGS_overridden" = "xno"; then
CXXFLAGS="$CXXFLAGS -w" CXXFLAGS="$CXXFLAGS -w"

View file

@ -60,6 +60,7 @@ BITCOIN_CORE_H = \
serialize.h \ serialize.h \
sync.h \ sync.h \
threadsafety.h \ threadsafety.h \
tinyformat.h \
txdb.h \ txdb.h \
txmempool.h \ txmempool.h \
ui_interface.h \ ui_interface.h \

View file

@ -304,7 +304,7 @@ void CAddrMan::Good_(const CService &addr, int64_t nTime)
// TODO: maybe re-add the node, but for now, just bail out // TODO: maybe re-add the node, but for now, just bail out
if (nUBucket == -1) return; if (nUBucket == -1) return;
LogPrint("addrman", "Moving %s to tried\n", addr.ToString().c_str()); LogPrint("addrman", "Moving %s to tried\n", addr.ToString());
// move nId to the tried tables // move nId to the tried tables
MakeTried(info, nId, nUBucket); MakeTried(info, nId, nUBucket);

View file

@ -69,18 +69,18 @@ std::string CUnsignedAlert::ToString() const
nExpiration, nExpiration,
nID, nID,
nCancel, nCancel,
strSetCancel.c_str(), strSetCancel,
nMinVer, nMinVer,
nMaxVer, nMaxVer,
strSetSubVer.c_str(), strSetSubVer,
nPriority, nPriority,
strComment.c_str(), strComment,
strStatusBar.c_str()); strStatusBar);
} }
void CUnsignedAlert::print() const void CUnsignedAlert::print() const
{ {
LogPrintf("%s", ToString().c_str()); LogPrintf("%s", ToString());
} }
void CAlert::SetNull() void CAlert::SetNull()

View file

@ -9,12 +9,12 @@
std::string COutPoint::ToString() const std::string COutPoint::ToString() const
{ {
return strprintf("COutPoint(%s, %u)", hash.ToString().substr(0,10).c_str(), n); return strprintf("COutPoint(%s, %u)", hash.ToString().substr(0,10), n);
} }
void COutPoint::print() const void COutPoint::print() const
{ {
LogPrintf("%s\n", ToString().c_str()); LogPrintf("%s\n", ToString());
} }
CTxIn::CTxIn(COutPoint prevoutIn, CScript scriptSigIn, unsigned int nSequenceIn) CTxIn::CTxIn(COutPoint prevoutIn, CScript scriptSigIn, unsigned int nSequenceIn)
@ -37,9 +37,9 @@ std::string CTxIn::ToString() const
str += "CTxIn("; str += "CTxIn(";
str += prevout.ToString(); str += prevout.ToString();
if (prevout.IsNull()) if (prevout.IsNull())
str += strprintf(", coinbase %s", HexStr(scriptSig).c_str()); str += strprintf(", coinbase %s", HexStr(scriptSig));
else else
str += strprintf(", scriptSig=%s", scriptSig.ToString().substr(0,24).c_str()); str += strprintf(", scriptSig=%s", scriptSig.ToString().substr(0,24));
if (nSequence != std::numeric_limits<unsigned int>::max()) if (nSequence != std::numeric_limits<unsigned int>::max())
str += strprintf(", nSequence=%u", nSequence); str += strprintf(", nSequence=%u", nSequence);
str += ")"; str += ")";
@ -48,7 +48,7 @@ std::string CTxIn::ToString() const
void CTxIn::print() const void CTxIn::print() const
{ {
LogPrintf("%s\n", ToString().c_str()); LogPrintf("%s\n", ToString());
} }
CTxOut::CTxOut(int64_t nValueIn, CScript scriptPubKeyIn) CTxOut::CTxOut(int64_t nValueIn, CScript scriptPubKeyIn)
@ -64,12 +64,12 @@ uint256 CTxOut::GetHash() const
std::string CTxOut::ToString() const std::string CTxOut::ToString() const
{ {
return strprintf("CTxOut(nValue=%"PRId64".%08"PRId64", scriptPubKey=%s)", nValue / COIN, nValue % COIN, scriptPubKey.ToString().substr(0,30).c_str()); return strprintf("CTxOut(nValue=%"PRId64".%08"PRId64", scriptPubKey=%s)", nValue / COIN, nValue % COIN, scriptPubKey.ToString().substr(0,30));
} }
void CTxOut::print() const void CTxOut::print() const
{ {
LogPrintf("%s\n", ToString().c_str()); LogPrintf("%s\n", ToString());
} }
uint256 CTransaction::GetHash() const uint256 CTransaction::GetHash() const
@ -141,7 +141,7 @@ std::string CTransaction::ToString() const
{ {
std::string str; std::string str;
str += strprintf("CTransaction(hash=%s, ver=%d, vin.size=%"PRIszu", vout.size=%"PRIszu", nLockTime=%u)\n", str += strprintf("CTransaction(hash=%s, ver=%d, vin.size=%"PRIszu", vout.size=%"PRIszu", nLockTime=%u)\n",
GetHash().ToString().substr(0,10).c_str(), GetHash().ToString().substr(0,10),
nVersion, nVersion,
vin.size(), vin.size(),
vout.size(), vout.size(),
@ -155,7 +155,7 @@ std::string CTransaction::ToString() const
void CTransaction::print() const void CTransaction::print() const
{ {
LogPrintf("%s", ToString().c_str()); LogPrintf("%s", ToString());
} }
// Amount compression: // Amount compression:
@ -270,10 +270,10 @@ uint256 CBlock::CheckMerkleBranch(uint256 hash, const std::vector<uint256>& vMer
void CBlock::print() const void CBlock::print() const
{ {
LogPrintf("CBlock(hash=%s, ver=%d, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%"PRIszu")\n", LogPrintf("CBlock(hash=%s, ver=%d, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%"PRIszu")\n",
GetHash().ToString().c_str(), GetHash().ToString(),
nVersion, nVersion,
hashPrevBlock.ToString().c_str(), hashPrevBlock.ToString(),
hashMerkleRoot.ToString().c_str(), hashMerkleRoot.ToString(),
nTime, nBits, nNonce, nTime, nBits, nNonce,
vtx.size()); vtx.size());
for (unsigned int i = 0; i < vtx.size(); i++) for (unsigned int i = 0; i < vtx.size(); i++)
@ -283,6 +283,6 @@ void CBlock::print() const
} }
LogPrintf(" vMerkleTree: "); LogPrintf(" vMerkleTree: ");
for (unsigned int i = 0; i < vMerkleTree.size(); i++) for (unsigned int i = 0; i < vMerkleTree.size(); i++)
LogPrintf("%s ", vMerkleTree[i].ToString().c_str()); LogPrintf("%s ", vMerkleTree[i].ToString());
LogPrintf("\n"); LogPrintf("\n");
} }

View file

@ -75,7 +75,7 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn)
filesystem::path pathLogDir = path / "database"; filesystem::path pathLogDir = path / "database";
filesystem::create_directory(pathLogDir); filesystem::create_directory(pathLogDir);
filesystem::path pathErrorFile = path / "db.log"; filesystem::path pathErrorFile = path / "db.log";
LogPrintf("dbenv.open LogDir=%s ErrorFile=%s\n", pathLogDir.string().c_str(), pathErrorFile.string().c_str()); LogPrintf("dbenv.open LogDir=%s ErrorFile=%s\n", pathLogDir.string(), pathErrorFile.string());
unsigned int nEnvFlags = 0; unsigned int nEnvFlags = 0;
if (GetBoolArg("-privdb", true)) if (GetBoolArg("-privdb", true))
@ -353,7 +353,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
bitdb.mapFileUseCount.erase(strFile); bitdb.mapFileUseCount.erase(strFile);
bool fSuccess = true; bool fSuccess = true;
LogPrintf("Rewriting %s...\n", strFile.c_str()); LogPrintf("Rewriting %s...\n", strFile);
string strFileRes = strFile + ".rewrite"; string strFileRes = strFile + ".rewrite";
{ // surround usage of db with extra {} { // surround usage of db with extra {}
CDB db(strFile.c_str(), "r"); CDB db(strFile.c_str(), "r");
@ -367,7 +367,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
0); 0);
if (ret > 0) if (ret > 0)
{ {
LogPrintf("Cannot create database file %s\n", strFileRes.c_str()); LogPrintf("Cannot create database file %s\n", strFileRes);
fSuccess = false; fSuccess = false;
} }
@ -423,7 +423,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
fSuccess = false; fSuccess = false;
} }
if (!fSuccess) if (!fSuccess)
LogPrintf("Rewriting of %s FAILED!\n", strFileRes.c_str()); LogPrintf("Rewriting of %s FAILED!\n", strFileRes);
return fSuccess; return fSuccess;
} }
} }
@ -448,17 +448,17 @@ void CDBEnv::Flush(bool fShutdown)
{ {
string strFile = (*mi).first; string strFile = (*mi).first;
int nRefCount = (*mi).second; int nRefCount = (*mi).second;
LogPrint("db", "%s refcount=%d\n", strFile.c_str(), nRefCount); LogPrint("db", "%s refcount=%d\n", strFile, nRefCount);
if (nRefCount == 0) if (nRefCount == 0)
{ {
// Move log data to the dat file // Move log data to the dat file
CloseDb(strFile); CloseDb(strFile);
LogPrint("db", "%s checkpoint\n", strFile.c_str()); LogPrint("db", "%s checkpoint\n", strFile);
dbenv.txn_checkpoint(0, 0, 0); dbenv.txn_checkpoint(0, 0, 0);
LogPrint("db", "%s detach\n", strFile.c_str()); LogPrint("db", "%s detach\n", strFile);
if (!fMockDb) if (!fMockDb)
dbenv.lsn_reset(strFile.c_str(), 0); dbenv.lsn_reset(strFile.c_str(), 0);
LogPrint("db", "%s closed\n", strFile.c_str()); LogPrint("db", "%s closed\n", strFile);
mapFileUseCount.erase(mi++); mapFileUseCount.erase(mi++);
} }
else else

View file

@ -344,7 +344,7 @@ void ThreadImport(std::vector<boost::filesystem::path> vImportFiles)
FILE *file = fopen(path.string().c_str(), "rb"); FILE *file = fopen(path.string().c_str(), "rb");
if (file) { if (file) {
CImportingNow imp; CImportingNow imp;
LogPrintf("Importing %s...\n", path.string().c_str()); LogPrintf("Importing %s...\n", path.string());
LoadExternalBlockFile(file); LoadExternalBlockFile(file);
} }
} }
@ -512,7 +512,7 @@ bool AppInit2(boost::thread_group& threadGroup)
if (ParseMoney(mapArgs["-mintxfee"], n) && n > 0) if (ParseMoney(mapArgs["-mintxfee"], n) && n > 0)
CTransaction::nMinTxFee = n; CTransaction::nMinTxFee = n;
else else
return InitError(strprintf(_("Invalid amount for -mintxfee=<amount>: '%s'"), mapArgs["-mintxfee"].c_str())); return InitError(strprintf(_("Invalid amount for -mintxfee=<amount>: '%s'"), mapArgs["-mintxfee"]));
} }
if (mapArgs.count("-minrelaytxfee")) if (mapArgs.count("-minrelaytxfee"))
{ {
@ -520,14 +520,14 @@ bool AppInit2(boost::thread_group& threadGroup)
if (ParseMoney(mapArgs["-minrelaytxfee"], n) && n > 0) if (ParseMoney(mapArgs["-minrelaytxfee"], n) && n > 0)
CTransaction::nMinRelayTxFee = n; CTransaction::nMinRelayTxFee = n;
else else
return InitError(strprintf(_("Invalid amount for -minrelaytxfee=<amount>: '%s'"), mapArgs["-minrelaytxfee"].c_str())); return InitError(strprintf(_("Invalid amount for -minrelaytxfee=<amount>: '%s'"), mapArgs["-minrelaytxfee"]));
} }
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET
if (mapArgs.count("-paytxfee")) if (mapArgs.count("-paytxfee"))
{ {
if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee)) if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee))
return InitError(strprintf(_("Invalid amount for -paytxfee=<amount>: '%s'"), mapArgs["-paytxfee"].c_str())); return InitError(strprintf(_("Invalid amount for -paytxfee=<amount>: '%s'"), mapArgs["-paytxfee"]));
if (nTransactionFee > 0.25 * COIN) if (nTransactionFee > 0.25 * COIN)
InitWarning(_("Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction.")); InitWarning(_("Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction."));
} }
@ -540,7 +540,7 @@ bool AppInit2(boost::thread_group& threadGroup)
#ifdef ENABLE_WALLET #ifdef ENABLE_WALLET
// Wallet file must be a plain filename without a directory // Wallet file must be a plain filename without a directory
if (strWalletFile != boost::filesystem::basename(strWalletFile) + boost::filesystem::extension(strWalletFile)) if (strWalletFile != boost::filesystem::basename(strWalletFile) + boost::filesystem::extension(strWalletFile))
return InitError(strprintf(_("Wallet %s resides outside data directory %s"), strWalletFile.c_str(), strDataDir.c_str())); return InitError(strprintf(_("Wallet %s resides outside data directory %s"), strWalletFile, strDataDir));
#endif #endif
// Make sure only a single Bitcoin process is using the data directory. // Make sure only a single Bitcoin process is using the data directory.
boost::filesystem::path pathLockFile = GetDataDir() / ".lock"; boost::filesystem::path pathLockFile = GetDataDir() / ".lock";
@ -548,17 +548,17 @@ bool AppInit2(boost::thread_group& threadGroup)
if (file) fclose(file); if (file) fclose(file);
static boost::interprocess::file_lock lock(pathLockFile.string().c_str()); static boost::interprocess::file_lock lock(pathLockFile.string().c_str());
if (!lock.try_lock()) if (!lock.try_lock())
return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin is probably already running."), strDataDir.c_str())); return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Bitcoin is probably already running."), strDataDir));
if (GetBoolArg("-shrinkdebugfile", !fDebug)) if (GetBoolArg("-shrinkdebugfile", !fDebug))
ShrinkDebugFile(); ShrinkDebugFile();
LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
LogPrintf("Bitcoin version %s (%s)\n", FormatFullVersion().c_str(), CLIENT_DATE.c_str()); LogPrintf("Bitcoin version %s (%s)\n", FormatFullVersion(), CLIENT_DATE);
LogPrintf("Using OpenSSL version %s\n", SSLeay_version(SSLEAY_VERSION)); LogPrintf("Using OpenSSL version %s\n", SSLeay_version(SSLEAY_VERSION));
if (!fLogTimestamps) if (!fLogTimestamps)
LogPrintf("Startup time: %s\n", DateTimeStrFormat("%Y-%m-%d %H:%M:%S", GetTime()).c_str()); LogPrintf("Startup time: %s\n", DateTimeStrFormat("%Y-%m-%d %H:%M:%S", GetTime()));
LogPrintf("Default data directory %s\n", GetDefaultDataDir().string().c_str()); LogPrintf("Default data directory %s\n", GetDefaultDataDir().string());
LogPrintf("Using data directory %s\n", strDataDir.c_str()); LogPrintf("Using data directory %s\n", strDataDir);
LogPrintf("Using at most %i connections (%i file descriptors available)\n", nMaxConnections, nFD); LogPrintf("Using at most %i connections (%i file descriptors available)\n", nMaxConnections, nFD);
std::ostringstream strErrors; std::ostringstream strErrors;
@ -582,7 +582,7 @@ bool AppInit2(boost::thread_group& threadGroup)
boost::filesystem::path pathDatabaseBak = GetDataDir() / strprintf("database.%"PRId64".bak", GetTime()); boost::filesystem::path pathDatabaseBak = GetDataDir() / strprintf("database.%"PRId64".bak", GetTime());
try { try {
boost::filesystem::rename(pathDatabase, pathDatabaseBak); boost::filesystem::rename(pathDatabase, pathDatabaseBak);
LogPrintf("Moved old %s to %s. Retrying.\n", pathDatabase.string().c_str(), pathDatabaseBak.string().c_str()); LogPrintf("Moved old %s to %s. Retrying.\n", pathDatabase.string(), pathDatabaseBak.string());
} catch(boost::filesystem::filesystem_error &error) { } catch(boost::filesystem::filesystem_error &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)
} }
@ -590,7 +590,7 @@ bool AppInit2(boost::thread_group& threadGroup)
// try again // try again
if (!bitdb.Open(GetDataDir())) { if (!bitdb.Open(GetDataDir())) {
// if it still fails, it probably means we can't even create the database env // if it still fails, it probably means we can't even create the database env
string msg = strprintf(_("Error initializing wallet database environment %s!"), strDataDir.c_str()); string msg = strprintf(_("Error initializing wallet database environment %s!"), strDataDir);
return InitError(msg); return InitError(msg);
} }
} }
@ -610,7 +610,7 @@ bool AppInit2(boost::thread_group& threadGroup)
string msg = strprintf(_("Warning: wallet.dat corrupt, data salvaged!" string msg = strprintf(_("Warning: wallet.dat corrupt, data salvaged!"
" Original wallet.dat saved as wallet.{timestamp}.bak in %s; if" " Original wallet.dat saved as wallet.{timestamp}.bak in %s; if"
" your balance or transactions are incorrect you should" " your balance or transactions are incorrect you should"
" restore from a backup."), strDataDir.c_str()); " restore from a backup."), strDataDir);
InitWarning(msg); InitWarning(msg);
} }
if (r == CDBEnv::RECOVER_FAIL) if (r == CDBEnv::RECOVER_FAIL)
@ -631,7 +631,7 @@ bool AppInit2(boost::thread_group& threadGroup)
BOOST_FOREACH(std::string snet, mapMultiArgs["-onlynet"]) { BOOST_FOREACH(std::string snet, mapMultiArgs["-onlynet"]) {
enum Network net = ParseNetwork(snet); enum Network net = ParseNetwork(snet);
if (net == NET_UNROUTABLE) if (net == NET_UNROUTABLE)
return InitError(strprintf(_("Unknown network specified in -onlynet: '%s'"), snet.c_str())); return InitError(strprintf(_("Unknown network specified in -onlynet: '%s'"), snet));
nets.insert(net); nets.insert(net);
} }
for (int n = 0; n < NET_MAX; n++) { for (int n = 0; n < NET_MAX; n++) {
@ -652,7 +652,7 @@ bool AppInit2(boost::thread_group& threadGroup)
if (mapArgs.count("-proxy")) { if (mapArgs.count("-proxy")) {
addrProxy = CService(mapArgs["-proxy"], 9050); addrProxy = CService(mapArgs["-proxy"], 9050);
if (!addrProxy.IsValid()) if (!addrProxy.IsValid())
return InitError(strprintf(_("Invalid -proxy address: '%s'"), mapArgs["-proxy"].c_str())); return InitError(strprintf(_("Invalid -proxy address: '%s'"), mapArgs["-proxy"]));
if (!IsLimited(NET_IPV4)) if (!IsLimited(NET_IPV4))
SetProxy(NET_IPV4, addrProxy, nSocksVersion); SetProxy(NET_IPV4, addrProxy, nSocksVersion);
@ -679,7 +679,7 @@ bool AppInit2(boost::thread_group& threadGroup)
else else
addrOnion = mapArgs.count("-onion")?CService(mapArgs["-onion"], 9050):CService(mapArgs["-tor"], 9050); addrOnion = mapArgs.count("-onion")?CService(mapArgs["-onion"], 9050):CService(mapArgs["-tor"], 9050);
if (!addrOnion.IsValid()) if (!addrOnion.IsValid())
return InitError(strprintf(_("Invalid -onion address: '%s'"), mapArgs.count("-onion")?mapArgs["-onion"].c_str():mapArgs["-tor"].c_str())); return InitError(strprintf(_("Invalid -onion address: '%s'"), mapArgs.count("-onion")?mapArgs["-onion"]:mapArgs["-tor"]));
SetProxy(NET_TOR, addrOnion, 5); SetProxy(NET_TOR, addrOnion, 5);
SetReachable(NET_TOR); SetReachable(NET_TOR);
} }
@ -695,7 +695,7 @@ bool AppInit2(boost::thread_group& threadGroup)
BOOST_FOREACH(std::string strBind, mapMultiArgs["-bind"]) { BOOST_FOREACH(std::string strBind, mapMultiArgs["-bind"]) {
CService addrBind; CService addrBind;
if (!Lookup(strBind.c_str(), addrBind, GetListenPort(), false)) if (!Lookup(strBind.c_str(), addrBind, GetListenPort(), false))
return InitError(strprintf(_("Cannot resolve -bind address: '%s'"), strBind.c_str())); return InitError(strprintf(_("Cannot resolve -bind address: '%s'"), strBind));
fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR)); fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR));
} }
} }
@ -715,7 +715,7 @@ bool AppInit2(boost::thread_group& threadGroup)
BOOST_FOREACH(string strAddr, mapMultiArgs["-externalip"]) { BOOST_FOREACH(string strAddr, mapMultiArgs["-externalip"]) {
CService addrLocal(strAddr, GetListenPort(), fNameLookup); CService addrLocal(strAddr, GetListenPort(), fNameLookup);
if (!addrLocal.IsValid()) if (!addrLocal.IsValid())
return InitError(strprintf(_("Cannot resolve -externalip address: '%s'"), strAddr.c_str())); return InitError(strprintf(_("Cannot resolve -externalip address: '%s'"), strAddr));
AddLocal(CService(strAddr, GetListenPort(), fNameLookup), LOCAL_MANUAL); AddLocal(CService(strAddr, GetListenPort(), fNameLookup), LOCAL_MANUAL);
} }
} }
@ -739,7 +739,7 @@ bool AppInit2(boost::thread_group& threadGroup)
filesystem::path dest = blocksDir / strprintf("blk%05u.dat", i-1); filesystem::path dest = blocksDir / strprintf("blk%05u.dat", i-1);
try { try {
filesystem::create_hard_link(source, dest); filesystem::create_hard_link(source, dest);
LogPrintf("Hardlinked %s -> %s\n", source.string().c_str(), dest.string().c_str()); LogPrintf("Hardlinked %s -> %s\n", source.string(), dest.string());
linked = true; linked = true;
} catch (filesystem::filesystem_error & e) { } catch (filesystem::filesystem_error & e) {
// Note: hardlink creation failing is not a disaster, it just means // Note: hardlink creation failing is not a disaster, it just means
@ -879,7 +879,7 @@ bool AppInit2(boost::thread_group& threadGroup)
} }
} }
if (nFound == 0) if (nFound == 0)
LogPrintf("No blocks matching %s were found\n", strMatch.c_str()); LogPrintf("No blocks matching %s were found\n", strMatch);
return false; return false;
} }
@ -910,7 +910,7 @@ bool AppInit2(boost::thread_group& threadGroup)
else if (nLoadWalletRet == DB_NEED_REWRITE) else if (nLoadWalletRet == DB_NEED_REWRITE)
{ {
strErrors << _("Wallet needed to be rewritten: restart Bitcoin to complete") << "\n"; strErrors << _("Wallet needed to be rewritten: restart Bitcoin to complete") << "\n";
LogPrintf("%s", strErrors.str().c_str()); LogPrintf("%s", strErrors.str());
return InitError(strErrors.str()); return InitError(strErrors.str());
} }
else else
@ -948,7 +948,7 @@ bool AppInit2(boost::thread_group& threadGroup)
pwalletMain->SetBestChain(chainActive.GetLocator()); pwalletMain->SetBestChain(chainActive.GetLocator());
} }
LogPrintf("%s", strErrors.str().c_str()); LogPrintf("%s", strErrors.str());
LogPrintf(" wallet %15"PRId64"ms\n", GetTimeMillis() - nStart); LogPrintf(" wallet %15"PRId64"ms\n", GetTimeMillis() - nStart);
RegisterWallet(pwalletMain); RegisterWallet(pwalletMain);

View file

@ -15,7 +15,7 @@
void HandleError(const leveldb::Status &status) throw(leveldb_error) { void HandleError(const leveldb::Status &status) throw(leveldb_error) {
if (status.ok()) if (status.ok())
return; return;
LogPrintf("%s\n", status.ToString().c_str()); LogPrintf("%s\n", status.ToString());
if (status.IsCorruption()) if (status.IsCorruption())
throw leveldb_error("Database corrupted"); throw leveldb_error("Database corrupted");
if (status.IsIOError()) if (status.IsIOError())
@ -48,11 +48,11 @@ CLevelDBWrapper::CLevelDBWrapper(const boost::filesystem::path &path, size_t nCa
options.env = penv; options.env = penv;
} else { } else {
if (fWipe) { if (fWipe) {
LogPrintf("Wiping LevelDB in %s\n", path.string().c_str()); LogPrintf("Wiping LevelDB in %s\n", path.string());
leveldb::DestroyDB(path.string(), options); leveldb::DestroyDB(path.string(), options);
} }
boost::filesystem::create_directory(path); boost::filesystem::create_directory(path);
LogPrintf("Opening LevelDB in %s\n", path.string().c_str()); LogPrintf("Opening LevelDB in %s\n", path.string());
} }
leveldb::Status status = leveldb::DB::Open(options, path.string(), &pdb); leveldb::Status status = leveldb::DB::Open(options, path.string(), &pdb);
HandleError(status); HandleError(status);

View file

@ -309,7 +309,7 @@ bool AddOrphanTx(const CTransaction& tx)
unsigned int sz = tx.GetSerializeSize(SER_NETWORK, CTransaction::CURRENT_VERSION); unsigned int sz = tx.GetSerializeSize(SER_NETWORK, CTransaction::CURRENT_VERSION);
if (sz > 5000) if (sz > 5000)
{ {
LogPrint("mempool", "ignoring large orphan tx (size: %u, hash: %s)\n", sz, hash.ToString().c_str()); LogPrint("mempool", "ignoring large orphan tx (size: %u, hash: %s)\n", sz, hash.ToString());
return false; return false;
} }
@ -317,7 +317,7 @@ bool AddOrphanTx(const CTransaction& tx)
BOOST_FOREACH(const CTxIn& txin, tx.vin) BOOST_FOREACH(const CTxIn& txin, tx.vin)
mapOrphanTransactionsByPrev[txin.prevout.hash].insert(hash); mapOrphanTransactionsByPrev[txin.prevout.hash].insert(hash);
LogPrint("mempool", "stored orphan tx %s (mapsz %"PRIszu")\n", hash.ToString().c_str(), LogPrint("mempool", "stored orphan tx %s (mapsz %"PRIszu")\n", hash.ToString(),
mapOrphanTransactions.size()); mapOrphanTransactions.size());
return true; return true;
} }
@ -693,7 +693,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
string reason; string reason;
if (Params().NetworkID() == CChainParams::MAIN && !IsStandardTx(tx, reason)) if (Params().NetworkID() == CChainParams::MAIN && !IsStandardTx(tx, reason))
return state.DoS(0, return state.DoS(0,
error("AcceptToMemoryPool : nonstandard transaction: %s", reason.c_str()), error("AcceptToMemoryPool : nonstandard transaction: %s", reason),
REJECT_NONSTANDARD, reason); REJECT_NONSTANDARD, reason);
// is it already in the memory pool? // is it already in the memory pool?
@ -771,7 +771,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
int64_t txMinFee = GetMinFee(tx, nSize, true, GMF_RELAY); int64_t txMinFee = GetMinFee(tx, nSize, true, GMF_RELAY);
if (fLimitFree && nFees < txMinFee) if (fLimitFree && nFees < txMinFee)
return state.DoS(0, error("AcceptToMemoryPool : not enough fees %s, %"PRId64" < %"PRId64, return state.DoS(0, error("AcceptToMemoryPool : not enough fees %s, %"PRId64" < %"PRId64,
hash.ToString().c_str(), nFees, txMinFee), hash.ToString(), nFees, txMinFee),
REJECT_INSUFFICIENTFEE, "insufficient fee"); REJECT_INSUFFICIENTFEE, "insufficient fee");
// Continuously rate-limit free transactions // Continuously rate-limit free transactions
@ -800,14 +800,14 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
if (fRejectInsaneFee && nFees > CTransaction::nMinRelayTxFee * 10000) if (fRejectInsaneFee && nFees > CTransaction::nMinRelayTxFee * 10000)
return error("AcceptToMemoryPool: : insane fees %s, %"PRId64" > %"PRId64, return error("AcceptToMemoryPool: : insane fees %s, %"PRId64" > %"PRId64,
hash.ToString().c_str(), hash.ToString(),
nFees, CTransaction::nMinRelayTxFee * 10000); nFees, CTransaction::nMinRelayTxFee * 10000);
// Check against previous transactions // Check against previous transactions
// This is done last to help prevent CPU exhaustion denial-of-service attacks. // This is done last to help prevent CPU exhaustion denial-of-service attacks.
if (!CheckInputs(tx, state, view, true, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC)) if (!CheckInputs(tx, state, view, true, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC))
{ {
return error("AcceptToMemoryPool: : ConnectInputs failed %s", hash.ToString().c_str()); return error("AcceptToMemoryPool: : ConnectInputs failed %s", hash.ToString());
} }
// Store transaction in memory // Store transaction in memory
pool.addUnchecked(hash, entry); pool.addUnchecked(hash, entry);
@ -1101,8 +1101,8 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead
/// debug print /// debug print
LogPrintf("GetNextWorkRequired RETARGET\n"); LogPrintf("GetNextWorkRequired RETARGET\n");
LogPrintf("nTargetTimespan = %"PRId64" nActualTimespan = %"PRId64"\n", nTargetTimespan, nActualTimespan); LogPrintf("nTargetTimespan = %"PRId64" nActualTimespan = %"PRId64"\n", nTargetTimespan, nActualTimespan);
LogPrintf("Before: %08x %s\n", pindexLast->nBits, CBigNum().SetCompact(pindexLast->nBits).getuint256().ToString().c_str()); LogPrintf("Before: %08x %s\n", pindexLast->nBits, CBigNum().SetCompact(pindexLast->nBits).getuint256().ToString());
LogPrintf("After: %08x %s\n", bnNew.GetCompact(), bnNew.getuint256().ToString().c_str()); LogPrintf("After: %08x %s\n", bnNew.GetCompact(), bnNew.getuint256().ToString());
return bnNew.GetCompact(); return bnNew.GetCompact();
} }
@ -1176,8 +1176,8 @@ void CheckForkWarningConditions()
if (pindexBestForkTip) if (pindexBestForkTip)
{ {
LogPrintf("CheckForkWarningConditions: Warning: Large valid fork found\n forking the chain at height %d (%s)\n lasting to height %d (%s).\nChain state database corruption likely.\n", LogPrintf("CheckForkWarningConditions: Warning: Large valid fork found\n forking the chain at height %d (%s)\n lasting to height %d (%s).\nChain state database corruption likely.\n",
pindexBestForkBase->nHeight, pindexBestForkBase->phashBlock->ToString().c_str(), pindexBestForkBase->nHeight, pindexBestForkBase->phashBlock->ToString(),
pindexBestForkTip->nHeight, pindexBestForkTip->phashBlock->ToString().c_str()); pindexBestForkTip->nHeight, pindexBestForkTip->phashBlock->ToString());
fLargeWorkForkFound = true; fLargeWorkForkFound = true;
} }
else else
@ -1237,12 +1237,12 @@ void static InvalidChainFound(CBlockIndex* pindexNew)
uiInterface.NotifyBlocksChanged(); uiInterface.NotifyBlocksChanged();
} }
LogPrintf("InvalidChainFound: invalid block=%s height=%d log2_work=%.8g date=%s\n", LogPrintf("InvalidChainFound: invalid block=%s height=%d log2_work=%.8g date=%s\n",
pindexNew->GetBlockHash().ToString().c_str(), pindexNew->nHeight, pindexNew->GetBlockHash().ToString(), pindexNew->nHeight,
log(pindexNew->nChainWork.getdouble())/log(2.0), DateTimeStrFormat("%Y-%m-%d %H:%M:%S", log(pindexNew->nChainWork.getdouble())/log(2.0), DateTimeStrFormat("%Y-%m-%d %H:%M:%S",
pindexNew->GetBlockTime()).c_str()); pindexNew->GetBlockTime()));
LogPrintf("InvalidChainFound: current best=%s height=%d log2_work=%.8g date=%s\n", LogPrintf("InvalidChainFound: current best=%s height=%d log2_work=%.8g date=%s\n",
chainActive.Tip()->GetBlockHash().ToString().c_str(), chainActive.Height(), log(chainActive.Tip()->nChainWork.getdouble())/log(2.0), chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(), log(chainActive.Tip()->nChainWork.getdouble())/log(2.0),
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()).c_str()); DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()));
CheckForkWarningConditions(); CheckForkWarningConditions();
} }
@ -1350,7 +1350,7 @@ void UpdateCoins(const CTransaction& tx, CValidationState &state, CCoinsViewCach
bool CScriptCheck::operator()() const { bool CScriptCheck::operator()() const {
const CScript &scriptSig = ptxTo->vin[nIn].scriptSig; const CScript &scriptSig = ptxTo->vin[nIn].scriptSig;
if (!VerifyScript(scriptSig, scriptPubKey, *ptxTo, nIn, nFlags, nHashType)) if (!VerifyScript(scriptSig, scriptPubKey, *ptxTo, nIn, nFlags, nHashType))
return error("CScriptCheck() : %s VerifySignature failed", ptxTo->GetHash().ToString().c_str()); return error("CScriptCheck() : %s VerifySignature failed", ptxTo->GetHash().ToString());
return true; return true;
} }
@ -1369,7 +1369,7 @@ bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCach
// This doesn't trigger the DoS code on purpose; if it did, it would make it easier // This doesn't trigger the DoS code on purpose; if it did, it would make it easier
// for an attacker to attempt to split the network. // for an attacker to attempt to split the network.
if (!inputs.HaveInputs(tx)) if (!inputs.HaveInputs(tx))
return state.Invalid(error("CheckInputs() : %s inputs unavailable", tx.GetHash().ToString().c_str())); return state.Invalid(error("CheckInputs() : %s inputs unavailable", tx.GetHash().ToString()));
// While checking, GetBestBlock() refers to the parent block. // While checking, GetBestBlock() refers to the parent block.
// This is also true for mempool checks. // This is also true for mempool checks.
@ -1399,13 +1399,13 @@ bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCach
} }
if (nValueIn < tx.GetValueOut()) if (nValueIn < tx.GetValueOut())
return state.DoS(100, error("CheckInputs() : %s value in < value out", tx.GetHash().ToString().c_str()), return state.DoS(100, error("CheckInputs() : %s value in < value out", tx.GetHash().ToString()),
REJECT_INVALID, "in < out"); REJECT_INVALID, "in < out");
// Tally transaction fees // Tally transaction fees
int64_t nTxFee = nValueIn - tx.GetValueOut(); int64_t nTxFee = nValueIn - tx.GetValueOut();
if (nTxFee < 0) if (nTxFee < 0)
return state.DoS(100, error("CheckInputs() : %s nTxFee < 0", tx.GetHash().ToString().c_str()), return state.DoS(100, error("CheckInputs() : %s nTxFee < 0", tx.GetHash().ToString()),
REJECT_INVALID, "fee < 0"); REJECT_INVALID, "fee < 0");
nFees += nTxFee; nFees += nTxFee;
if (!MoneyRange(nFees)) if (!MoneyRange(nFees))
@ -1766,8 +1766,8 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
reverse(vConnect.begin(), vConnect.end()); reverse(vConnect.begin(), vConnect.end());
if (vDisconnect.size() > 0) { if (vDisconnect.size() > 0) {
LogPrintf("REORGANIZE: Disconnect %"PRIszu" blocks; %s...\n", vDisconnect.size(), pfork->GetBlockHash().ToString().c_str()); LogPrintf("REORGANIZE: Disconnect %"PRIszu" blocks; %s...\n", vDisconnect.size(), pfork->GetBlockHash().ToString());
LogPrintf("REORGANIZE: Connect %"PRIszu" blocks; ...%s\n", vConnect.size(), pindexNew->GetBlockHash().ToString().c_str()); LogPrintf("REORGANIZE: Connect %"PRIszu" blocks; ...%s\n", vConnect.size(), pindexNew->GetBlockHash().ToString());
} }
// Disconnect shorter branch // Disconnect shorter branch
@ -1778,7 +1778,7 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
return state.Abort(_("Failed to read block")); return state.Abort(_("Failed to read block"));
int64_t nStart = GetTimeMicros(); int64_t nStart = GetTimeMicros();
if (!DisconnectBlock(block, state, pindex, view)) if (!DisconnectBlock(block, state, pindex, view))
return error("SetBestBlock() : DisconnectBlock %s failed", pindex->GetBlockHash().ToString().c_str()); return error("SetBestBlock() : DisconnectBlock %s failed", pindex->GetBlockHash().ToString());
if (fBenchmark) if (fBenchmark)
LogPrintf("- Disconnect: %.2fms\n", (GetTimeMicros() - nStart) * 0.001); LogPrintf("- Disconnect: %.2fms\n", (GetTimeMicros() - nStart) * 0.001);
@ -1802,7 +1802,7 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
InvalidChainFound(pindexNew); InvalidChainFound(pindexNew);
InvalidBlockFound(pindex); InvalidBlockFound(pindex);
} }
return error("SetBestBlock() : ConnectBlock %s failed", pindex->GetBlockHash().ToString().c_str()); return error("SetBestBlock() : ConnectBlock %s failed", pindex->GetBlockHash().ToString());
} }
if (fBenchmark) if (fBenchmark)
LogPrintf("- Connect: %.2fms\n", (GetTimeMicros() - nStart) * 0.001); LogPrintf("- Connect: %.2fms\n", (GetTimeMicros() - nStart) * 0.001);
@ -1868,8 +1868,8 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
nTimeBestReceived = GetTime(); nTimeBestReceived = GetTime();
mempool.AddTransactionsUpdated(1); mempool.AddTransactionsUpdated(1);
LogPrintf("SetBestChain: new best=%s height=%d log2_work=%.8g tx=%lu date=%s progress=%f\n", LogPrintf("SetBestChain: new best=%s height=%d log2_work=%.8g tx=%lu date=%s progress=%f\n",
chainActive.Tip()->GetBlockHash().ToString().c_str(), chainActive.Height(), log(chainActive.Tip()->nChainWork.getdouble())/log(2.0), (unsigned long)pindexNew->nChainTx, chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(), log(chainActive.Tip()->nChainWork.getdouble())/log(2.0), (unsigned long)pindexNew->nChainTx,
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()).c_str(), DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()),
Checkpoints::GuessVerificationProgress(chainActive.Tip())); Checkpoints::GuessVerificationProgress(chainActive.Tip()));
// Check the version of the last 100 blocks to see if we need to upgrade: // Check the version of the last 100 blocks to see if we need to upgrade:
@ -1884,7 +1884,7 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
pindex = pindex->pprev; pindex = pindex->pprev;
} }
if (nUpgraded > 0) if (nUpgraded > 0)
LogPrintf("SetBestChain: %d of last 100 blocks above version %d\n", nUpgraded, CBlock::CURRENT_VERSION); LogPrintf("SetBestChain: %d of last 100 blocks above version %d\n", nUpgraded, (int)CBlock::CURRENT_VERSION);
if (nUpgraded > 100/2) if (nUpgraded > 100/2)
// strMiscWarning is read by GetWarnings(), called by Qt and the JSON-RPC code to warn the user: // strMiscWarning is read by GetWarnings(), called by Qt and the JSON-RPC code to warn the user:
strMiscWarning = _("Warning: This version is obsolete, upgrade required!"); strMiscWarning = _("Warning: This version is obsolete, upgrade required!");
@ -1907,7 +1907,7 @@ bool AddToBlockIndex(CBlock& block, CValidationState& state, const CDiskBlockPos
// Check for duplicate // Check for duplicate
uint256 hash = block.GetHash(); uint256 hash = block.GetHash();
if (mapBlockIndex.count(hash)) if (mapBlockIndex.count(hash))
return state.Invalid(error("AddToBlockIndex() : %s already exists", hash.ToString().c_str())); return state.Invalid(error("AddToBlockIndex() : %s already exists", hash.ToString()));
// Construct new block index object // Construct new block index object
CBlockIndex* pindexNew = new CBlockIndex(block); CBlockIndex* pindexNew = new CBlockIndex(block);
@ -1970,7 +1970,7 @@ bool FindBlockPos(CValidationState &state, CDiskBlockPos &pos, unsigned int nAdd
} }
} else { } else {
while (infoLastBlockFile.nSize + nAddSize >= MAX_BLOCKFILE_SIZE) { while (infoLastBlockFile.nSize + nAddSize >= MAX_BLOCKFILE_SIZE) {
LogPrintf("Leaving block file %i: %s\n", nLastBlockFile, infoLastBlockFile.ToString().c_str()); LogPrintf("Leaving block file %i: %s\n", nLastBlockFile, infoLastBlockFile.ToString());
FlushBlockFile(true); FlushBlockFile(true);
nLastBlockFile++; nLastBlockFile++;
infoLastBlockFile.SetNull(); infoLastBlockFile.SetNull();
@ -2252,9 +2252,9 @@ bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBl
// Check for duplicate // Check for duplicate
uint256 hash = pblock->GetHash(); uint256 hash = pblock->GetHash();
if (mapBlockIndex.count(hash)) if (mapBlockIndex.count(hash))
return state.Invalid(error("ProcessBlock() : already have block %d %s", mapBlockIndex[hash]->nHeight, hash.ToString().c_str())); return state.Invalid(error("ProcessBlock() : already have block %d %s", mapBlockIndex[hash]->nHeight, hash.ToString()));
if (mapOrphanBlocks.count(hash)) if (mapOrphanBlocks.count(hash))
return state.Invalid(error("ProcessBlock() : already have block (orphan) %s", hash.ToString().c_str())); return state.Invalid(error("ProcessBlock() : already have block (orphan) %s", hash.ToString()));
// Preliminary checks // Preliminary checks
if (!CheckBlock(*pblock, state)) if (!CheckBlock(*pblock, state))
@ -2285,7 +2285,7 @@ bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBl
// If we don't already have its previous block, shunt it off to holding area until we get it // If we don't already have its previous block, shunt it off to holding area until we get it
if (pblock->hashPrevBlock != 0 && !mapBlockIndex.count(pblock->hashPrevBlock)) if (pblock->hashPrevBlock != 0 && !mapBlockIndex.count(pblock->hashPrevBlock))
{ {
LogPrintf("ProcessBlock: ORPHAN BLOCK, prev=%s\n", pblock->hashPrevBlock.ToString().c_str()); LogPrintf("ProcessBlock: ORPHAN BLOCK, prev=%s\n", pblock->hashPrevBlock.ToString());
// Accept orphans as long as there is a node to request its parents from // Accept orphans as long as there is a node to request its parents from
if (pfrom) { if (pfrom) {
@ -2502,7 +2502,7 @@ uint256 CPartialMerkleTree::ExtractMatches(std::vector<uint256> &vMatch) {
bool AbortNode(const std::string &strMessage) { bool AbortNode(const std::string &strMessage) {
strMiscWarning = strMessage; strMiscWarning = strMessage;
LogPrintf("*** %s\n", strMessage.c_str()); LogPrintf("*** %s\n", strMessage);
uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_ERROR); uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_ERROR);
StartShutdown(); StartShutdown();
return false; return false;
@ -2529,12 +2529,12 @@ FILE* OpenDiskFile(const CDiskBlockPos &pos, const char *prefix, bool fReadOnly)
if (!file && !fReadOnly) if (!file && !fReadOnly)
file = fopen(path.string().c_str(), "wb+"); file = fopen(path.string().c_str(), "wb+");
if (!file) { if (!file) {
LogPrintf("Unable to open file %s\n", path.string().c_str()); LogPrintf("Unable to open file %s\n", path.string());
return NULL; return NULL;
} }
if (pos.nPos) { if (pos.nPos) {
if (fseek(file, pos.nPos, SEEK_SET)) { if (fseek(file, pos.nPos, SEEK_SET)) {
LogPrintf("Unable to seek to position %u of %s\n", pos.nPos, path.string().c_str()); LogPrintf("Unable to seek to position %u of %s\n", pos.nPos, path.string());
fclose(file); fclose(file);
return NULL; return NULL;
} }
@ -2601,7 +2601,7 @@ bool static LoadBlockIndexDB()
pblocktree->ReadLastBlockFile(nLastBlockFile); pblocktree->ReadLastBlockFile(nLastBlockFile);
LogPrintf("LoadBlockIndexDB(): last block file = %i\n", nLastBlockFile); LogPrintf("LoadBlockIndexDB(): last block file = %i\n", nLastBlockFile);
if (pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile)) if (pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile))
LogPrintf("LoadBlockIndexDB(): last block file info: %s\n", infoLastBlockFile.ToString().c_str()); LogPrintf("LoadBlockIndexDB(): last block file info: %s\n", infoLastBlockFile.ToString());
// Check whether we need to continue reindexing // Check whether we need to continue reindexing
bool fReindexing = false; bool fReindexing = false;
@ -2618,8 +2618,8 @@ bool static LoadBlockIndexDB()
return true; return true;
chainActive.SetTip(it->second); chainActive.SetTip(it->second);
LogPrintf("LoadBlockIndexDB(): hashBestChain=%s height=%d date=%s\n", LogPrintf("LoadBlockIndexDB(): hashBestChain=%s height=%d date=%s\n",
chainActive.Tip()->GetBlockHash().ToString().c_str(), chainActive.Height(), chainActive.Tip()->GetBlockHash().ToString(), chainActive.Height(),
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()).c_str()); DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()));
return true; return true;
} }
@ -2649,24 +2649,24 @@ bool VerifyDB(int nCheckLevel, int nCheckDepth)
CBlock block; CBlock block;
// check level 0: read from disk // check level 0: read from disk
if (!ReadBlockFromDisk(block, pindex)) if (!ReadBlockFromDisk(block, pindex))
return error("VerifyDB() : *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); return error("VerifyDB() : *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
// check level 1: verify block validity // check level 1: verify block validity
if (nCheckLevel >= 1 && !CheckBlock(block, state)) if (nCheckLevel >= 1 && !CheckBlock(block, state))
return error("VerifyDB() : *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); return error("VerifyDB() : *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
// check level 2: verify undo validity // check level 2: verify undo validity
if (nCheckLevel >= 2 && pindex) { if (nCheckLevel >= 2 && pindex) {
CBlockUndo undo; CBlockUndo undo;
CDiskBlockPos pos = pindex->GetUndoPos(); CDiskBlockPos pos = pindex->GetUndoPos();
if (!pos.IsNull()) { if (!pos.IsNull()) {
if (!undo.ReadFromDisk(pos, pindex->pprev->GetBlockHash())) if (!undo.ReadFromDisk(pos, pindex->pprev->GetBlockHash()))
return error("VerifyDB() : *** found bad undo data at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); return error("VerifyDB() : *** found bad undo data at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
} }
} }
// check level 3: check for inconsistencies during memory-only disconnect of tip blocks // check level 3: check for inconsistencies during memory-only disconnect of tip blocks
if (nCheckLevel >= 3 && pindex == pindexState && (coins.GetCacheSize() + pcoinsTip->GetCacheSize()) <= 2*nCoinCacheSize + 32000) { if (nCheckLevel >= 3 && pindex == pindexState && (coins.GetCacheSize() + pcoinsTip->GetCacheSize()) <= 2*nCoinCacheSize + 32000) {
bool fClean = true; bool fClean = true;
if (!DisconnectBlock(block, state, pindex, coins, &fClean)) if (!DisconnectBlock(block, state, pindex, coins, &fClean))
return error("VerifyDB() : *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); return error("VerifyDB() : *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
pindexState = pindex->pprev; pindexState = pindex->pprev;
if (!fClean) { if (!fClean) {
nGoodTransactions = 0; nGoodTransactions = 0;
@ -2686,9 +2686,9 @@ bool VerifyDB(int nCheckLevel, int nCheckDepth)
pindex = chainActive.Next(pindex); pindex = chainActive.Next(pindex);
CBlock block; CBlock block;
if (!ReadBlockFromDisk(block, pindex)) if (!ReadBlockFromDisk(block, pindex))
return error("VerifyDB() : *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); return error("VerifyDB() : *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
if (!ConnectBlock(block, state, pindex, coins)) if (!ConnectBlock(block, state, pindex, coins))
return error("VerifyDB() : *** found unconnectable block at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); return error("VerifyDB() : *** found unconnectable block at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
} }
} }
@ -2796,7 +2796,7 @@ void PrintBlockTree()
LogPrintf("%d (blk%05u.dat:0x%x) %s tx %"PRIszu"", LogPrintf("%d (blk%05u.dat:0x%x) %s tx %"PRIszu"",
pindex->nHeight, pindex->nHeight,
pindex->GetBlockPos().nFile, pindex->GetBlockPos().nPos, pindex->GetBlockPos().nFile, pindex->GetBlockPos().nPos,
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", block.GetBlockTime()).c_str(), DateTimeStrFormat("%Y-%m-%d %H:%M:%S", block.GetBlockTime()),
block.vtx.size()); block.vtx.size());
// put the main time-chain first // put the main time-chain first
@ -2999,10 +2999,10 @@ void Misbehaving(NodeId pnode, int howmuch)
state->nMisbehavior += howmuch; state->nMisbehavior += howmuch;
if (state->nMisbehavior >= GetArg("-banscore", 100)) if (state->nMisbehavior >= GetArg("-banscore", 100))
{ {
LogPrintf("Misbehaving: %s (%d -> %d) BAN THRESHOLD EXCEEDED\n", state->name.c_str(), state->nMisbehavior-howmuch, state->nMisbehavior); LogPrintf("Misbehaving: %s (%d -> %d) BAN THRESHOLD EXCEEDED\n", state->name, state->nMisbehavior-howmuch, state->nMisbehavior);
state->fShouldBan = true; state->fShouldBan = true;
} else } else
LogPrintf("Misbehaving: %s (%d -> %d)\n", state->name.c_str(), state->nMisbehavior-howmuch, state->nMisbehavior); LogPrintf("Misbehaving: %s (%d -> %d)\n", state->name, state->nMisbehavior-howmuch, state->nMisbehavior);
} }
void static ProcessGetData(CNode* pfrom) void static ProcessGetData(CNode* pfrom)
@ -3120,7 +3120,7 @@ void static ProcessGetData(CNode* pfrom)
bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
{ {
RandAddSeedPerfmon(); RandAddSeedPerfmon();
LogPrint("net", "received: %s (%"PRIszu" bytes)\n", strCommand.c_str(), vRecv.size()); LogPrint("net", "received: %s (%"PRIszu" bytes)\n", strCommand, vRecv.size());
if (mapArgs.count("-dropmessagestest") && GetRand(atoi(mapArgs["-dropmessagestest"])) == 0) if (mapArgs.count("-dropmessagestest") && GetRand(atoi(mapArgs["-dropmessagestest"])) == 0)
{ {
LogPrintf("dropmessagestest DROPPING RECV MESSAGE\n"); LogPrintf("dropmessagestest DROPPING RECV MESSAGE\n");
@ -3149,7 +3149,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
if (pfrom->nVersion < MIN_PEER_PROTO_VERSION) if (pfrom->nVersion < MIN_PEER_PROTO_VERSION)
{ {
// disconnect from peers older than this proto version // disconnect from peers older than this proto version
LogPrintf("partner %s using obsolete version %i; disconnecting\n", pfrom->addr.ToString().c_str(), pfrom->nVersion); LogPrintf("partner %s using obsolete version %i; disconnecting\n", pfrom->addr.ToString(), pfrom->nVersion);
pfrom->PushMessage("reject", strCommand, REJECT_OBSOLETE, pfrom->PushMessage("reject", strCommand, REJECT_OBSOLETE,
strprintf("Version must be %d or greater", MIN_PEER_PROTO_VERSION)); strprintf("Version must be %d or greater", MIN_PEER_PROTO_VERSION));
pfrom->fDisconnect = true; pfrom->fDisconnect = true;
@ -3180,7 +3180,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
// Disconnect if we connected to ourself // Disconnect if we connected to ourself
if (nNonce == nLocalHostNonce && nNonce > 1) if (nNonce == nLocalHostNonce && nNonce > 1)
{ {
LogPrintf("connected to self at %s, disconnecting\n", pfrom->addr.ToString().c_str()); LogPrintf("connected to self at %s, disconnecting\n", pfrom->addr.ToString());
pfrom->fDisconnect = true; pfrom->fDisconnect = true;
return true; return true;
} }
@ -3230,7 +3230,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
pfrom->fSuccessfullyConnected = true; pfrom->fSuccessfullyConnected = true;
LogPrintf("receive version message: %s: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", pfrom->cleanSubVer.c_str(), pfrom->nVersion, pfrom->nStartingHeight, addrMe.ToString().c_str(), addrFrom.ToString().c_str(), pfrom->addr.ToString().c_str()); LogPrintf("receive version message: %s: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", pfrom->cleanSubVer, pfrom->nVersion, pfrom->nStartingHeight, addrMe.ToString(), addrFrom.ToString(), pfrom->addr.ToString());
AddTimeData(pfrom->addr, nTime); AddTimeData(pfrom->addr, nTime);
@ -3349,7 +3349,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
pfrom->AddInventoryKnown(inv); pfrom->AddInventoryKnown(inv);
bool fAlreadyHave = AlreadyHave(inv); bool fAlreadyHave = AlreadyHave(inv);
LogPrint("net", " got inventory: %s %s\n", inv.ToString().c_str(), fAlreadyHave ? "have" : "new"); LogPrint("net", " got inventory: %s %s\n", inv.ToString(), fAlreadyHave ? "have" : "new");
if (!fAlreadyHave) { if (!fAlreadyHave) {
if (!fImporting && !fReindex) if (!fImporting && !fReindex)
@ -3362,7 +3362,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
// this situation and push another getblocks to continue. // this situation and push another getblocks to continue.
PushGetBlocks(pfrom, mapBlockIndex[inv.hash], uint256(0)); PushGetBlocks(pfrom, mapBlockIndex[inv.hash], uint256(0));
if (fDebug) if (fDebug)
LogPrintf("force request: %s\n", inv.ToString().c_str()); LogPrintf("force request: %s\n", inv.ToString());
} }
// Track requests for our stuff // Track requests for our stuff
@ -3385,7 +3385,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
LogPrint("net", "received getdata (%"PRIszu" invsz)\n", vInv.size()); LogPrint("net", "received getdata (%"PRIszu" invsz)\n", vInv.size());
if ((fDebug && vInv.size() > 0) || (vInv.size() == 1)) if ((fDebug && vInv.size() > 0) || (vInv.size() == 1))
LogPrint("net", "received getdata for: %s\n", vInv[0].ToString().c_str()); LogPrint("net", "received getdata for: %s\n", vInv[0].ToString());
pfrom->vRecvGetData.insert(pfrom->vRecvGetData.end(), vInv.begin(), vInv.end()); pfrom->vRecvGetData.insert(pfrom->vRecvGetData.end(), vInv.begin(), vInv.end());
ProcessGetData(pfrom); ProcessGetData(pfrom);
@ -3407,12 +3407,12 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
if (pindex) if (pindex)
pindex = chainActive.Next(pindex); pindex = chainActive.Next(pindex);
int nLimit = 500; int nLimit = 500;
LogPrint("net", "getblocks %d to %s limit %d\n", (pindex ? pindex->nHeight : -1), hashStop.ToString().c_str(), nLimit); LogPrint("net", "getblocks %d to %s limit %d\n", (pindex ? pindex->nHeight : -1), hashStop.ToString(), nLimit);
for (; pindex; pindex = chainActive.Next(pindex)) for (; pindex; pindex = chainActive.Next(pindex))
{ {
if (pindex->GetBlockHash() == hashStop) if (pindex->GetBlockHash() == hashStop)
{ {
LogPrint("net", " getblocks stopping at %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); LogPrint("net", " getblocks stopping at %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
break; break;
} }
pfrom->PushInventory(CInv(MSG_BLOCK, pindex->GetBlockHash())); pfrom->PushInventory(CInv(MSG_BLOCK, pindex->GetBlockHash()));
@ -3420,7 +3420,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
{ {
// When this block is requested, we'll send an inv that'll make them // When this block is requested, we'll send an inv that'll make them
// getblocks the next batch of inventory. // getblocks the next batch of inventory.
LogPrint("net", " getblocks stopping at limit %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); LogPrint("net", " getblocks stopping at limit %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
pfrom->hashContinue = pindex->GetBlockHash(); pfrom->hashContinue = pindex->GetBlockHash();
break; break;
} }
@ -3456,7 +3456,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
// we must use CBlocks, as CBlockHeaders won't include the 0x00 nTx count at the end // we must use CBlocks, as CBlockHeaders won't include the 0x00 nTx count at the end
vector<CBlock> vHeaders; vector<CBlock> vHeaders;
int nLimit = 2000; int nLimit = 2000;
LogPrint("net", "getheaders %d to %s\n", (pindex ? pindex->nHeight : -1), hashStop.ToString().c_str()); LogPrint("net", "getheaders %d to %s\n", (pindex ? pindex->nHeight : -1), hashStop.ToString());
for (; pindex; pindex = chainActive.Next(pindex)) for (; pindex; pindex = chainActive.Next(pindex))
{ {
vHeaders.push_back(pindex->GetBlockHeader()); vHeaders.push_back(pindex->GetBlockHeader());
@ -3491,8 +3491,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
LogPrint("mempool", "AcceptToMemoryPool: %s %s : accepted %s (poolsz %"PRIszu")\n", LogPrint("mempool", "AcceptToMemoryPool: %s %s : accepted %s (poolsz %"PRIszu")\n",
pfrom->addr.ToString().c_str(), pfrom->cleanSubVer.c_str(), pfrom->addr.ToString(), pfrom->cleanSubVer,
tx.GetHash().ToString().c_str(), tx.GetHash().ToString(),
mempool.mapTx.size()); mempool.mapTx.size());
// Recursively process any orphan transactions that depended on this one // Recursively process any orphan transactions that depended on this one
@ -3513,7 +3513,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
if (AcceptToMemoryPool(mempool, stateDummy, orphanTx, true, &fMissingInputs2)) if (AcceptToMemoryPool(mempool, stateDummy, orphanTx, true, &fMissingInputs2))
{ {
LogPrint("mempool", " accepted orphan tx %s\n", orphanHash.ToString().c_str()); LogPrint("mempool", " accepted orphan tx %s\n", orphanHash.ToString());
RelayTransaction(orphanTx, orphanHash); RelayTransaction(orphanTx, orphanHash);
mapAlreadyAskedFor.erase(CInv(MSG_TX, orphanHash)); mapAlreadyAskedFor.erase(CInv(MSG_TX, orphanHash));
vWorkQueue.push_back(orphanHash); vWorkQueue.push_back(orphanHash);
@ -3523,7 +3523,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
{ {
// invalid or too-little-fee orphan // invalid or too-little-fee orphan
vEraseQueue.push_back(orphanHash); vEraseQueue.push_back(orphanHash);
LogPrint("mempool", " removed orphan tx %s\n", orphanHash.ToString().c_str()); LogPrint("mempool", " removed orphan tx %s\n", orphanHash.ToString());
} }
mempool.check(pcoinsTip); mempool.check(pcoinsTip);
} }
@ -3544,9 +3544,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
int nDoS = 0; int nDoS = 0;
if (state.IsInvalid(nDoS)) if (state.IsInvalid(nDoS))
{ {
LogPrint("mempool", "%s from %s %s was not accepted into the memory pool: %s\n", tx.GetHash().ToString().c_str(), LogPrint("mempool", "%s from %s %s was not accepted into the memory pool: %s\n", tx.GetHash().ToString(),
pfrom->addr.ToString().c_str(), pfrom->cleanSubVer.c_str(), pfrom->addr.ToString(), pfrom->cleanSubVer,
state.GetRejectReason().c_str()); state.GetRejectReason());
pfrom->PushMessage("reject", strCommand, state.GetRejectCode(), pfrom->PushMessage("reject", strCommand, state.GetRejectCode(),
state.GetRejectReason(), inv.hash); state.GetRejectReason(), inv.hash);
if (nDoS > 0) if (nDoS > 0)
@ -3560,7 +3560,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
CBlock block; CBlock block;
vRecv >> block; vRecv >> block;
LogPrint("net", "received block %s\n", block.GetHash().ToString().c_str()); LogPrint("net", "received block %s\n", block.GetHash().ToString());
// block.print(); // block.print();
CInv inv(MSG_BLOCK, block.GetHash()); CInv inv(MSG_BLOCK, block.GetHash());
@ -3682,9 +3682,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
if (!(sProblem.empty())) { if (!(sProblem.empty())) {
LogPrint("net", "pong %s %s: %s, %"PRIx64" expected, %"PRIx64" received, %"PRIszu" bytes\n", LogPrint("net", "pong %s %s: %s, %"PRIx64" expected, %"PRIx64" received, %"PRIszu" bytes\n",
pfrom->addr.ToString().c_str(), pfrom->addr.ToString(),
pfrom->cleanSubVer.c_str(), pfrom->cleanSubVer,
sProblem.c_str(), sProblem,
pfrom->nPingNonceSent, pfrom->nPingNonceSent,
nonce, nonce,
nAvail); nAvail);
@ -3793,7 +3793,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
// Truncate to reasonable length and sanitize before printing: // Truncate to reasonable length and sanitize before printing:
string s = ss.str(); string s = ss.str();
if (s.size() > 111) s.erase(111, string::npos); if (s.size() > 111) s.erase(111, string::npos);
LogPrint("net", "Reject %s\n", SanitizeString(s).c_str()); LogPrint("net", "Reject %s\n", SanitizeString(s));
} }
} }
@ -3866,7 +3866,7 @@ bool ProcessMessages(CNode* pfrom)
CMessageHeader& hdr = msg.hdr; CMessageHeader& hdr = msg.hdr;
if (!hdr.IsValid()) if (!hdr.IsValid())
{ {
LogPrintf("\n\nPROCESSMESSAGE: ERRORS IN HEADER %s\n\n\n", hdr.GetCommand().c_str()); LogPrintf("\n\nPROCESSMESSAGE: ERRORS IN HEADER %s\n\n\n", hdr.GetCommand());
continue; continue;
} }
string strCommand = hdr.GetCommand(); string strCommand = hdr.GetCommand();
@ -3882,7 +3882,7 @@ bool ProcessMessages(CNode* pfrom)
if (nChecksum != hdr.nChecksum) if (nChecksum != hdr.nChecksum)
{ {
LogPrintf("ProcessMessages(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n", LogPrintf("ProcessMessages(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n",
strCommand.c_str(), nMessageSize, nChecksum, hdr.nChecksum); strCommand, nMessageSize, nChecksum, hdr.nChecksum);
continue; continue;
} }
@ -3899,12 +3899,12 @@ bool ProcessMessages(CNode* pfrom)
if (strstr(e.what(), "end of data")) if (strstr(e.what(), "end of data"))
{ {
// Allow exceptions from under-length message on vRecv // Allow exceptions from under-length message on vRecv
LogPrintf("ProcessMessages(%s, %u bytes) : Exception '%s' caught, normally caused by a message being shorter than its stated length\n", strCommand.c_str(), nMessageSize, e.what()); LogPrintf("ProcessMessages(%s, %u bytes) : Exception '%s' caught, normally caused by a message being shorter than its stated length\n", strCommand, nMessageSize, e.what());
} }
else if (strstr(e.what(), "size too large")) else if (strstr(e.what(), "size too large"))
{ {
// Allow exceptions from over-long size // Allow exceptions from over-long size
LogPrintf("ProcessMessages(%s, %u bytes) : Exception '%s' caught\n", strCommand.c_str(), nMessageSize, e.what()); LogPrintf("ProcessMessages(%s, %u bytes) : Exception '%s' caught\n", strCommand, nMessageSize, e.what());
} }
else else
{ {
@ -3921,7 +3921,7 @@ bool ProcessMessages(CNode* pfrom)
} }
if (!fRet) if (!fRet)
LogPrintf("ProcessMessage(%s, %u bytes) FAILED\n", strCommand.c_str(), nMessageSize); LogPrintf("ProcessMessage(%s, %u bytes) FAILED\n", strCommand, nMessageSize);
break; break;
} }
@ -4027,7 +4027,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
if (State(pto->GetId())->fShouldBan) { if (State(pto->GetId())->fShouldBan) {
if (pto->addr.IsLocal()) if (pto->addr.IsLocal())
LogPrintf("Warning: not banning local node %s!\n", pto->addr.ToString().c_str()); LogPrintf("Warning: not banning local node %s!\n", pto->addr.ToString());
else { else {
pto->fDisconnect = true; pto->fDisconnect = true;
CNode::Ban(pto->addr); CNode::Ban(pto->addr);
@ -4109,7 +4109,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle)
if (!AlreadyHave(inv)) if (!AlreadyHave(inv))
{ {
if (fDebug) if (fDebug)
LogPrint("net", "sending getdata: %s\n", inv.ToString().c_str()); LogPrint("net", "sending getdata: %s\n", inv.ToString());
vGetData.push_back(inv); vGetData.push_back(inv);
if (vGetData.size() >= 1000) if (vGetData.size() >= 1000)
{ {

View file

@ -70,9 +70,9 @@ public:
void print() const void print() const
{ {
LogPrintf("COrphan(hash=%s, dPriority=%.1f, dFeePerKb=%.1f)\n", LogPrintf("COrphan(hash=%s, dPriority=%.1f, dFeePerKb=%.1f)\n",
ptx->GetHash().ToString().c_str(), dPriority, dFeePerKb); ptx->GetHash().ToString(), dPriority, dFeePerKb);
BOOST_FOREACH(uint256 hash, setDependsOn) BOOST_FOREACH(uint256 hash, setDependsOn)
LogPrintf(" setDependsOn %s\n", hash.ToString().c_str()); LogPrintf(" setDependsOn %s\n", hash.ToString());
} }
}; };
@ -296,7 +296,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
if (fPrintPriority) if (fPrintPriority)
{ {
LogPrintf("priority %.1f feeperkb %.1f txid %s\n", LogPrintf("priority %.1f feeperkb %.1f txid %s\n",
dPriority, dFeePerKb, tx.GetHash().ToString().c_str()); dPriority, dFeePerKb, tx.GetHash().ToString());
} }
// Add transactions that depend on this one to the priority queue // Add transactions that depend on this one to the priority queue
@ -470,9 +470,9 @@ bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey)
//// debug print //// debug print
LogPrintf("BitcoinMiner:\n"); LogPrintf("BitcoinMiner:\n");
LogPrintf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex().c_str(), hashTarget.GetHex().c_str()); LogPrintf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex(), hashTarget.GetHex());
pblock->print(); pblock->print();
LogPrintf("generated %s\n", FormatMoney(pblock->vtx[0].vout[0].nValue).c_str()); LogPrintf("generated %s\n", FormatMoney(pblock->vtx[0].vout[0].nValue));
// Found a solution // Found a solution
{ {

View file

@ -227,7 +227,7 @@ bool AddLocal(const CService& addr, int nScore)
if (IsLimited(addr)) if (IsLimited(addr))
return false; return false;
LogPrintf("AddLocal(%s,%i)\n", addr.ToString().c_str(), nScore); LogPrintf("AddLocal(%s,%i)\n", addr.ToString(), nScore);
{ {
LOCK(cs_mapLocalHost); LOCK(cs_mapLocalHost);
@ -304,7 +304,7 @@ bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const cha
{ {
SOCKET hSocket; SOCKET hSocket;
if (!ConnectSocket(addrConnect, hSocket)) if (!ConnectSocket(addrConnect, hSocket))
return error("GetMyExternalIP() : connection to %s failed", addrConnect.ToString().c_str()); return error("GetMyExternalIP() : connection to %s failed", addrConnect.ToString());
send(hSocket, pszGet, strlen(pszGet), MSG_NOSIGNAL); send(hSocket, pszGet, strlen(pszGet), MSG_NOSIGNAL);
@ -335,7 +335,7 @@ bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const cha
while (strLine.size() > 0 && isspace(strLine[strLine.size()-1])) while (strLine.size() > 0 && isspace(strLine[strLine.size()-1]))
strLine.resize(strLine.size()-1); strLine.resize(strLine.size()-1);
CService addr(strLine,0,true); CService addr(strLine,0,true);
LogPrintf("GetMyExternalIP() received [%s] %s\n", strLine.c_str(), addr.ToString().c_str()); LogPrintf("GetMyExternalIP() received [%s] %s\n", strLine, addr.ToString());
if (!addr.IsValid() || !addr.IsRoutable()) if (!addr.IsValid() || !addr.IsRoutable())
return false; return false;
ipRet.SetIP(addr); ipRet.SetIP(addr);
@ -410,7 +410,7 @@ void ThreadGetMyExternalIP()
CNetAddr addrLocalHost; CNetAddr addrLocalHost;
if (GetMyExternalIP(addrLocalHost)) if (GetMyExternalIP(addrLocalHost))
{ {
LogPrintf("GetMyExternalIP() returned %s\n", addrLocalHost.ToStringIP().c_str()); LogPrintf("GetMyExternalIP() returned %s\n", addrLocalHost.ToStringIP());
AddLocal(addrLocalHost, LOCAL_HTTP); AddLocal(addrLocalHost, LOCAL_HTTP);
} }
} }
@ -477,7 +477,7 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest)
/// debug print /// debug print
LogPrint("net", "trying connection %s lastseen=%.1fhrs\n", LogPrint("net", "trying connection %s lastseen=%.1fhrs\n",
pszDest ? pszDest : addrConnect.ToString().c_str(), pszDest ? pszDest : addrConnect.ToString(),
pszDest ? 0 : (double)(GetAdjustedTime() - addrConnect.nTime)/3600.0); pszDest ? 0 : (double)(GetAdjustedTime() - addrConnect.nTime)/3600.0);
// Connect // Connect
@ -486,7 +486,7 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest)
{ {
addrman.Attempt(addrConnect); addrman.Attempt(addrConnect);
LogPrint("net", "connected %s\n", pszDest ? pszDest : addrConnect.ToString().c_str()); LogPrint("net", "connected %s\n", pszDest ? pszDest : addrConnect.ToString());
// Set to non-blocking // Set to non-blocking
#ifdef WIN32 #ifdef WIN32
@ -521,7 +521,7 @@ void CNode::CloseSocketDisconnect()
fDisconnect = true; fDisconnect = true;
if (hSocket != INVALID_SOCKET) if (hSocket != INVALID_SOCKET)
{ {
LogPrint("net", "disconnecting node %s\n", addrName.c_str()); LogPrint("net", "disconnecting node %s\n", addrName);
closesocket(hSocket); closesocket(hSocket);
hSocket = INVALID_SOCKET; hSocket = INVALID_SOCKET;
} }
@ -550,7 +550,7 @@ void CNode::PushVersion()
CAddress addrYou = (addr.IsRoutable() && !IsProxy(addr) ? addr : CAddress(CService("0.0.0.0",0))); CAddress addrYou = (addr.IsRoutable() && !IsProxy(addr) ? addr : CAddress(CService("0.0.0.0",0)));
CAddress addrMe = GetLocalAddress(&addr); CAddress addrMe = GetLocalAddress(&addr);
RAND_bytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce)); RAND_bytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce));
LogPrint("net", "send version message: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", PROTOCOL_VERSION, nBestHeight, addrMe.ToString().c_str(), addrYou.ToString().c_str(), addr.ToString().c_str()); LogPrint("net", "send version message: version %d, blocks=%d, us=%s, them=%s, peer=%s\n", PROTOCOL_VERSION, nBestHeight, addrMe.ToString(), addrYou.ToString(), addr.ToString());
PushMessage("version", PROTOCOL_VERSION, nLocalServices, nTime, addrYou, addrMe, PushMessage("version", PROTOCOL_VERSION, nLocalServices, nTime, addrYou, addrMe,
nLocalHostNonce, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector<string>()), nBestHeight, true); nLocalHostNonce, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector<string>()), nBestHeight, true);
} }
@ -952,12 +952,12 @@ void ThreadSocketHandler()
} }
else if (CNode::IsBanned(addr)) else if (CNode::IsBanned(addr))
{ {
LogPrintf("connection from %s dropped (banned)\n", addr.ToString().c_str()); LogPrintf("connection from %s dropped (banned)\n", addr.ToString());
closesocket(hSocket); closesocket(hSocket);
} }
else else
{ {
LogPrint("net", "accepted connection %s\n", addr.ToString().c_str()); LogPrint("net", "accepted connection %s\n", addr.ToString());
CNode* pnode = new CNode(hSocket, addr, "", true); CNode* pnode = new CNode(hSocket, addr, "", true);
pnode->AddRef(); pnode->AddRef();
{ {
@ -1138,7 +1138,7 @@ void ThreadMapPort()
if(r!=UPNPCOMMAND_SUCCESS) if(r!=UPNPCOMMAND_SUCCESS)
LogPrintf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", LogPrintf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n",
port.c_str(), port.c_str(), lanaddr, r, strupnperror(r)); port, port, lanaddr, r, strupnperror(r));
else else
LogPrintf("UPnP Port Mapping successful.\n");; LogPrintf("UPnP Port Mapping successful.\n");;
@ -1592,8 +1592,8 @@ bool BindListenPort(const CService &addrBind, string& strError)
socklen_t len = sizeof(sockaddr); socklen_t len = sizeof(sockaddr);
if (!addrBind.GetSockAddr((struct sockaddr*)&sockaddr, &len)) if (!addrBind.GetSockAddr((struct sockaddr*)&sockaddr, &len))
{ {
strError = strprintf("Error: bind address family for %s not supported", addrBind.ToString().c_str()); strError = strprintf("Error: bind address family for %s not supported", addrBind.ToString());
LogPrintf("%s\n", strError.c_str()); LogPrintf("%s\n", strError);
return false; return false;
} }
@ -1601,7 +1601,7 @@ bool BindListenPort(const CService &addrBind, string& strError)
if (hListenSocket == INVALID_SOCKET) if (hListenSocket == INVALID_SOCKET)
{ {
strError = strprintf("Error: Couldn't open socket for incoming connections (socket returned error %d)", WSAGetLastError()); strError = strprintf("Error: Couldn't open socket for incoming connections (socket returned error %d)", WSAGetLastError());
LogPrintf("%s\n", strError.c_str()); LogPrintf("%s\n", strError);
return false; return false;
} }
@ -1625,7 +1625,7 @@ bool BindListenPort(const CService &addrBind, string& strError)
#endif #endif
{ {
strError = strprintf("Error: Couldn't set properties on socket for incoming connections (error %d)", WSAGetLastError()); strError = strprintf("Error: Couldn't set properties on socket for incoming connections (error %d)", WSAGetLastError());
LogPrintf("%s\n", strError.c_str()); LogPrintf("%s\n", strError);
return false; return false;
} }
@ -1653,19 +1653,19 @@ bool BindListenPort(const CService &addrBind, string& strError)
{ {
int nErr = WSAGetLastError(); int nErr = WSAGetLastError();
if (nErr == WSAEADDRINUSE) if (nErr == WSAEADDRINUSE)
strError = strprintf(_("Unable to bind to %s on this computer. Bitcoin is probably already running."), addrBind.ToString().c_str()); strError = strprintf(_("Unable to bind to %s on this computer. Bitcoin is probably already running."), addrBind.ToString());
else else
strError = strprintf(_("Unable to bind to %s on this computer (bind returned error %d, %s)"), addrBind.ToString().c_str(), nErr, strerror(nErr)); strError = strprintf(_("Unable to bind to %s on this computer (bind returned error %d, %s)"), addrBind.ToString(), nErr, strerror(nErr));
LogPrintf("%s\n", strError.c_str()); LogPrintf("%s\n", strError);
return false; return false;
} }
LogPrintf("Bound to %s\n", addrBind.ToString().c_str()); LogPrintf("Bound to %s\n", addrBind.ToString());
// Listen for incoming connections // Listen for incoming connections
if (listen(hListenSocket, SOMAXCONN) == SOCKET_ERROR) if (listen(hListenSocket, SOMAXCONN) == SOCKET_ERROR)
{ {
strError = strprintf("Error: Listening for incoming connections failed (listen returned error %d)", WSAGetLastError()); strError = strprintf("Error: Listening for incoming connections failed (listen returned error %d)", WSAGetLastError());
LogPrintf("%s\n", strError.c_str()); LogPrintf("%s\n", strError);
return false; return false;
} }
@ -1712,7 +1712,7 @@ void static Discover(boost::thread_group& threadGroup)
struct sockaddr_in* s4 = (struct sockaddr_in*)(ifa->ifa_addr); struct sockaddr_in* s4 = (struct sockaddr_in*)(ifa->ifa_addr);
CNetAddr addr(s4->sin_addr); CNetAddr addr(s4->sin_addr);
if (AddLocal(addr, LOCAL_IF)) if (AddLocal(addr, LOCAL_IF))
LogPrintf("IPv4 %s: %s\n", ifa->ifa_name, addr.ToString().c_str()); LogPrintf("IPv4 %s: %s\n", ifa->ifa_name, addr.ToString());
} }
#ifdef USE_IPV6 #ifdef USE_IPV6
else if (ifa->ifa_addr->sa_family == AF_INET6) else if (ifa->ifa_addr->sa_family == AF_INET6)
@ -1720,7 +1720,7 @@ void static Discover(boost::thread_group& threadGroup)
struct sockaddr_in6* s6 = (struct sockaddr_in6*)(ifa->ifa_addr); struct sockaddr_in6* s6 = (struct sockaddr_in6*)(ifa->ifa_addr);
CNetAddr addr(s6->sin6_addr); CNetAddr addr(s6->sin6_addr);
if (AddLocal(addr, LOCAL_IF)) if (AddLocal(addr, LOCAL_IF))
LogPrintf("IPv6 %s: %s\n", ifa->ifa_name, addr.ToString().c_str()); LogPrintf("IPv6 %s: %s\n", ifa->ifa_name, addr.ToString());
} }
#endif #endif
} }

View file

@ -171,7 +171,7 @@ bool LookupNumeric(const char *pszName, CService& addr, int portDefault)
bool static Socks4(const CService &addrDest, SOCKET& hSocket) bool static Socks4(const CService &addrDest, SOCKET& hSocket)
{ {
LogPrintf("SOCKS4 connecting %s\n", addrDest.ToString().c_str()); LogPrintf("SOCKS4 connecting %s\n", addrDest.ToString());
if (!addrDest.IsIPv4()) if (!addrDest.IsIPv4())
{ {
closesocket(hSocket); closesocket(hSocket);
@ -209,13 +209,13 @@ bool static Socks4(const CService &addrDest, SOCKET& hSocket)
LogPrintf("ERROR: Proxy returned error %d\n", pchRet[1]); LogPrintf("ERROR: Proxy returned error %d\n", pchRet[1]);
return false; return false;
} }
LogPrintf("SOCKS4 connected %s\n", addrDest.ToString().c_str()); LogPrintf("SOCKS4 connected %s\n", addrDest.ToString());
return true; return true;
} }
bool static Socks5(string strDest, int port, SOCKET& hSocket) bool static Socks5(string strDest, int port, SOCKET& hSocket)
{ {
LogPrintf("SOCKS5 connecting %s\n", strDest.c_str()); LogPrintf("SOCKS5 connecting %s\n", strDest);
if (strDest.size() > 255) if (strDest.size() > 255)
{ {
closesocket(hSocket); closesocket(hSocket);
@ -311,7 +311,7 @@ bool static Socks5(string strDest, int port, SOCKET& hSocket)
closesocket(hSocket); closesocket(hSocket);
return error("Error reading from proxy"); return error("Error reading from proxy");
} }
LogPrintf("SOCKS5 connected %s\n", strDest.c_str()); LogPrintf("SOCKS5 connected %s\n", strDest);
return true; return true;
} }
@ -326,7 +326,7 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
#endif #endif
socklen_t len = sizeof(sockaddr); socklen_t len = sizeof(sockaddr);
if (!addrConnect.GetSockAddr((struct sockaddr*)&sockaddr, &len)) { if (!addrConnect.GetSockAddr((struct sockaddr*)&sockaddr, &len)) {
LogPrintf("Cannot connect to %s: unsupported network\n", addrConnect.ToString().c_str()); LogPrintf("Cannot connect to %s: unsupported network\n", addrConnect.ToString());
return false; return false;
} }
@ -365,13 +365,13 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
int nRet = select(hSocket + 1, NULL, &fdset, NULL, &timeout); int nRet = select(hSocket + 1, NULL, &fdset, NULL, &timeout);
if (nRet == 0) if (nRet == 0)
{ {
LogPrint("net", "connection to %s timeout\n", addrConnect.ToString().c_str()); LogPrint("net", "connection to %s timeout\n", addrConnect.ToString());
closesocket(hSocket); closesocket(hSocket);
return false; return false;
} }
if (nRet == SOCKET_ERROR) if (nRet == SOCKET_ERROR)
{ {
LogPrintf("select() for %s failed: %i\n", addrConnect.ToString().c_str(), WSAGetLastError()); LogPrintf("select() for %s failed: %i\n", addrConnect.ToString(), WSAGetLastError());
closesocket(hSocket); closesocket(hSocket);
return false; return false;
} }
@ -382,13 +382,13 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, &nRet, &nRetSize) == SOCKET_ERROR) if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, &nRet, &nRetSize) == SOCKET_ERROR)
#endif #endif
{ {
LogPrintf("getsockopt() for %s failed: %i\n", addrConnect.ToString().c_str(), WSAGetLastError()); LogPrintf("getsockopt() for %s failed: %i\n", addrConnect.ToString(), WSAGetLastError());
closesocket(hSocket); closesocket(hSocket);
return false; return false;
} }
if (nRet != 0) if (nRet != 0)
{ {
LogPrintf("connect() to %s failed after select(): %s\n", addrConnect.ToString().c_str(), strerror(nRet)); LogPrintf("connect() to %s failed after select(): %s\n", addrConnect.ToString(), strerror(nRet));
closesocket(hSocket); closesocket(hSocket);
return false; return false;
} }
@ -399,7 +399,7 @@ bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRe
else else
#endif #endif
{ {
LogPrintf("connect() to %s failed: %i\n", addrConnect.ToString().c_str(), WSAGetLastError()); LogPrintf("connect() to %s failed: %i\n", addrConnect.ToString(), WSAGetLastError());
closesocket(hSocket); closesocket(hSocket);
return false; return false;
} }
@ -895,7 +895,7 @@ uint64_t CNetAddr::GetHash() const
void CNetAddr::print() const void CNetAddr::print() const
{ {
LogPrintf("CNetAddr(%s)\n", ToString().c_str()); LogPrintf("CNetAddr(%s)\n", ToString());
} }
// private extensions to enum Network, only returned by GetExtNetwork, // private extensions to enum Network, only returned by GetExtNetwork,
@ -1136,7 +1136,7 @@ std::string CService::ToString() const
void CService::print() const void CService::print() const
{ {
LogPrintf("CService(%s)\n", ToString().c_str()); LogPrintf("CService(%s)\n", ToString());
} }
void CService::SetPort(unsigned short portIn) void CService::SetPort(unsigned short portIn)

View file

@ -29,14 +29,14 @@ static bool noui_ThreadSafeMessageBox(const std::string& message, const std::str
strCaption += caption; // Use supplied caption (can be empty) strCaption += caption; // Use supplied caption (can be empty)
} }
LogPrintf("%s: %s\n", strCaption.c_str(), message.c_str()); LogPrintf("%s: %s\n", strCaption, message);
fprintf(stderr, "%s: %s\n", strCaption.c_str(), message.c_str()); fprintf(stderr, "%s: %s\n", strCaption.c_str(), message.c_str());
return false; return false;
} }
static void noui_InitMessage(const std::string &message) static void noui_InitMessage(const std::string &message)
{ {
LogPrintf("init message: %s\n", message.c_str()); LogPrintf("init message: %s\n", message);
} }
void noui_connect() void noui_connect()

View file

@ -67,7 +67,7 @@ bool CMessageHeader::IsValid() const
// Message size // Message size
if (nMessageSize > MAX_SIZE) if (nMessageSize > MAX_SIZE)
{ {
LogPrintf("CMessageHeader::IsValid() : (%s, %u bytes) nMessageSize > MAX_SIZE\n", GetCommand().c_str(), nMessageSize); LogPrintf("CMessageHeader::IsValid() : (%s, %u bytes) nMessageSize > MAX_SIZE\n", GetCommand(), nMessageSize);
return false; return false;
} }
@ -118,7 +118,7 @@ CInv::CInv(const std::string& strType, const uint256& hashIn)
} }
} }
if (i == ARRAYLEN(ppszTypeName)) if (i == ARRAYLEN(ppszTypeName))
throw std::out_of_range(strprintf("CInv::CInv(string, uint256) : unknown type '%s'", strType.c_str())); throw std::out_of_range(strprintf("CInv::CInv(string, uint256) : unknown type '%s'", strType));
hash = hashIn; hash = hashIn;
} }
@ -141,11 +141,11 @@ const char* CInv::GetCommand() const
std::string CInv::ToString() const std::string CInv::ToString() const
{ {
return strprintf("%s %s", GetCommand(), hash.ToString().c_str()); return strprintf("%s %s", GetCommand(), hash.ToString());
} }
void CInv::print() const void CInv::print() const
{ {
LogPrintf("CInv(%s)\n", ToString().c_str()); LogPrintf("CInv(%s)\n", ToString());
} }

View file

@ -62,7 +62,7 @@ Q_DECLARE_METATYPE(bool*)
static void InitMessage(const std::string &message) static void InitMessage(const std::string &message)
{ {
LogPrintf("init message: %s\n", message.c_str()); LogPrintf("init message: %s\n", message);
} }
/* /*

View file

@ -178,7 +178,7 @@ Value importwallet(const Array& params, bool fHelp)
CPubKey pubkey = key.GetPubKey(); CPubKey pubkey = key.GetPubKey();
CKeyID keyid = pubkey.GetID(); CKeyID keyid = pubkey.GetID();
if (pwalletMain->HaveKey(keyid)) { if (pwalletMain->HaveKey(keyid)) {
LogPrintf("Skipping import of %s (key already present)\n", CBitcoinAddress(keyid).ToString().c_str()); LogPrintf("Skipping import of %s (key already present)\n", CBitcoinAddress(keyid).ToString());
continue; continue;
} }
int64_t nTime = DecodeDumpTime(vstr[1]); int64_t nTime = DecodeDumpTime(vstr[1]);
@ -196,7 +196,7 @@ Value importwallet(const Array& params, bool fHelp)
fLabel = true; fLabel = true;
} }
} }
LogPrintf("Importing %s...\n", CBitcoinAddress(keyid).ToString().c_str()); LogPrintf("Importing %s...\n", CBitcoinAddress(keyid).ToString());
if (!pwalletMain->AddKeyPubKey(key, pubkey)) { if (!pwalletMain->AddKeyPubKey(key, pubkey)) {
fGood = false; fGood = false;
continue; continue;
@ -290,10 +290,10 @@ Value dumpwallet(const Array& params, bool fHelp)
std::sort(vKeyBirth.begin(), vKeyBirth.end()); std::sort(vKeyBirth.begin(), vKeyBirth.end());
// produce output // produce output
file << strprintf("# Wallet dump created by Bitcoin %s (%s)\n", CLIENT_BUILD.c_str(), CLIENT_DATE.c_str()); file << strprintf("# Wallet dump created by Bitcoin %s (%s)\n", CLIENT_BUILD, CLIENT_DATE);
file << strprintf("# * Created on %s\n", EncodeDumpTime(GetTime()).c_str()); file << strprintf("# * Created on %s\n", EncodeDumpTime(GetTime()));
file << strprintf("# * Best block at time of backup was %i (%s),\n", chainActive.Height(), chainActive.Tip()->GetBlockHash().ToString().c_str()); file << strprintf("# * Best block at time of backup was %i (%s),\n", chainActive.Height(), chainActive.Tip()->GetBlockHash().ToString());
file << strprintf("# mined on %s\n", EncodeDumpTime(chainActive.Tip()->nTime).c_str()); file << strprintf("# mined on %s\n", EncodeDumpTime(chainActive.Tip()->nTime));
file << "\n"; file << "\n";
for (std::vector<std::pair<int64_t, CKeyID> >::const_iterator it = vKeyBirth.begin(); it != vKeyBirth.end(); it++) { for (std::vector<std::pair<int64_t, CKeyID> >::const_iterator it = vKeyBirth.begin(); it != vKeyBirth.end(); it++) {
const CKeyID &keyid = it->second; const CKeyID &keyid = it->second;
@ -302,11 +302,11 @@ Value dumpwallet(const Array& params, bool fHelp)
CKey key; CKey key;
if (pwalletMain->GetKey(keyid, key)) { if (pwalletMain->GetKey(keyid, key)) {
if (pwalletMain->mapAddressBook.count(keyid)) { if (pwalletMain->mapAddressBook.count(keyid)) {
file << strprintf("%s %s label=%s # addr=%s\n", CBitcoinSecret(key).ToString().c_str(), strTime.c_str(), EncodeDumpString(pwalletMain->mapAddressBook[keyid].name).c_str(), strAddr.c_str()); file << strprintf("%s %s label=%s # addr=%s\n", CBitcoinSecret(key).ToString(), strTime, EncodeDumpString(pwalletMain->mapAddressBook[keyid].name), strAddr);
} else if (setKeyPool.count(keyid)) { } else if (setKeyPool.count(keyid)) {
file << strprintf("%s %s reserve=1 # addr=%s\n", CBitcoinSecret(key).ToString().c_str(), strTime.c_str(), strAddr.c_str()); file << strprintf("%s %s reserve=1 # addr=%s\n", CBitcoinSecret(key).ToString(), strTime, strAddr);
} else { } else {
file << strprintf("%s %s change=1 # addr=%s\n", CBitcoinSecret(key).ToString().c_str(), strTime.c_str(), strAddr.c_str()); file << strprintf("%s %s change=1 # addr=%s\n", CBitcoinSecret(key).ToString(), strTime, strAddr);
} }
} }
} }

View file

@ -199,11 +199,11 @@ CScript _createmultisig(const Array& params)
CKeyID keyID; CKeyID keyID;
if (!address.GetKeyID(keyID)) if (!address.GetKeyID(keyID))
throw runtime_error( throw runtime_error(
strprintf("%s does not refer to a key",ks.c_str())); strprintf("%s does not refer to a key",ks));
CPubKey vchPubKey; CPubKey vchPubKey;
if (!pwalletMain->GetPubKey(keyID, vchPubKey)) if (!pwalletMain->GetPubKey(keyID, vchPubKey))
throw runtime_error( throw runtime_error(
strprintf("no full public key for address %s",ks.c_str())); strprintf("no full public key for address %s",ks));
if (!vchPubKey.IsFullyValid()) if (!vchPubKey.IsFullyValid())
throw runtime_error(" Invalid public key: "+ks); throw runtime_error(" Invalid public key: "+ks);
pubkeys[i] = vchPubKey; pubkeys[i] = vchPubKey;

View file

@ -81,7 +81,7 @@ string HTTPReply(int nStatus, const string& strMsg, bool keepalive)
"<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>\r\n" "<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>\r\n"
"</HEAD>\r\n" "</HEAD>\r\n"
"<BODY><H1>401 Unauthorized.</H1></BODY>\r\n" "<BODY><H1>401 Unauthorized.</H1></BODY>\r\n"
"</HTML>\r\n", rfc1123Time().c_str(), FormatFullVersion().c_str()); "</HTML>\r\n", rfc1123Time(), FormatFullVersion());
const char *cStatus; const char *cStatus;
if (nStatus == HTTP_OK) cStatus = "OK"; if (nStatus == HTTP_OK) cStatus = "OK";
else if (nStatus == HTTP_BAD_REQUEST) cStatus = "Bad Request"; else if (nStatus == HTTP_BAD_REQUEST) cStatus = "Bad Request";
@ -100,11 +100,11 @@ string HTTPReply(int nStatus, const string& strMsg, bool keepalive)
"%s", "%s",
nStatus, nStatus,
cStatus, cStatus,
rfc1123Time().c_str(), rfc1123Time(),
keepalive ? "keep-alive" : "close", keepalive ? "keep-alive" : "close",
strMsg.size(), strMsg.size(),
FormatFullVersion().c_str(), FormatFullVersion(),
strMsg.c_str()); strMsg);
} }
bool ReadHTTPRequestLine(std::basic_istream<char>& stream, int &proto, bool ReadHTTPRequestLine(std::basic_istream<char>& stream, int &proto,

View file

@ -69,12 +69,12 @@ void RPCTypeCheck(const Object& o,
{ {
const Value& v = find_value(o, t.first); const Value& v = find_value(o, t.first);
if (!fAllowNull && v.type() == null_type) if (!fAllowNull && v.type() == null_type)
throw JSONRPCError(RPC_TYPE_ERROR, strprintf("Missing %s", t.first.c_str())); throw JSONRPCError(RPC_TYPE_ERROR, strprintf("Missing %s", t.first));
if (!((v.type() == t.second) || (fAllowNull && (v.type() == null_type)))) if (!((v.type() == t.second) || (fAllowNull && (v.type() == null_type))))
{ {
string err = strprintf("Expected type %s for %s, got %s", string err = strprintf("Expected type %s for %s, got %s",
Value_type_name[t.second], t.first.c_str(), Value_type_name[v.type()]); Value_type_name[t.second], t.first, Value_type_name[v.type()]);
throw JSONRPCError(RPC_TYPE_ERROR, err); throw JSONRPCError(RPC_TYPE_ERROR, err);
} }
} }
@ -176,7 +176,7 @@ string CRPCTable::help(string strCommand) const
} }
} }
if (strRet == "") if (strRet == "")
strRet = strprintf("help: unknown command: %s\n", strCommand.c_str()); strRet = strprintf("help: unknown command: %s\n", strCommand);
strRet = strRet.substr(0,strRet.size()-1); strRet = strRet.substr(0,strRet.size()-1);
return strRet; return strRet;
} }
@ -513,9 +513,9 @@ void StartRPCThreads()
"If the file does not exist, create it with owner-readable-only file permissions.\n" "If the file does not exist, create it with owner-readable-only file permissions.\n"
"It is also recommended to set alertnotify so you are notified of problems;\n" "It is also recommended to set alertnotify so you are notified of problems;\n"
"for example: alertnotify=echo %%s | mail -s \"Bitcoin Alert\" admin@foo.com\n"), "for example: alertnotify=echo %%s | mail -s \"Bitcoin Alert\" admin@foo.com\n"),
strWhatAmI.c_str(), strWhatAmI,
GetConfigFile().string().c_str(), GetConfigFile().string(),
EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32).c_str()), EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32)),
"", CClientUIInterface::MSG_ERROR); "", CClientUIInterface::MSG_ERROR);
StartShutdown(); StartShutdown();
return; return;
@ -534,12 +534,12 @@ void StartRPCThreads()
filesystem::path pathCertFile(GetArg("-rpcsslcertificatechainfile", "server.cert")); filesystem::path pathCertFile(GetArg("-rpcsslcertificatechainfile", "server.cert"));
if (!pathCertFile.is_complete()) pathCertFile = filesystem::path(GetDataDir()) / pathCertFile; if (!pathCertFile.is_complete()) pathCertFile = filesystem::path(GetDataDir()) / pathCertFile;
if (filesystem::exists(pathCertFile)) rpc_ssl_context->use_certificate_chain_file(pathCertFile.string()); if (filesystem::exists(pathCertFile)) rpc_ssl_context->use_certificate_chain_file(pathCertFile.string());
else LogPrintf("ThreadRPCServer ERROR: missing server certificate file %s\n", pathCertFile.string().c_str()); else LogPrintf("ThreadRPCServer ERROR: missing server certificate file %s\n", pathCertFile.string());
filesystem::path pathPKFile(GetArg("-rpcsslprivatekeyfile", "server.pem")); filesystem::path pathPKFile(GetArg("-rpcsslprivatekeyfile", "server.pem"));
if (!pathPKFile.is_complete()) pathPKFile = filesystem::path(GetDataDir()) / pathPKFile; if (!pathPKFile.is_complete()) pathPKFile = filesystem::path(GetDataDir()) / pathPKFile;
if (filesystem::exists(pathPKFile)) rpc_ssl_context->use_private_key_file(pathPKFile.string(), ssl::context::pem); if (filesystem::exists(pathPKFile)) rpc_ssl_context->use_private_key_file(pathPKFile.string(), ssl::context::pem);
else LogPrintf("ThreadRPCServer ERROR: missing server private key file %s\n", pathPKFile.string().c_str()); else LogPrintf("ThreadRPCServer ERROR: missing server private key file %s\n", pathPKFile.string());
string strCiphers = GetArg("-rpcsslciphers", "TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH"); string strCiphers = GetArg("-rpcsslciphers", "TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH");
SSL_CTX_set_cipher_list(rpc_ssl_context->impl(), strCiphers.c_str()); SSL_CTX_set_cipher_list(rpc_ssl_context->impl(), strCiphers.c_str());
@ -683,7 +683,7 @@ void JSONRequest::parse(const Value& valRequest)
throw JSONRPCError(RPC_INVALID_REQUEST, "Method must be a string"); throw JSONRPCError(RPC_INVALID_REQUEST, "Method must be a string");
strMethod = valMethod.get_str(); strMethod = valMethod.get_str();
if (strMethod != "getwork" && strMethod != "getblocktemplate") if (strMethod != "getwork" && strMethod != "getblocktemplate")
LogPrint("rpc", "ThreadRPCServer method=%s\n", strMethod.c_str()); LogPrint("rpc", "ThreadRPCServer method=%s\n", strMethod);
// Parse params // Parse params
Value valParams = find_value(request, "params"); Value valParams = find_value(request, "params");
@ -758,7 +758,7 @@ void ServiceConnection(AcceptedConnection *conn)
} }
if (!HTTPAuthorized(mapHeaders)) if (!HTTPAuthorized(mapHeaders))
{ {
LogPrintf("ThreadRPCServer incorrect password attempt from %s\n", conn->peer_address_to_string().c_str()); LogPrintf("ThreadRPCServer incorrect password attempt from %s\n", conn->peer_address_to_string());
/* Deter brute-forcing short passwords. /* Deter brute-forcing short passwords.
If this results in a DoS the user really If this results in a DoS the user really
shouldn't have their RPC port exposed. */ shouldn't have their RPC port exposed. */

View file

@ -65,14 +65,14 @@ static void potential_deadlock_detected(const std::pair<void*, void*>& mismatch,
{ {
if (i.first == mismatch.first) LogPrintf(" (1)"); if (i.first == mismatch.first) LogPrintf(" (1)");
if (i.first == mismatch.second) LogPrintf(" (2)"); if (i.first == mismatch.second) LogPrintf(" (2)");
LogPrintf(" %s\n", i.second.ToString().c_str()); LogPrintf(" %s\n", i.second.ToString());
} }
LogPrintf("Current lock order is:\n"); LogPrintf("Current lock order is:\n");
BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)& i, s1) BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)& i, s1)
{ {
if (i.first == mismatch.first) LogPrintf(" (1)"); if (i.first == mismatch.first) LogPrintf(" (1)");
if (i.first == mismatch.second) LogPrintf(" (2)"); if (i.first == mismatch.second) LogPrintf(" (2)");
LogPrintf(" %s\n", i.second.ToString().c_str()); LogPrintf(" %s\n", i.second.ToString());
} }
} }
@ -81,7 +81,7 @@ static void push_lock(void* c, const CLockLocation& locklocation, bool fTry)
if (lockstack.get() == NULL) if (lockstack.get() == NULL)
lockstack.reset(new LockStack); lockstack.reset(new LockStack);
LogPrint("lock", "Locking: %s\n", locklocation.ToString().c_str()); LogPrint("lock", "Locking: %s\n", locklocation.ToString());
dd_mutex.lock(); dd_mutex.lock();
(*lockstack).push_back(std::make_pair(c, locklocation)); (*lockstack).push_back(std::make_pair(c, locklocation));
@ -111,7 +111,7 @@ static void pop_lock()
if (fDebug) if (fDebug)
{ {
const CLockLocation& locklocation = (*lockstack).rbegin()->second; const CLockLocation& locklocation = (*lockstack).rbegin()->second;
LogPrint("lock", "Unlocked: %s\n", locklocation.ToString().c_str()); LogPrint("lock", "Unlocked: %s\n", locklocation.ToString());
} }
dd_mutex.lock(); dd_mutex.lock();
(*lockstack).pop_back(); (*lockstack).pop_back();
@ -140,7 +140,7 @@ void AssertLockHeldInternal(const char *pszName, const char* pszFile, int nLine,
{ {
BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)&i, *lockstack) BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)&i, *lockstack)
if (i.first == cs) return; if (i.first == cs) return;
LogPrintf("Lock %s not held in %s:%i; locks held:\n%s", pszName, pszFile, nLine, LocksHeld().c_str()); LogPrintf("Lock %s not held in %s:%i; locks held:\n%s", pszName, pszFile, nLine, LocksHeld());
assert(0); assert(0);
} }

1010
src/tinyformat.h Normal file

File diff suppressed because it is too large Load diff

View file

@ -219,7 +219,7 @@ bool CBlockTreeDB::LoadBlockIndexGuts()
pindexNew->nTx = diskindex.nTx; pindexNew->nTx = diskindex.nTx;
if (!pindexNew->CheckIndex()) if (!pindexNew->CheckIndex())
return error("LoadBlockIndex() : CheckIndex failed: %s", pindexNew->ToString().c_str()); return error("LoadBlockIndex() : CheckIndex failed: %s", pindexNew->ToString());
pcursor->Next(); pcursor->Next();
} else { } else {

View file

@ -235,12 +235,12 @@ static void DebugPrintInit()
mutexDebugLog = new boost::mutex(); mutexDebugLog = new boost::mutex();
} }
int LogPrint(const char* category, const char* pszFormat, ...) bool LogAcceptCategory(const char* category)
{ {
if (category != NULL) if (category != NULL)
{ {
if (!fDebug) if (!fDebug)
return 0; return false;
// Give each thread quick access to -debug settings. // Give each thread quick access to -debug settings.
// This helps prevent issues debugging global destructors, // This helps prevent issues debugging global destructors,
@ -258,17 +258,18 @@ int LogPrint(const char* category, const char* pszFormat, ...)
// if not debugging everything and not debugging specific category, LogPrint does nothing. // if not debugging everything and not debugging specific category, LogPrint does nothing.
if (setCategories.count(string("")) == 0 && if (setCategories.count(string("")) == 0 &&
setCategories.count(string(category)) == 0) setCategories.count(string(category)) == 0)
return 0; return false;
}
return true;
} }
int LogPrintStr(const std::string &str)
{
int ret = 0; // Returns total number of characters written int ret = 0; // Returns total number of characters written
if (fPrintToConsole) if (fPrintToConsole)
{ {
// print to console // print to console
va_list arg_ptr; ret = fwrite(str.data(), 1, str.size(), stdout);
va_start(arg_ptr, pszFormat);
ret += vprintf(pszFormat, arg_ptr);
va_end(arg_ptr);
} }
else if (fPrintToDebugLog) else if (fPrintToDebugLog)
{ {
@ -291,76 +292,17 @@ int LogPrint(const char* category, const char* pszFormat, ...)
// Debug print useful for profiling // Debug print useful for profiling
if (fLogTimestamps && fStartedNewLine) if (fLogTimestamps && fStartedNewLine)
ret += fprintf(fileout, "%s ", DateTimeStrFormat("%Y-%m-%d %H:%M:%S", GetTime()).c_str()); ret += fprintf(fileout, "%s ", DateTimeStrFormat("%Y-%m-%d %H:%M:%S", GetTime()).c_str());
if (pszFormat[strlen(pszFormat) - 1] == '\n') if (!str.empty() && str[str.size()-1] == '\n')
fStartedNewLine = true; fStartedNewLine = true;
else else
fStartedNewLine = false; fStartedNewLine = false;
va_list arg_ptr; ret = fwrite(str.data(), 1, str.size(), fileout);
va_start(arg_ptr, pszFormat);
ret += vfprintf(fileout, pszFormat, arg_ptr);
va_end(arg_ptr);
} }
return ret; return ret;
} }
string vstrprintf(const char *format, va_list ap)
{
char buffer[50000];
char* p = buffer;
int limit = sizeof(buffer);
int ret;
while (true)
{
va_list arg_ptr;
va_copy(arg_ptr, ap);
ret = vsnprintf(p, limit, format, arg_ptr);
va_end(arg_ptr);
if (ret >= 0 && ret < limit)
break;
if (p != buffer)
delete[] p;
limit *= 2;
p = new char[limit];
if (p == NULL)
throw std::bad_alloc();
}
string str(p, p+ret);
if (p != buffer)
delete[] p;
return str;
}
string real_strprintf(const char *format, int dummy, ...)
{
va_list arg_ptr;
va_start(arg_ptr, dummy);
string str = vstrprintf(format, arg_ptr);
va_end(arg_ptr);
return str;
}
string real_strprintf(const std::string &format, int dummy, ...)
{
va_list arg_ptr;
va_start(arg_ptr, dummy);
string str = vstrprintf(format.c_str(), arg_ptr);
va_end(arg_ptr);
return str;
}
bool error(const char *format, ...)
{
va_list arg_ptr;
va_start(arg_ptr, format);
std::string str = vstrprintf(format, arg_ptr);
va_end(arg_ptr);
LogPrintf("ERROR: %s\n", str.c_str());
return false;
}
void ParseString(const string& str, char c, vector<string>& v) void ParseString(const string& str, char c, vector<string>& v)
{ {
if (str.empty()) if (str.empty())
@ -1003,13 +945,13 @@ static std::string FormatException(std::exception* pex, const char* pszThread)
void LogException(std::exception* pex, const char* pszThread) void LogException(std::exception* pex, const char* pszThread)
{ {
std::string message = FormatException(pex, pszThread); std::string message = FormatException(pex, pszThread);
LogPrintf("\n%s", message.c_str()); LogPrintf("\n%s", message);
} }
void PrintException(std::exception* pex, const char* pszThread) void PrintException(std::exception* pex, const char* pszThread)
{ {
std::string message = FormatException(pex, pszThread); std::string message = FormatException(pex, pszThread);
LogPrintf("\n\n************************\n%s\n", message.c_str()); LogPrintf("\n\n************************\n%s\n", message);
fprintf(stderr, "\n\n************************\n%s\n", message.c_str()); fprintf(stderr, "\n\n************************\n%s\n", message.c_str());
strMiscWarning = message; strMiscWarning = message;
throw; throw;
@ -1018,7 +960,7 @@ void PrintException(std::exception* pex, const char* pszThread)
void PrintExceptionContinue(std::exception* pex, const char* pszThread) void PrintExceptionContinue(std::exception* pex, const char* pszThread)
{ {
std::string message = FormatException(pex, pszThread); std::string message = FormatException(pex, pszThread);
LogPrintf("\n\n************************\n%s\n", message.c_str()); LogPrintf("\n\n************************\n%s\n", message);
fprintf(stderr, "\n\n************************\n%s\n", message.c_str()); fprintf(stderr, "\n\n************************\n%s\n", message.c_str());
strMiscWarning = message; strMiscWarning = message;
} }
@ -1363,7 +1305,7 @@ void AddTimeData(const CNetAddr& ip, int64_t nTime)
fDone = true; fDone = true;
string strMessage = _("Warning: Please check that your computer's date and time are correct! If your clock is wrong Bitcoin will not work properly."); string strMessage = _("Warning: Please check that your computer's date and time are correct! If your clock is wrong Bitcoin will not work properly.");
strMiscWarning = strMessage; strMiscWarning = strMessage;
LogPrintf("*** %s\n", strMessage.c_str()); LogPrintf("*** %s\n", strMessage);
uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_WARNING); uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_WARNING);
} }
} }
@ -1466,7 +1408,7 @@ void runCommand(std::string strCommand)
{ {
int nErr = ::system(strCommand.c_str()); int nErr = ::system(strCommand.c_str());
if (nErr) if (nErr)
LogPrintf("runCommand error: system(%s) returned %d\n", strCommand.c_str(), nErr); LogPrintf("runCommand error: system(%s) returned %d\n", strCommand, nErr);
} }
void RenameThread(const char* name) void RenameThread(const char* name)

View file

@ -12,6 +12,7 @@
#include "compat.h" #include "compat.h"
#include "serialize.h" #include "serialize.h"
#include "tinyformat.h"
#include <cstdio> #include <cstdio>
#include <exception> #include <exception>
@ -99,21 +100,6 @@ inline void MilliSleep(int64_t n)
#endif #endif
} }
/* This GNU C extension enables the compiler to check the format string against the parameters provided.
* X is the number of the "format string" parameter, and Y is the number of the first variadic parameter.
* Parameters count from 1.
*/
#ifdef __GNUC__
#define ATTR_WARN_PRINTF(X,Y) __attribute__((format(gnu_printf,X,Y)))
#else
#define ATTR_WARN_PRINTF(X,Y)
#endif
extern std::map<std::string, std::string> mapArgs; extern std::map<std::string, std::string> mapArgs;
@ -130,27 +116,49 @@ extern volatile bool fReopenDebugLog;
void RandAddSeed(); void RandAddSeed();
void RandAddSeedPerfmon(); void RandAddSeedPerfmon();
// Print to debug.log if -debug=category switch is given OR category is NULL. /* Return true if log accepts specified category */
int ATTR_WARN_PRINTF(2,3) LogPrint(const char* category, const char* pszFormat, ...); bool LogAcceptCategory(const char* category);
/* Send a string to the log output */
int LogPrintStr(const std::string &str);
#define strprintf tfm::format
#define LogPrintf(...) LogPrint(NULL, __VA_ARGS__) #define LogPrintf(...) LogPrint(NULL, __VA_ARGS__)
/* /* When we switch to C++11, this can be switched to variadic templates instead
Rationale for the real_strprintf / strprintf construction: * of this macro-based construction (see tinyformat.h).
It is not allowed to use va_start with a pass-by-reference argument.
(C++ standard, 18.7, paragraph 3). Use a dummy argument to work around this, and use a
macro to keep similar semantics.
*/ */
#define MAKE_ERROR_AND_LOG_FUNC(n) \
/* Print to debug.log if -debug=category switch is given OR category is NULL. */ \
template<TINYFORMAT_ARGTYPES(n)> \
static inline int LogPrint(const char* category, const char* format, TINYFORMAT_VARARGS(n)) \
{ \
if(!LogAcceptCategory(category)) return 0; \
return LogPrintStr(tfm::format(format, TINYFORMAT_PASSARGS(n))); \
} \
/* Log error and return false */ \
template<TINYFORMAT_ARGTYPES(n)> \
static inline bool error(const char* format, TINYFORMAT_VARARGS(n)) \
{ \
LogPrintStr("ERROR: " + tfm::format(format, TINYFORMAT_PASSARGS(n))); \
return false; \
}
/** Overload strprintf for char*, so that GCC format type warnings can be given */ TINYFORMAT_FOREACH_ARGNUM(MAKE_ERROR_AND_LOG_FUNC)
std::string ATTR_WARN_PRINTF(1,3) real_strprintf(const char *format, int dummy, ...);
/** Overload strprintf for std::string, to be able to use it with _ (translation). /* Zero-arg versions of logging and error, these are not covered by
* This will not support GCC format type warnings (-Wformat) so be careful. * TINYFORMAT_FOREACH_ARGNUM
*/ */
std::string real_strprintf(const std::string &format, int dummy, ...); static inline int LogPrint(const char* category, const char* format)
#define strprintf(format, ...) real_strprintf(format, 0, __VA_ARGS__) {
std::string vstrprintf(const char *format, va_list ap); if(!LogAcceptCategory(category)) return 0;
return LogPrintStr(format);
}
static inline bool error(const char* format)
{
LogPrintStr(std::string("ERROR: ") + format);
return false;
}
bool ATTR_WARN_PRINTF(1,2) error(const char *format, ...);
void LogException(std::exception* pex, const char* pszThread); void LogException(std::exception* pex, const char* pszThread);
void PrintException(std::exception* pex, const char* pszThread); void PrintException(std::exception* pex, const char* pszThread);

View file

@ -381,10 +381,10 @@ void CWallet::WalletUpdateSpent(const CTransaction &tx)
{ {
CWalletTx& wtx = (*mi).second; CWalletTx& wtx = (*mi).second;
if (txin.prevout.n >= wtx.vout.size()) if (txin.prevout.n >= wtx.vout.size())
LogPrintf("WalletUpdateSpent: bad wtx %s\n", wtx.GetHash().ToString().c_str()); LogPrintf("WalletUpdateSpent: bad wtx %s\n", wtx.GetHash().ToString());
else if (!wtx.IsSpent(txin.prevout.n) && IsMine(wtx.vout[txin.prevout.n])) else if (!wtx.IsSpent(txin.prevout.n) && IsMine(wtx.vout[txin.prevout.n]))
{ {
LogPrintf("WalletUpdateSpent found spent coin %sbc %s\n", FormatMoney(wtx.GetCredit()).c_str(), wtx.GetHash().ToString().c_str()); LogPrintf("WalletUpdateSpent found spent coin %sbc %s\n", FormatMoney(wtx.GetCredit()), wtx.GetHash().ToString());
wtx.MarkSpent(txin.prevout.n); wtx.MarkSpent(txin.prevout.n);
wtx.WriteToDisk(); wtx.WriteToDisk();
NotifyTransactionChanged(this, txin.prevout.hash, CT_UPDATED); NotifyTransactionChanged(this, txin.prevout.hash, CT_UPDATED);
@ -460,8 +460,8 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn)
} }
else else
LogPrintf("AddToWallet() : found %s in block %s not in index\n", LogPrintf("AddToWallet() : found %s in block %s not in index\n",
wtxIn.GetHash().ToString().c_str(), wtxIn.GetHash().ToString(),
wtxIn.hashBlock.ToString().c_str()); wtxIn.hashBlock.ToString());
} }
} }
@ -489,7 +489,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn)
} }
//// debug print //// debug print
LogPrintf("AddToWallet %s %s%s\n", wtxIn.GetHash().ToString().c_str(), (fInsertedNew ? "new" : ""), (fUpdated ? "update" : "")); LogPrintf("AddToWallet %s %s%s\n", wtxIn.GetHash().ToString(), (fInsertedNew ? "new" : ""), (fUpdated ? "update" : ""));
// Write to disk // Write to disk
if (fInsertedNew || fUpdated) if (fInsertedNew || fUpdated)
@ -690,7 +690,7 @@ void CWalletTx::GetAmounts(list<pair<CTxDestination, int64_t> >& listReceived,
if (!ExtractDestination(txout.scriptPubKey, address)) if (!ExtractDestination(txout.scriptPubKey, address))
{ {
LogPrintf("CWalletTx::GetAmounts: Unknown transaction type found, txid %s\n", LogPrintf("CWalletTx::GetAmounts: Unknown transaction type found, txid %s\n",
this->GetHash().ToString().c_str()); this->GetHash().ToString());
address = CNoDestination(); address = CNoDestination();
} }
@ -883,7 +883,7 @@ void CWallet::ReacceptWalletTransactions()
} }
if (fUpdated) if (fUpdated)
{ {
LogPrintf("ReacceptWalletTransactions found spent coin %sbc %s\n", FormatMoney(wtx.GetCredit()).c_str(), wtx.GetHash().ToString().c_str()); LogPrintf("ReacceptWalletTransactions found spent coin %sbc %s\n", FormatMoney(wtx.GetCredit()), wtx.GetHash().ToString());
wtx.MarkDirty(); wtx.MarkDirty();
wtx.WriteToDisk(); wtx.WriteToDisk();
} }
@ -919,7 +919,7 @@ void CWalletTx::RelayWalletTransaction()
{ {
if (GetDepthInMainChain() == 0) { if (GetDepthInMainChain() == 0) {
uint256 hash = GetHash(); uint256 hash = GetHash();
LogPrintf("Relaying wtx %s\n", hash.ToString().c_str()); LogPrintf("Relaying wtx %s\n", hash.ToString());
RelayTransaction((CTransaction)*this, hash); RelayTransaction((CTransaction)*this, hash);
} }
} }
@ -1186,8 +1186,8 @@ bool CWallet::SelectCoinsMinConf(int64_t nTargetValue, int nConfMine, int nConfT
LogPrint("selectcoins", "SelectCoins() best subset: "); LogPrint("selectcoins", "SelectCoins() best subset: ");
for (unsigned int i = 0; i < vValue.size(); i++) for (unsigned int i = 0; i < vValue.size(); i++)
if (vfBest[i]) if (vfBest[i])
LogPrint("selectcoins", "%s ", FormatMoney(vValue[i].first).c_str()); LogPrint("selectcoins", "%s ", FormatMoney(vValue[i].first));
LogPrint("selectcoins", "total %s\n", FormatMoney(nBest).c_str()); LogPrint("selectcoins", "total %s\n", FormatMoney(nBest));
} }
return true; return true;
@ -1396,7 +1396,7 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey)
{ {
{ {
LOCK2(cs_main, cs_wallet); LOCK2(cs_main, cs_wallet);
LogPrintf("CommitTransaction:\n%s", wtxNew.ToString().c_str()); LogPrintf("CommitTransaction:\n%s", wtxNew.ToString());
{ {
// This is only to keep the database open to defeat the auto-flush for the // This is only to keep the database open to defeat the auto-flush for the
// duration of this scope. This is the only place where this optimization // duration of this scope. This is the only place where this optimization
@ -1451,15 +1451,15 @@ string CWallet::SendMoney(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNe
if (IsLocked()) if (IsLocked())
{ {
string strError = _("Error: Wallet locked, unable to create transaction!"); string strError = _("Error: Wallet locked, unable to create transaction!");
LogPrintf("SendMoney() : %s", strError.c_str()); LogPrintf("SendMoney() : %s", strError);
return strError; return strError;
} }
string strError; string strError;
if (!CreateTransaction(scriptPubKey, nValue, wtxNew, reservekey, nFeeRequired, strError)) if (!CreateTransaction(scriptPubKey, nValue, wtxNew, reservekey, nFeeRequired, strError))
{ {
if (nValue + nFeeRequired > GetBalance()) if (nValue + nFeeRequired > GetBalance())
strError = strprintf(_("Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds!"), FormatMoney(nFeeRequired).c_str()); strError = strprintf(_("Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds!"), FormatMoney(nFeeRequired));
LogPrintf("SendMoney() : %s\n", strError.c_str()); LogPrintf("SendMoney() : %s\n", strError);
return strError; return strError;
} }

View file

@ -374,12 +374,12 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue,
char fUnused; char fUnused;
ssValue >> fTmp >> fUnused >> wtx.strFromAccount; ssValue >> fTmp >> fUnused >> wtx.strFromAccount;
strErr = strprintf("LoadWallet() upgrading tx ver=%d %d '%s' %s", strErr = strprintf("LoadWallet() upgrading tx ver=%d %d '%s' %s",
wtx.fTimeReceivedIsTxTime, fTmp, wtx.strFromAccount.c_str(), hash.ToString().c_str()); wtx.fTimeReceivedIsTxTime, fTmp, wtx.strFromAccount, hash.ToString());
wtx.fTimeReceivedIsTxTime = fTmp; wtx.fTimeReceivedIsTxTime = fTmp;
} }
else else
{ {
strErr = strprintf("LoadWallet() repairing tx ver=%d %s", wtx.fTimeReceivedIsTxTime, hash.ToString().c_str()); strErr = strprintf("LoadWallet() repairing tx ver=%d %s", wtx.fTimeReceivedIsTxTime, hash.ToString());
wtx.fTimeReceivedIsTxTime = 0; wtx.fTimeReceivedIsTxTime = 0;
} }
wss.vWalletUpgrade.push_back(hash); wss.vWalletUpgrade.push_back(hash);
@ -390,12 +390,12 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue,
pwallet->mapWallet[hash] = wtx; pwallet->mapWallet[hash] = wtx;
//// debug print //// debug print
//LogPrintf("LoadWallet %s\n", wtx.GetHash().ToString().c_str()); //LogPrintf("LoadWallet %s\n", wtx.GetHash().ToString());
//LogPrintf(" %12"PRId64" %s %s %s\n", //LogPrintf(" %12"PRId64" %s %s %s\n",
// wtx.vout[0].nValue, // wtx.vout[0].nValue,
// DateTimeStrFormat("%Y-%m-%d %H:%M:%S", wtx.GetBlockTime()).c_str(), // DateTimeStrFormat("%Y-%m-%d %H:%M:%S", wtx.GetBlockTime()),
// wtx.hashBlock.ToString().c_str(), // wtx.hashBlock.ToString(),
// wtx.mapValue["message"].c_str()); // wtx.mapValue["message"]);
} }
else if (strType == "acentry") else if (strType == "acentry")
{ {
@ -646,7 +646,7 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet)
} }
} }
if (!strErr.empty()) if (!strErr.empty())
LogPrintf("%s\n", strErr.c_str()); LogPrintf("%s\n", strErr);
} }
pcursor->close(); pcursor->close();
} }
@ -779,10 +779,10 @@ bool BackupWallet(const CWallet& wallet, const string& strDest)
#else #else
filesystem::copy_file(pathSrc, pathDest); filesystem::copy_file(pathSrc, pathDest);
#endif #endif
LogPrintf("copied wallet.dat to %s\n", pathDest.string().c_str()); LogPrintf("copied wallet.dat to %s\n", pathDest.string());
return true; return true;
} catch(const filesystem::filesystem_error &e) { } catch(const filesystem::filesystem_error &e) {
LogPrintf("error copying wallet.dat to %s - %s\n", pathDest.string().c_str(), e.what()); LogPrintf("error copying wallet.dat to %s - %s\n", pathDest.string(), e.what());
return false; return false;
} }
} }
@ -810,10 +810,10 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys)
int result = dbenv.dbenv.dbrename(NULL, filename.c_str(), NULL, int result = dbenv.dbenv.dbrename(NULL, filename.c_str(), NULL,
newFilename.c_str(), DB_AUTO_COMMIT); newFilename.c_str(), DB_AUTO_COMMIT);
if (result == 0) if (result == 0)
LogPrintf("Renamed %s to %s\n", filename.c_str(), newFilename.c_str()); LogPrintf("Renamed %s to %s\n", filename, newFilename);
else else
{ {
LogPrintf("Failed to rename %s to %s\n", filename.c_str(), newFilename.c_str()); LogPrintf("Failed to rename %s to %s\n", filename, newFilename);
return false; return false;
} }
@ -821,7 +821,7 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys)
bool allOK = dbenv.Salvage(newFilename, true, salvagedData); bool allOK = dbenv.Salvage(newFilename, true, salvagedData);
if (salvagedData.empty()) if (salvagedData.empty())
{ {
LogPrintf("Salvage(aggressive) found no records in %s.\n", newFilename.c_str()); LogPrintf("Salvage(aggressive) found no records in %s.\n", newFilename);
return false; return false;
} }
LogPrintf("Salvage(aggressive) found %"PRIszu" records\n", salvagedData.size()); LogPrintf("Salvage(aggressive) found %"PRIszu" records\n", salvagedData.size());
@ -836,7 +836,7 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys)
0); 0);
if (ret > 0) if (ret > 0)
{ {
LogPrintf("Cannot create database file %s\n", filename.c_str()); LogPrintf("Cannot create database file %s\n", filename);
return false; return false;
} }
CWallet dummyWallet; CWallet dummyWallet;
@ -856,7 +856,7 @@ bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys)
continue; continue;
if (!fReadOK) if (!fReadOK)
{ {
LogPrintf("WARNING: CWalletDB::Recover skipping %s: %s\n", strType.c_str(), strErr.c_str()); LogPrintf("WARNING: CWalletDB::Recover skipping %s: %s\n", strType, strErr);
continue; continue;
} }
} }