X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Futil.cpp;h=0c3132425e6cbaa2f6e8d1dd7fdf1fea17118782;hb=3176e0f244d929669aa3e1d81e0787d82d9150d3;hp=016e9deb0ce8c77d8535f9fcebb2bd2337761848;hpb=1d8c7a9557d596d4c7edee801a724db7a908bce5;p=novacoin.git diff --git a/src/util.cpp b/src/util.cpp index 016e9de..0c31324 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,7 +1,8 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2012 The Bitcoin developers +// Copyright (c) 2011-2012 The PPCoin developers // Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "util.h" #include "strlcpy.h" @@ -26,6 +27,7 @@ namespace boost { #include #include #include +#include #include #include @@ -52,6 +54,10 @@ namespace boost { #include "shlwapi.h" #endif +#ifndef WIN32 +#include +#endif + using namespace std; using namespace boost; @@ -149,7 +155,7 @@ void RandAddSeedPerfmon() { RAND_add(pdata, nSize, nSize/100.0); memset(pdata, 0, nSize); - printf("%s RandAddSeed() %d bytes\n", DateTimeStrFormat("%x %H:%M", GetTime()).c_str(), nSize); + printf("%s RandAddSeed() %d bytes\n", DateTimeStrFormat(GetTime()).c_str(), nSize); } #endif } @@ -174,6 +180,12 @@ int GetRandInt(int nMax) return GetRand(nMax); } +uint256 GetRandHash() +{ + uint256 hash; + RAND_bytes((unsigned char*)&hash, sizeof(hash)); + return hash; +} @@ -182,7 +194,7 @@ int GetRandInt(int nMax) - +static FILE* fileout = NULL; inline int OutputDebugStringF(const char* pszFormat, ...) { @@ -198,8 +210,6 @@ inline int OutputDebugStringF(const char* pszFormat, ...) else { // print to debug.log - static FILE* fileout = NULL; - if (!fileout) { boost::filesystem::path pathDebug = GetDataDir() / "debug.log"; @@ -209,10 +219,12 @@ inline int OutputDebugStringF(const char* pszFormat, ...) if (fileout) { static bool fStartedNewLine = true; + static boost::mutex mutexDebugLog; + boost::mutex::scoped_lock scoped_lock(mutexDebugLog); // Debug print useful for profiling if (fLogTimestamps && fStartedNewLine) - fprintf(fileout, "%s ", DateTimeStrFormat("%x %H:%M:%S", GetTime()).c_str()); + fprintf(fileout, "%s ", DateTimeStrFormat(GetTime()).c_str()); if (pszFormat[strlen(pszFormat) - 1] == '\n') fStartedNewLine = true; else @@ -252,7 +264,7 @@ inline int OutputDebugStringF(const char* pszFormat, ...) *pend = '\0'; char* p1 = pszBuffer; char* p2; - while (p2 = strchr(p1, '\n')) + while ((p2 = strchr(p1, '\n'))) { p2++; char c = *p2; @@ -362,7 +374,7 @@ string FormatMoney(int64 n, bool fPlus) int64 n_abs = (n > 0 ? n : -n); int64 quotient = n_abs/COIN; int64 remainder = n_abs%COIN; - string str = strprintf("%"PRI64d".%08"PRI64d, quotient, remainder); + string str = strprintf("%"PRI64d".%06"PRI64d, quotient, remainder); // Right-trim excess 0's before the decimal point: int nTrim = 0; @@ -765,7 +777,7 @@ void FormatException(char* pszMessage, std::exception* pex, const char* pszThrea pszModule[0] = '\0'; GetModuleFileNameA(NULL, pszModule, sizeof(pszModule)); #else - const char* pszModule = "bitcoin"; + const char* pszModule = "novacoin"; #endif if (pex) snprintf(pszMessage, 1000, @@ -792,6 +804,19 @@ void PrintException(std::exception* pex, const char* pszThread) throw; } +void LogStackTrace() { + printf("\n\n******* exception encountered *******\n"); + if (fileout) + { +#ifndef WIN32 + void* pszBuffer[32]; + size_t size; + size = backtrace(pszBuffer, 32); + backtrace_symbols_fd(pszBuffer, size, fileno(fileout)); +#endif + } +} + void PrintExceptionContinue(std::exception* pex, const char* pszThread) { char pszMessage[10000]; @@ -827,12 +852,12 @@ boost::filesystem::path GetDefaultDataDir() { namespace fs = boost::filesystem; - // Windows: C:\Documents and Settings\username\Application Data\Bitcoin - // Mac: ~/Library/Application Support/Bitcoin - // Unix: ~/.bitcoin + // Windows: C:\Documents and Settings\username\Application Data\NovaCoin + // Mac: ~/Library/Application Support/NovaCoin + // Unix: ~/.ppcoin #ifdef WIN32 // Windows - return MyGetSpecialFolderPath(CSIDL_APPDATA, true) / "Bitcoin"; + return MyGetSpecialFolderPath(CSIDL_APPDATA, true) / "NovaCoin"; #else fs::path pathRet; char* pszHome = getenv("HOME"); @@ -843,11 +868,11 @@ boost::filesystem::path GetDefaultDataDir() #ifdef MAC_OSX // Mac pathRet /= "Library/Application Support"; - filesystem::create_directory(pathRet); - return pathRet / "Bitcoin"; + fs::create_directory(pathRet); + return pathRet / "NovaCoin"; #else // Unix - return pathRet / ".bitcoin"; + return pathRet / ".novacoin"; #endif #endif } @@ -870,7 +895,11 @@ const boost::filesystem::path &GetDataDir(bool fNetSpecific) LOCK(csPathCached); if (mapArgs.count("-datadir")) { - path = mapArgs["-datadir"]; + path = fs::system_complete(mapArgs["-datadir"]); + if (!fs::is_directory(path)) { + path = ""; + return path; + } } else { path = GetDefaultDataDir(); } @@ -887,12 +916,12 @@ boost::filesystem::path GetConfigFile() { namespace fs = boost::filesystem; - fs::path pathConfigFile(GetArg("-conf", "bitcoin.conf")); + fs::path pathConfigFile(GetArg("-conf", "novacoin.conf")); if (!pathConfigFile.is_complete()) pathConfigFile = GetDataDir(false) / pathConfigFile; return pathConfigFile; } -bool ReadConfigFile(map& mapSettingsRet, +void ReadConfigFile(map& mapSettingsRet, map >& mapMultiSettingsRet) { namespace fs = boost::filesystem; @@ -900,7 +929,7 @@ bool ReadConfigFile(map& mapSettingsRet, fs::ifstream streamConfig(GetConfigFile()); if (!streamConfig.good()) - return true; // No bitcoin.conf file is OK + return; // No bitcoin.conf file is OK set setOptions; setOptions.insert("*"); @@ -917,14 +946,13 @@ bool ReadConfigFile(map& mapSettingsRet, } mapMultiSettingsRet[strKey].push_back(it->value[0]); } - return true; } boost::filesystem::path GetPidFile() { namespace fs = boost::filesystem; - fs::path pathPidFile(GetArg("-pid", "bitcoind.pid")); + fs::path pathPidFile(GetArg("-pid", "novacoind.pid")); if (!pathPidFile.is_complete()) pathPidFile = GetDataDir() / pathPidFile; return pathPidFile; } @@ -1043,10 +1071,10 @@ void AddTimeData(const CNetAddr& ip, int64 nTime) if (!fMatch) { 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 NovaCoin will not work properly."); strMiscWarning = strMessage; printf("*** %s\n", strMessage.c_str()); - ThreadSafeMessageBox(strMessage+" ", string("Bitcoin"), wxOK | wxICON_EXCLAMATION); + ThreadSafeMessageBox(strMessage+" ", string("NovaCoin"), wxOK | wxICON_EXCLAMATION); } } } @@ -1094,7 +1122,7 @@ std::string FormatSubVersion(const std::string& name, int nClientVersion, const #ifdef WIN32 boost::filesystem::path static StartupShortcutPath() { - return MyGetSpecialFolderPath(CSIDL_STARTUP, true) / "Bitcoin.lnk"; + return MyGetSpecialFolderPath(CSIDL_STARTUP, true) / "NovaCoin.lnk"; } bool GetStartOnSystemStartup() @@ -1175,7 +1203,7 @@ boost::filesystem::path static GetAutostartDir() boost::filesystem::path static GetAutostartFilePath() { - return GetAutostartDir() / "bitcoin.desktop"; + return GetAutostartDir() / "novacoin.desktop"; } bool GetStartOnSystemStartup() @@ -1216,7 +1244,7 @@ bool SetStartOnSystemStartup(bool fAutoStart) // Write a bitcoin.desktop file to the autostart directory: optionFile << "[Desktop Entry]\n"; optionFile << "Type=Application\n"; - optionFile << "Name=Bitcoin\n"; + optionFile << "Name=NovaCoin\n"; optionFile << "Exec=" << pszExePath << " -min\n"; optionFile << "Terminal=false\n"; optionFile << "Hidden=false\n";