From ed6d0b5f852dc5f1c9407abecb5a9c6a7e42b4b2 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Sun, 15 Apr 2012 22:10:54 +0200 Subject: [PATCH] Remove headers.h --- bitcoin-qt.pro | 1 - src/addrman.h | 1 - src/allocators.h | 3 + src/base58.h | 1 + src/bignum.h | 2 +- src/bitcoinrpc.cpp | 5 +- src/checkpoints.cpp | 4 +- src/checkpoints.h | 1 - src/compat.h | 23 +++++ src/crypter.cpp | 2 - src/db.cpp | 9 +- src/db.h | 30 +----- src/headers.h | 91 ---------------- src/init.cpp | 149 +-------------------------- src/init.h | 2 + src/irc.cpp | 2 +- src/keystore.cpp | 3 +- src/main.cpp | 2 +- src/main.h | 3 - src/net.cpp | 2 +- src/netbase.h | 21 ---- src/noui.cpp | 1 - src/qt/addresstablemodel.cpp | 2 +- src/qt/bitcoin.cpp | 1 - src/qt/clientmodel.cpp | 2 +- src/qt/guiutil.cpp | 2 - src/qt/optionsmodel.cpp | 2 +- src/qt/qtipcserver.cpp | 2 +- src/qt/transactiondesc.cpp | 4 +- src/qt/transactionrecord.cpp | 2 +- src/qt/transactiontablemodel.cpp | 2 +- src/qt/walletmodel.cpp | 2 +- src/rpcdump.cpp | 2 +- src/script.cpp | 8 +- src/strlcpy.h | 4 + src/util.cpp | 171 ++++++++++++++++++++++++++++++- src/util.h | 11 +- src/wallet.cpp | 6 +- src/wallet.h | 35 ++++++- 39 files changed, 288 insertions(+), 328 deletions(-) delete mode 100644 src/headers.h diff --git a/bitcoin-qt.pro b/bitcoin-qt.pro index 14ee947c..f79216e8 100644 --- a/bitcoin-qt.pro +++ b/bitcoin-qt.pro @@ -119,7 +119,6 @@ HEADERS += src/qt/bitcoingui.h \ src/db.h \ src/script.h \ src/init.h \ - src/headers.h \ src/irc.h \ src/mruset.h \ src/json/json_spirit_writer_template.h \ diff --git a/src/addrman.h b/src/addrman.h index 7652df66..160f8f8f 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -6,7 +6,6 @@ #include "netbase.h" #include "protocol.h" -#include "util.h" #include diff --git a/src/allocators.h b/src/allocators.h index 85d9cfbb..cdea66dd 100644 --- a/src/allocators.h +++ b/src/allocators.h @@ -8,6 +8,9 @@ #include #ifdef WIN32 +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif #define _WIN32_WINNT 0x0501 #define WIN32_LEAN_AND_MEAN 1 #ifndef NOMINMAX diff --git a/src/base58.h b/src/base58.h index 90ce34b0..24b7f3ab 100644 --- a/src/base58.h +++ b/src/base58.h @@ -19,6 +19,7 @@ #include #include "bignum.h" #include "key.h" +#include "util.h" static const char* pszBase58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; diff --git a/src/bignum.h b/src/bignum.h index daf5f688..cea8e1e3 100644 --- a/src/bignum.h +++ b/src/bignum.h @@ -9,7 +9,7 @@ #include #include -#include "util.h" +#include "util.h" // for uint64 /** Errors thrown by the bignum class */ class bignum_error : public std::runtime_error diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index 9fafee32..9294f935 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -3,10 +3,13 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" +#include "main.h" +#include "wallet.h" #include "db.h" #include "net.h" #include "init.h" +#include "ui_interface.h" + #undef printf #include #include diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index f5ce0538..cf56fa06 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -5,9 +5,11 @@ #include // for 'map_list_of()' #include -#include "headers.h" #include "checkpoints.h" +#include "main.h" +#include "uint256.h" + namespace Checkpoints { typedef std::map MapCheckpoints; diff --git a/src/checkpoints.h b/src/checkpoints.h index 38902ac0..5d3228f3 100644 --- a/src/checkpoints.h +++ b/src/checkpoints.h @@ -5,7 +5,6 @@ #define BITCOIN_CHECKPOINT_H #include -#include "util.h" class uint256; class CBlockIndex; diff --git a/src/compat.h b/src/compat.h index 88261003..db340445 100644 --- a/src/compat.h +++ b/src/compat.h @@ -5,6 +5,28 @@ #ifndef _BITCOIN_COMPAT_H #define _BITCOIN_COMPAT_H 1 +#ifdef WIN32 +#define _WIN32_WINNT 0x0501 +#define WIN32_LEAN_AND_MEAN 1 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include +#include +#include +#else +#include +#include +#include +#include +#include +#include +#include +#endif +#ifdef BSD +#include +#endif + typedef u_int SOCKET; #ifdef WIN32 #define MSG_NOSIGNAL 0 @@ -39,4 +61,5 @@ inline int myclosesocket(SOCKET& hSocket) } #define closesocket(s) myclosesocket(s) + #endif diff --git a/src/crypter.cpp b/src/crypter.cpp index 2501305e..5713faf1 100644 --- a/src/crypter.cpp +++ b/src/crypter.cpp @@ -6,13 +6,11 @@ #include #include #include -#include "headers.h" #ifdef WIN32 #include #endif #include "crypter.h" -#include "main.h" #include "util.h" bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod) diff --git a/src/db.cpp b/src/db.cpp index 2d136914..60dba3b3 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -3,13 +3,18 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "db.h" -#include "net.h" +#include "util.h" +#include "main.h" +#include "wallet.h" #include #include #include +#ifndef WIN32 +#include "sys/stat.h" +#endif + using namespace std; using namespace boost; diff --git a/src/db.h b/src/db.h index 47fa4024..9ebcf0d4 100644 --- a/src/db.h +++ b/src/db.h @@ -6,6 +6,8 @@ #define BITCOIN_DB_H #include "key.h" +#include "main.h" +#include "wallet.h" #include #include @@ -313,34 +315,6 @@ public: bool LoadAddresses(); -/** A key pool entry */ -class CKeyPool -{ -public: - int64 nTime; - std::vector vchPubKey; - - CKeyPool() - { - nTime = GetTime(); - } - - CKeyPool(const std::vector& vchPubKeyIn) - { - nTime = GetTime(); - vchPubKey = vchPubKeyIn; - } - - IMPLEMENT_SERIALIZE - ( - if (!(nType & SER_GETHASH)) - READWRITE(nVersion); - READWRITE(nTime); - READWRITE(vchPubKey); - ) -}; - - /** Error statuses for the wallet database */ enum DBErrors diff --git a/src/headers.h b/src/headers.h deleted file mode 100644 index ceee0289..00000000 --- a/src/headers.h +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) 2009-2010 Satoshi Nakamoto -// Copyright (c) 2009-2012 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. - -#ifdef _MSC_VER -#pragma warning(disable:4786) -#pragma warning(disable:4804) -#pragma warning(disable:4805) -#pragma warning(disable:4717) -#endif -#ifdef _WIN32_WINNT -#undef _WIN32_WINNT -#endif -#define _WIN32_WINNT 0x0501 -#ifdef _WIN32_IE -#undef _WIN32_IE -#endif -#define _WIN32_IE 0x0400 -#define WIN32_LEAN_AND_MEAN 1 -#ifndef NOMINMAX -#define NOMINMAX -#endif -// Include boost/foreach here as it defines __STDC_LIMIT_MACROS on some systems. -#include - -#if (defined(__unix__) || defined(unix)) && !defined(USG) -#include // to get BSD define -#endif -#ifdef MAC_OSX -#ifndef BSD -#define BSD 1 -#endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef WIN32 -#include -#include -#include -#include -#include -#include -#include -#include -#else -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#endif -#ifdef BSD -#include -#endif - - -#include "serialize.h" -#include "uint256.h" -#include "util.h" -#include "bignum.h" -#include "base58.h" -#include "main.h" -#include "wallet.h" -#include "ui_interface.h" diff --git a/src/init.cpp b/src/init.cpp index 2be0027a..2f03f24e 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -2,19 +2,20 @@ // Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "db.h" #include "bitcoinrpc.h" #include "net.h" #include "init.h" #include "strlcpy.h" +#include "util.h" +#include "ui_interface.h" #include #include #include #include -#ifdef WIN32 -#define strncasecmp strnicmp +#ifndef WIN32 +#include #endif using namespace std; @@ -583,145 +584,3 @@ bool AppInit2(int argc, char* argv[]) return true; } -#ifdef WIN32 -boost::filesystem::path StartupShortcutPath() -{ - return MyGetSpecialFolderPath(CSIDL_STARTUP, true) / "Bitcoin.lnk"; -} - -bool GetStartOnSystemStartup() -{ - return filesystem::exists(StartupShortcutPath()); -} - -bool SetStartOnSystemStartup(bool fAutoStart) -{ - // If the shortcut exists already, remove it for updating - boost::filesystem::remove(StartupShortcutPath()); - - if (fAutoStart) - { - CoInitialize(NULL); - - // Get a pointer to the IShellLink interface. - IShellLink* psl = NULL; - HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, - CLSCTX_INPROC_SERVER, IID_IShellLink, - reinterpret_cast(&psl)); - - if (SUCCEEDED(hres)) - { - // Get the current executable path - TCHAR pszExePath[MAX_PATH]; - GetModuleFileName(NULL, pszExePath, sizeof(pszExePath)); - - TCHAR pszArgs[5] = TEXT("-min"); - - // Set the path to the shortcut target - psl->SetPath(pszExePath); - PathRemoveFileSpec(pszExePath); - psl->SetWorkingDirectory(pszExePath); - psl->SetShowCmd(SW_SHOWMINNOACTIVE); - psl->SetArguments(pszArgs); - - // Query IShellLink for the IPersistFile interface for - // saving the shortcut in persistent storage. - IPersistFile* ppf = NULL; - hres = psl->QueryInterface(IID_IPersistFile, - reinterpret_cast(&ppf)); - if (SUCCEEDED(hres)) - { - WCHAR pwsz[MAX_PATH]; - // Ensure that the string is ANSI. - MultiByteToWideChar(CP_ACP, 0, StartupShortcutPath().string().c_str(), -1, pwsz, MAX_PATH); - // Save the link by calling IPersistFile::Save. - hres = ppf->Save(pwsz, TRUE); - ppf->Release(); - psl->Release(); - CoUninitialize(); - return true; - } - psl->Release(); - } - CoUninitialize(); - return false; - } - return true; -} - -#elif defined(LINUX) - -// Follow the Desktop Application Autostart Spec: -// http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html - -boost::filesystem::path GetAutostartDir() -{ - namespace fs = boost::filesystem; - - char* pszConfigHome = getenv("XDG_CONFIG_HOME"); - if (pszConfigHome) return fs::path(pszConfigHome) / "autostart"; - char* pszHome = getenv("HOME"); - if (pszHome) return fs::path(pszHome) / ".config" / "autostart"; - return fs::path(); -} - -boost::filesystem::path GetAutostartFilePath() -{ - return GetAutostartDir() / "bitcoin.desktop"; -} - -bool GetStartOnSystemStartup() -{ - boost::filesystem::ifstream optionFile(GetAutostartFilePath()); - if (!optionFile.good()) - return false; - // Scan through file for "Hidden=true": - string line; - while (!optionFile.eof()) - { - getline(optionFile, line); - if (line.find("Hidden") != string::npos && - line.find("true") != string::npos) - return false; - } - optionFile.close(); - - return true; -} - -bool SetStartOnSystemStartup(bool fAutoStart) -{ - if (!fAutoStart) - boost::filesystem::remove(GetAutostartFilePath()); - else - { - char pszExePath[MAX_PATH+1]; - memset(pszExePath, 0, sizeof(pszExePath)); - if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1) - return false; - - boost::filesystem::create_directories(GetAutostartDir()); - - boost::filesystem::ofstream optionFile(GetAutostartFilePath(), ios_base::out|ios_base::trunc); - if (!optionFile.good()) - return false; - // Write a bitcoin.desktop file to the autostart directory: - optionFile << "[Desktop Entry]\n"; - optionFile << "Type=Application\n"; - optionFile << "Name=Bitcoin\n"; - optionFile << "Exec=" << pszExePath << " -min\n"; - optionFile << "Terminal=false\n"; - optionFile << "Hidden=false\n"; - optionFile.close(); - } - return true; -} -#else - -// TODO: OSX startup stuff; see: -// http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html - -bool GetStartOnSystemStartup() { return false; } -bool SetStartOnSystemStartup(bool fAutoStart) { return false; } - -#endif diff --git a/src/init.h b/src/init.h index 0d60e754..e3971c85 100644 --- a/src/init.h +++ b/src/init.h @@ -5,6 +5,8 @@ #ifndef BITCOIN_INIT_H #define BITCOIN_INIT_H +#include "wallet.h" + extern CWallet* pwalletMain; void Shutdown(void* parg); diff --git a/src/irc.cpp b/src/irc.cpp index d535f59c..23749705 100644 --- a/src/irc.cpp +++ b/src/irc.cpp @@ -3,10 +3,10 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "irc.h" #include "net.h" #include "strlcpy.h" +#include "base58.h" using namespace std; using namespace boost; diff --git a/src/keystore.cpp b/src/keystore.cpp index 7b46f6b0..664f0b12 100644 --- a/src/keystore.cpp +++ b/src/keystore.cpp @@ -3,9 +3,8 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" +#include "keystore.h" #include "crypter.h" -#include "db.h" #include "script.h" bool CKeyStore::GetPubKey(const CBitcoinAddress &address, std::vector &vchPubKeyOut) const diff --git a/src/main.cpp b/src/main.cpp index 60b398c1..c2236d99 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,11 +2,11 @@ // Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "checkpoints.h" #include "db.h" #include "net.h" #include "init.h" +#include "ui_interface.h" #include #include #include diff --git a/src/main.h b/src/main.h index c48252fb..a6744900 100644 --- a/src/main.h +++ b/src/main.h @@ -9,7 +9,6 @@ #include "net.h" #include "key.h" #include "script.h" -#include "db.h" #include "version.h" #ifdef WIN32 @@ -35,8 +34,6 @@ static const unsigned int MAX_BLOCK_SIZE = 1000000; static const unsigned int MAX_BLOCK_SIZE_GEN = MAX_BLOCK_SIZE/2; static const int MAX_BLOCK_SIGOPS = MAX_BLOCK_SIZE/50; static const int MAX_ORPHAN_TRANSACTIONS = MAX_BLOCK_SIZE/100; -static const int64 COIN = 100000000; -static const int64 CENT = 1000000; static const int64 MIN_TX_FEE = 50000; static const int64 MIN_RELAY_TX_FEE = 10000; static const int64 MAX_MONEY = 21000000 * COIN; diff --git a/src/net.cpp b/src/net.cpp index 7d621ac5..38c0d3d5 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -3,13 +3,13 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "irc.h" #include "db.h" #include "net.h" #include "init.h" #include "strlcpy.h" #include "addrman.h" +#include "ui_interface.h" #ifdef WIN32 #include diff --git a/src/netbase.h b/src/netbase.h index 6a257cf9..00b6850b 100644 --- a/src/netbase.h +++ b/src/netbase.h @@ -7,27 +7,6 @@ #include #include -#ifdef WIN32 -#define _WIN32_WINNT 0x0501 -#define WIN32_LEAN_AND_MEAN 1 -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#include -#include -#else -#include -#include -#include -#include -#include -#include -#endif -#ifdef BSD -#include -#endif - #include "serialize.h" #include "compat.h" diff --git a/src/noui.cpp b/src/noui.cpp index 077e460a..08a08b43 100644 --- a/src/noui.cpp +++ b/src/noui.cpp @@ -5,7 +5,6 @@ #include "ui_interface.h" #include -#include "headers.h" #include "init.h" int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style) diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp index 0239a167..7b95f51c 100644 --- a/src/qt/addresstablemodel.cpp +++ b/src/qt/addresstablemodel.cpp @@ -2,7 +2,7 @@ #include "guiutil.h" #include "walletmodel.h" -#include "headers.h" +#include "wallet.h" #include #include diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 463b2cfa..dfcd2af3 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -7,7 +7,6 @@ #include "optionsmodel.h" #include "guiutil.h" -#include "headers.h" #include "init.h" #include "qtipcserver.h" diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 284bee0e..cb602ce3 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -4,7 +4,7 @@ #include "addresstablemodel.h" #include "transactiontablemodel.h" -#include "headers.h" +#include "main.h" #include diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index cb247324..f1e8a5f1 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -3,8 +3,6 @@ #include "walletmodel.h" #include "bitcoinunits.h" -#include "headers.h" - #include #include #include diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index ed2225cb..736be7f7 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -2,8 +2,8 @@ #include "bitcoinunits.h" #include -#include "headers.h" #include "init.h" +#include "db.h" OptionsModel::OptionsModel(QObject *parent) : QAbstractListModel(parent) diff --git a/src/qt/qtipcserver.cpp b/src/qt/qtipcserver.cpp index 3c7889ca..f7bccaaf 100644 --- a/src/qt/qtipcserver.cpp +++ b/src/qt/qtipcserver.cpp @@ -7,7 +7,7 @@ #include #include -#include "headers.h" +#include "util.h" #include "qtipcserver.h" using namespace boost::interprocess; diff --git a/src/qt/transactiondesc.cpp b/src/qt/transactiondesc.cpp index dd7dd613..286cddf2 100644 --- a/src/qt/transactiondesc.cpp +++ b/src/qt/transactiondesc.cpp @@ -3,7 +3,9 @@ #include "guiutil.h" #include "bitcoinunits.h" -#include "headers.h" +#include "main.h" +#include "wallet.h" +#include "db.h" #include "ui_interface.h" #include diff --git a/src/qt/transactionrecord.cpp b/src/qt/transactionrecord.cpp index 2f3b29cc..32350eaa 100644 --- a/src/qt/transactionrecord.cpp +++ b/src/qt/transactionrecord.cpp @@ -1,6 +1,6 @@ #include "transactionrecord.h" -#include "headers.h" +#include "wallet.h" /* Return positive answer if transaction should be shown in list. */ diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index 41c9db11..5f505f44 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -8,7 +8,7 @@ #include "addresstablemodel.h" #include "bitcoinunits.h" -#include "headers.h" +#include "wallet.h" #include #include diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index 9c28a8ab..8206394d 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -4,7 +4,7 @@ #include "addresstablemodel.h" #include "transactiontablemodel.h" -#include "headers.h" +#include "wallet.h" #include "db.h" // for BackupWallet #include diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp index 5bb4789c..1bc87e92 100644 --- a/src/rpcdump.cpp +++ b/src/rpcdump.cpp @@ -2,9 +2,9 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "init.h" // for pwalletMain #include "bitcoinrpc.h" +#include "ui_interface.h" #include diff --git a/src/script.cpp b/src/script.cpp index 21f101e1..ac1f0405 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -2,11 +2,17 @@ // Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" +#include using namespace std; using namespace boost; +#include "script.h" +#include "keystore.h" +#include "bignum.h" +#include "key.h" +#include "main.h" + bool CheckSig(vector vchSig, vector vchPubKey, CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); diff --git a/src/strlcpy.h b/src/strlcpy.h index d4d1908e..2cc786e9 100644 --- a/src/strlcpy.h +++ b/src/strlcpy.h @@ -15,6 +15,10 @@ */ #ifndef BITCOIN_STRLCPY_H #define BITCOIN_STRLCPY_H + +#include +#include + /* * Copy src to string dst of size siz. At most siz-1 characters * will be copied. Always NUL terminates (unless siz == 0). diff --git a/src/util.cpp b/src/util.cpp index c1e3c5a8..19005fc7 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -3,8 +3,9 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" +#include "util.h" #include "strlcpy.h" +#include "version.h" #include // Work around clang compilation problem in Boost 1.46: @@ -24,6 +25,31 @@ namespace boost { #include #include #include +#include +#include + +#ifdef WIN32 +#ifdef _MSC_VER +#pragma warning(disable:4786) +#pragma warning(disable:4804) +#pragma warning(disable:4805) +#pragma warning(disable:4717) +#endif +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif +#define _WIN32_WINNT 0x0501 +#ifdef _WIN32_IE +#undef _WIN32_IE +#endif +#define _WIN32_IE 0x0400 +#define WIN32_LEAN_AND_MEAN 1 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include "shlobj.h" +#include "shlwapi.h" +#endif using namespace std; using namespace boost; @@ -1064,6 +1090,149 @@ std::string FormatSubVersion(const std::string& name, int nClientVersion, const return ss.str(); } +#ifdef WIN32 +boost::filesystem::path static StartupShortcutPath() +{ + return MyGetSpecialFolderPath(CSIDL_STARTUP, true) / "Bitcoin.lnk"; +} + +bool GetStartOnSystemStartup() +{ + return filesystem::exists(StartupShortcutPath()); +} + +bool SetStartOnSystemStartup(bool fAutoStart) +{ + // If the shortcut exists already, remove it for updating + boost::filesystem::remove(StartupShortcutPath()); + + if (fAutoStart) + { + CoInitialize(NULL); + + // Get a pointer to the IShellLink interface. + IShellLink* psl = NULL; + HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, + CLSCTX_INPROC_SERVER, IID_IShellLink, + reinterpret_cast(&psl)); + + if (SUCCEEDED(hres)) + { + // Get the current executable path + TCHAR pszExePath[MAX_PATH]; + GetModuleFileName(NULL, pszExePath, sizeof(pszExePath)); + + TCHAR pszArgs[5] = TEXT("-min"); + + // Set the path to the shortcut target + psl->SetPath(pszExePath); + PathRemoveFileSpec(pszExePath); + psl->SetWorkingDirectory(pszExePath); + psl->SetShowCmd(SW_SHOWMINNOACTIVE); + psl->SetArguments(pszArgs); + + // Query IShellLink for the IPersistFile interface for + // saving the shortcut in persistent storage. + IPersistFile* ppf = NULL; + hres = psl->QueryInterface(IID_IPersistFile, + reinterpret_cast(&ppf)); + if (SUCCEEDED(hres)) + { + WCHAR pwsz[MAX_PATH]; + // Ensure that the string is ANSI. + MultiByteToWideChar(CP_ACP, 0, StartupShortcutPath().string().c_str(), -1, pwsz, MAX_PATH); + // Save the link by calling IPersistFile::Save. + hres = ppf->Save(pwsz, TRUE); + ppf->Release(); + psl->Release(); + CoUninitialize(); + return true; + } + psl->Release(); + } + CoUninitialize(); + return false; + } + return true; +} + +#elif defined(LINUX) + +// Follow the Desktop Application Autostart Spec: +// http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html + +boost::filesystem::path static GetAutostartDir() +{ + namespace fs = boost::filesystem; + + char* pszConfigHome = getenv("XDG_CONFIG_HOME"); + if (pszConfigHome) return fs::path(pszConfigHome) / "autostart"; + char* pszHome = getenv("HOME"); + if (pszHome) return fs::path(pszHome) / ".config" / "autostart"; + return fs::path(); +} + +boost::filesystem::path static GetAutostartFilePath() +{ + return GetAutostartDir() / "bitcoin.desktop"; +} + +bool GetStartOnSystemStartup() +{ + boost::filesystem::ifstream optionFile(GetAutostartFilePath()); + if (!optionFile.good()) + return false; + // Scan through file for "Hidden=true": + string line; + while (!optionFile.eof()) + { + getline(optionFile, line); + if (line.find("Hidden") != string::npos && + line.find("true") != string::npos) + return false; + } + optionFile.close(); + + return true; +} + +bool SetStartOnSystemStartup(bool fAutoStart) +{ + if (!fAutoStart) + boost::filesystem::remove(GetAutostartFilePath()); + else + { + char pszExePath[MAX_PATH+1]; + memset(pszExePath, 0, sizeof(pszExePath)); + if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1) + return false; + + boost::filesystem::create_directories(GetAutostartDir()); + + boost::filesystem::ofstream optionFile(GetAutostartFilePath(), ios_base::out|ios_base::trunc); + if (!optionFile.good()) + return false; + // Write a bitcoin.desktop file to the autostart directory: + optionFile << "[Desktop Entry]\n"; + optionFile << "Type=Application\n"; + optionFile << "Name=Bitcoin\n"; + optionFile << "Exec=" << pszExePath << " -min\n"; + optionFile << "Terminal=false\n"; + optionFile << "Hidden=false\n"; + optionFile.close(); + } + return true; +} +#else + +// TODO: OSX startup stuff; see: +// http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html + +bool GetStartOnSystemStartup() { return false; } +bool SetStartOnSystemStartup(bool fAutoStart) { return false; } + +#endif + #ifdef DEBUG_LOCKORDER diff --git a/src/util.h b/src/util.h index f6cb3caa..a4424771 100644 --- a/src/util.h +++ b/src/util.h @@ -31,11 +31,15 @@ typedef int pid_t; /* define for windows compatiblity */ #include #include -#include "netbase.h" +#include "netbase.h" // for AddTimeData +#include "ui_interface.h" typedef long long int64; typedef unsigned long long uint64; +static const int64 COIN = 100000000; +static const int64 CENT = 1000000; + #define loop for (;;) #define BEGIN(a) ((char*)&(a)) #define END(a) ((char*)&((&(a))[1])) @@ -160,9 +164,8 @@ boost::filesystem::path GetConfigFile(); boost::filesystem::path GetPidFile(); void CreatePidFile(const boost::filesystem::path &path, pid_t pid); bool ReadConfigFile(std::map& mapSettingsRet, std::map >& mapMultiSettingsRet); -#ifdef WIN32 -boost::filesystem::path MyGetSpecialFolderPath(int nFolder, bool fCreate); -#endif +bool GetStartOnSystemStartup(); +bool SetStartOnSystemStartup(bool fAutoStart); void ShrinkDebugFile(); int GetRandInt(int nMax); uint64 GetRand(uint64 nMax); diff --git a/src/wallet.cpp b/src/wallet.cpp index 9f531082..6a2bf022 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -3,7 +3,6 @@ // Distributed under the MIT/X11 software license, see the accompanying // file license.txt or http://www.opensource.org/licenses/mit-license.php. -#include "headers.h" #include "db.h" #include "crypter.h" @@ -137,6 +136,11 @@ bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, return false; } +void CWallet::SetBestChain(const CBlockLocator& loc) +{ + CWalletDB walletdb(strWalletFile); + walletdb.WriteBestBlock(loc); +} // This class implements an addrIncoming entry that causes pre-0.4 // clients to crash on startup if reading a private-key-encrypted wallet. diff --git a/src/wallet.h b/src/wallet.h index b1ee40ab..3d9387ff 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -5,6 +5,7 @@ #ifndef BITCOIN_WALLET_H #define BITCOIN_WALLET_H +#include "main.h" #include "bignum.h" #include "key.h" #include "keystore.h" @@ -25,6 +26,34 @@ enum WalletFeature FEATURE_LATEST = 60000 }; + +/** A key pool entry */ +class CKeyPool +{ +public: + int64 nTime; + std::vector vchPubKey; + + CKeyPool() + { + nTime = GetTime(); + } + + CKeyPool(const std::vector& vchPubKeyIn) + { + nTime = GetTime(); + vchPubKey = vchPubKeyIn; + } + + IMPLEMENT_SERIALIZE + ( + if (!(nType & SER_GETHASH)) + READWRITE(nVersion); + READWRITE(nTime); + READWRITE(vchPubKey); + ) +}; + /** A CWallet is an extension of a keystore, which also maintains a set of transactions and balances, * and provides the ability to create new transactions. */ @@ -196,11 +225,7 @@ public: } return nChange; } - void SetBestChain(const CBlockLocator& loc) - { - CWalletDB walletdb(strWalletFile); - walletdb.WriteBestBlock(loc); - } + void SetBestChain(const CBlockLocator& loc); int LoadWallet(bool& fFirstRunRet); // bool BackupWallet(const std::string& strDest);