mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 15:09:59 +01:00
bitcoin-tx: Accept input via stdin. Add input handling to tests.
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <boost/assign/list_of.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
using namespace std;
|
||||
using namespace boost::assign;
|
||||
@@ -501,13 +502,34 @@ static void OutputTx(const CTransaction& tx)
|
||||
OutputTxHex(tx);
|
||||
}
|
||||
|
||||
static string readStdin()
|
||||
{
|
||||
char buf[4096];
|
||||
string ret;
|
||||
|
||||
while (!feof(stdin)) {
|
||||
size_t bread = fread(buf, 1, sizeof(buf), stdin);
|
||||
ret.append(buf, bread);
|
||||
if (bread < sizeof(buf))
|
||||
break;
|
||||
}
|
||||
|
||||
if (ferror(stdin))
|
||||
throw runtime_error("error reading stdin");
|
||||
|
||||
boost::algorithm::trim_right(ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int CommandLineRawTx(int argc, char* argv[])
|
||||
{
|
||||
string strPrint;
|
||||
int nRet = 0;
|
||||
try {
|
||||
// Skip switches
|
||||
while (argc > 1 && IsSwitchChar(argv[1][0])) {
|
||||
// Skip switches; Permit common stdin convention "-"
|
||||
while (argc > 1 && IsSwitchChar(argv[1][0]) &&
|
||||
(argv[1][1] != 0)) {
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
@@ -522,6 +544,8 @@ static int CommandLineRawTx(int argc, char* argv[])
|
||||
|
||||
// param: hex-encoded bitcoin transaction
|
||||
string strHexTx(argv[1]);
|
||||
if (strHexTx == "-") // "-" implies standard input
|
||||
strHexTx = readStdin();
|
||||
|
||||
if (!DecodeHexTx(txDecodeTmp, strHexTx))
|
||||
throw runtime_error("invalid transaction encoding");
|
||||
|
||||
Reference in New Issue
Block a user