aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2012-09-02 16:47:58 -0700
committerGavin Andresen <gavinandresen@gmail.com>2012-09-02 16:47:58 -0700
commiteaf00a3a5d80fb50d761c14b7c295df6ae2f0e44 (patch)
tree92c402e1cf3352c8079af84cc60f5129ffeb1d6f
parent4d0c2b6cf4e0d3ece4e785af442e8d5538770048 (diff)
parentddb709e9de1490afcfa1af045517d2228d5b864c (diff)
downloadbitcoin-eaf00a3a5d80fb50d761c14b7c295df6ae2f0e44.tar.xz
Merge pull request #1774 from luke-jr/refactor_times
Bugfix: Require OrderedTxItems to provide properly scoped accounting entry list
-rw-r--r--src/rpcwallet.cpp3
-rw-r--r--src/wallet.cpp8
-rw-r--r--src/wallet.h7
3 files changed, 12 insertions, 6 deletions
diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp
index be83b85c15..b8e6a4467a 100644
--- a/src/rpcwallet.cpp
+++ b/src/rpcwallet.cpp
@@ -1006,7 +1006,8 @@ Value listtransactions(const Array& params, bool fHelp)
Array ret;
- CWallet::TxItems txOrdered = pwalletMain->OrderedTxItems(strAccount);
+ std::list<CAccountingEntry> acentries;
+ CWallet::TxItems txOrdered = pwalletMain->OrderedTxItems(acentries, strAccount);
// iterate backwards until we have nCount items to return:
for (CWallet::TxItems::reverse_iterator it = txOrdered.rbegin(); it != txOrdered.rend(); ++it)
diff --git a/src/wallet.cpp b/src/wallet.cpp
index dc019d4924..6538ca9713 100644
--- a/src/wallet.cpp
+++ b/src/wallet.cpp
@@ -291,8 +291,7 @@ bool CWallet::EncryptWallet(const SecureString& strWalletPassphrase)
return true;
}
-CWallet::TxItems
-CWallet::OrderedTxItems(std::string strAccount)
+CWallet::TxItems CWallet::OrderedTxItems(std::list<CAccountingEntry>& acentries, std::string strAccount)
{
CWalletDB walletdb(strWalletFile);
@@ -306,7 +305,7 @@ CWallet::OrderedTxItems(std::string strAccount)
CWalletTx* wtx = &((*it).second);
txOrdered.insert(make_pair(wtx->nOrderPos, TxPair(wtx, (CAccountingEntry*)0)));
}
- list<CAccountingEntry> acentries;
+ acentries.clear();
walletdb.ListAccountCreditDebit(strAccount, acentries);
BOOST_FOREACH(CAccountingEntry& entry, acentries)
{
@@ -375,7 +374,8 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn)
{
// Tolerate times up to the last timestamp in the wallet not more than 5 minutes into the future
int64 latestTolerated = latestNow + 300;
- TxItems txOrdered = OrderedTxItems();
+ std::list<CAccountingEntry> acentries;
+ TxItems txOrdered = OrderedTxItems(acentries);
for (TxItems::reverse_iterator it = txOrdered.rbegin(); it != txOrdered.rend(); ++it)
{
CWalletTx *const pwtx = (*it).second.first;
diff --git a/src/wallet.h b/src/wallet.h
index 44f8a17d37..7fd33629fe 100644
--- a/src/wallet.h
+++ b/src/wallet.h
@@ -146,7 +146,12 @@ public:
typedef std::pair<CWalletTx*, CAccountingEntry*> TxPair;
typedef std::multimap<int64, TxPair > TxItems;
- TxItems OrderedTxItems(std::string strAccount = "");
+
+ /** Get the wallet's activity log
+ @return multimap of ordered transactions and accounting entries
+ @warning Returned pointers are *only* valid within the scope of passed acentries
+ */
+ TxItems OrderedTxItems(std::list<CAccountingEntry>& acentries, std::string strAccount = "");
void MarkDirty();
bool AddToWallet(const CWalletTx& wtxIn);