diff --git a/src/bitcoindjs.cc b/src/bitcoindjs.cc index 032b6598..489fbdb2 100644 --- a/src/bitcoindjs.cc +++ b/src/bitcoindjs.cc @@ -237,21 +237,8 @@ static volatile bool shutdownComplete = false; */ struct async_node_data { - char *err_msg; - char *result; - Persistent callback; -}; - -/** - * async_log_data - * Where the uv async request data resides. - */ - -struct async_log_data { - char *err_msg; - int **out_pipe; - int **log_pipe; - char *result; + std::string err_msg; + std::string result; Persistent callback; }; @@ -362,19 +349,19 @@ NAN_METHOD(StartBitcoind) { // Run bitcoind's StartNode() on a separate thread. // - async_node_data *data_start_node = new async_node_data(); - data_start_node->err_msg = NULL; - data_start_node->result = NULL; - data_start_node->callback = Persistent::New(callback); + async_node_data *data = new async_node_data(); + data->err_msg = std::string(""); + data->result = std::string(""); + data->callback = Persistent::New(callback); - uv_work_t *req_start_node = new uv_work_t(); - req_start_node->data = data_start_node; + uv_work_t *req = new uv_work_t(); + req->data = data; - int status_start_node = uv_queue_work(uv_default_loop(), - req_start_node, async_start_node_work, + int status = uv_queue_work(uv_default_loop(), + req, async_start_node_work, (uv_after_work_cb)async_start_node_after); - assert(status_start_node == 0); + assert(status == 0); NanReturnValue(NanNew(-1)); } @@ -386,9 +373,9 @@ NAN_METHOD(StartBitcoind) { static void async_start_node_work(uv_work_t *req) { - async_node_data *node_data = static_cast(req->data); + async_node_data *data = static_cast(req->data); start_node(); - node_data->result = (char *)strdup("start_node(): bitcoind opened."); + data->result = std::string("start_node(): bitcoind opened."); } /** @@ -399,15 +386,14 @@ async_start_node_work(uv_work_t *req) { static void async_start_node_after(uv_work_t *req) { NanScope(); - async_node_data *node_data = static_cast(req->data); + async_node_data *data = static_cast(req->data); - if (node_data->err_msg != NULL) { - Local err = Exception::Error(String::New(node_data->err_msg)); - free(node_data->err_msg); + if (!data->err_msg.empty()) { + Local err = Exception::Error(String::New(data->err_msg.c_str())); const unsigned argc = 1; Local argv[argc] = { err }; TryCatch try_catch; - node_data->callback->Call(Context::GetCurrent()->Global(), argc, argv); + data->callback->Call(Context::GetCurrent()->Global(), argc, argv); if (try_catch.HasCaught()) { node::FatalException(try_catch); } @@ -415,22 +401,18 @@ async_start_node_after(uv_work_t *req) { const unsigned argc = 2; Local argv[argc] = { Local::New(Null()), - Local::New(String::New(node_data->result)) + Local::New(String::New(data->result.c_str())) }; TryCatch try_catch; - node_data->callback->Call(Context::GetCurrent()->Global(), argc, argv); + data->callback->Call(Context::GetCurrent()->Global(), argc, argv); if (try_catch.HasCaught()) { node::FatalException(try_catch); } } - // node_data->callback.Dispose(); + // data->callback.Dispose(); - if (node_data->result != NULL) { - free(node_data->result); - } - - delete node_data; + delete data; delete req; } @@ -536,19 +518,19 @@ NAN_METHOD(StopBitcoind) { // Run bitcoind's StartShutdown() on a separate thread. // - async_node_data *data_stop_node = new async_node_data(); - data_stop_node->err_msg = NULL; - data_stop_node->result = NULL; - data_stop_node->callback = Persistent::New(callback); + async_node_data *data = new async_node_data(); + data->err_msg = std::string(""); + data->result = std::string(""); + data->callback = Persistent::New(callback); - uv_work_t *req_stop_node = new uv_work_t(); - req_stop_node->data = data_stop_node; + uv_work_t *req = new uv_work_t(); + req->data = data; - int status_stop_node = uv_queue_work(uv_default_loop(), - req_stop_node, async_stop_node_work, + int status = uv_queue_work(uv_default_loop(), + req, async_stop_node_work, (uv_after_work_cb)async_stop_node_after); - assert(status_stop_node == 0); + assert(status == 0); NanReturnValue(Undefined()); } @@ -560,9 +542,9 @@ NAN_METHOD(StopBitcoind) { static void async_stop_node_work(uv_work_t *req) { - async_node_data *node_data = static_cast(req->data); + async_node_data *data = static_cast(req->data); StartShutdown(); - node_data->result = (char *)strdup("stop_node(): bitcoind shutdown."); + data->result = std::string("stop_node(): bitcoind shutdown."); } /** @@ -573,15 +555,14 @@ async_stop_node_work(uv_work_t *req) { static void async_stop_node_after(uv_work_t *req) { NanScope(); - async_node_data* node_data = static_cast(req->data); + async_node_data* data = static_cast(req->data); - if (node_data->err_msg != NULL) { - Local err = Exception::Error(String::New(node_data->err_msg)); - free(node_data->err_msg); + if (!data->err_msg.empty()) { + Local err = Exception::Error(String::New(data->err_msg.c_str())); const unsigned argc = 1; Local argv[argc] = { err }; TryCatch try_catch; - node_data->callback->Call(Context::GetCurrent()->Global(), argc, argv); + data->callback->Call(Context::GetCurrent()->Global(), argc, argv); if (try_catch.HasCaught()) { node::FatalException(try_catch); } @@ -589,22 +570,18 @@ async_stop_node_after(uv_work_t *req) { const unsigned argc = 2; Local argv[argc] = { Local::New(Null()), - Local::New(String::New(node_data->result)) + Local::New(String::New(data->result.c_str())) }; TryCatch try_catch; - node_data->callback->Call(Context::GetCurrent()->Global(), argc, argv); + data->callback->Call(Context::GetCurrent()->Global(), argc, argv); if (try_catch.HasCaught()) { node::FatalException(try_catch); } } - node_data->callback.Dispose(); + data->callback.Dispose(); - if (node_data->result != NULL) { - free(node_data->result); - } - - delete node_data; + delete data; delete req; } @@ -797,7 +774,7 @@ async_get_tx_after(uv_work_t *req) { } else { CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); ssTx << tx; - string strHex = HexStr(ssTx.begin(), ssTx.end()); + std::string strHex = HexStr(ssTx.begin(), ssTx.end()); Local entry = NanNew(); entry->Set(NanNew("hex"), NanNew(strHex)); @@ -1209,7 +1186,7 @@ NAN_METHOD(VerifyTransaction) { CValidationState state; bool valid = CheckTransaction(tx, state); - string reason; + std::string reason; bool standard = IsStandardTx(tx, reason); NanReturnValue(NanNew(valid && standard)); @@ -1220,7 +1197,7 @@ NAN_METHOD(VerifyTransaction) { */ int64_t -GetAccountBalance(CWalletDB& walletdb, const string& strAccount, int nMinDepth) { +GetAccountBalance(CWalletDB& walletdb, const std::string& strAccount, int nMinDepth) { int64_t nBalance = 0; // Tally wallet transactions @@ -1247,7 +1224,7 @@ GetAccountBalance(CWalletDB& walletdb, const string& strAccount, int nMinDepth) } int64_t -GetAccountBalance(const string& strAccount, int nMinDepth) { +GetAccountBalance(const std::string& strAccount, int nMinDepth) { CWalletDB walletdb(pwalletMain->strWalletFile); return GetAccountBalance(walletdb, strAccount, nMinDepth); } @@ -1683,7 +1660,7 @@ NAN_METHOD(ListAccounts) { it != pwalletMain->mapWallet.end(); ++it) { const CWalletTx& wtx = (*it).second; int64_t nFee; - string strSentAccount; + std::string strSentAccount; list > listReceived; list > listSent; int nDepth = wtx.GetDepthInMainChain(); @@ -1720,7 +1697,7 @@ NAN_METHOD(ListAccounts) { int i = 0; BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, CAddressBookData)& item, pwalletMain->mapAddressBook) { const CBitcoinAddress& address = item.first; - const string& strName = item.second.name; + const std::string& strName = item.second.name; if (strName == accountBalance.first) { Local a = NanNew(); a->Set(NanNew("address"), NanNew(address.ToString())); @@ -1887,7 +1864,7 @@ cblock_to_js(const CBlock& block, const CBlockIndex* blockindex, Local o CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); ssTx << tx; - string strHex = HexStr(ssTx.begin(), ssTx.end()); + std::string strHex = HexStr(ssTx.begin(), ssTx.end()); entry->Set(NanNew("hex"), NanNew(strHex)); entry->Set(NanNew("txid"), NanNew(tx.GetHash().GetHex())); @@ -1996,7 +1973,7 @@ static inline void ctx_to_js(const CTransaction& tx, uint256 hashBlock, Local entry) { CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); ssTx << tx; - string strHex = HexStr(ssTx.begin(), ssTx.end()); + std::string strHex = HexStr(ssTx.begin(), ssTx.end()); entry->Set(NanNew("hex"), NanNew(strHex)); entry->Set(NanNew("txid"), NanNew(tx.GetHash().GetHex()));