diff options
| author | Jeff Garzik <[email protected]> | 2014-08-19 12:11:50 -0400 |
|---|---|---|
| committer | Jeff Garzik <[email protected]> | 2014-08-19 12:11:50 -0400 |
| commit | fb11427e54a787c26b48ebe192868d3aec16f80c (patch) | |
| tree | 15bee02d3211d2043b2f5b390ee19745b79bbc6a /src/bitcoin-tx.cpp | |
| parent | Merge pull request #4670 (diff) | |
| parent | bitcoin-tx: Accept input via stdin. Add input handling to tests. (diff) | |
| download | discoin-fb11427e54a787c26b48ebe192868d3aec16f80c.tar.xz discoin-fb11427e54a787c26b48ebe192868d3aec16f80c.zip | |
Merge pull request #4624
Diffstat (limited to 'src/bitcoin-tx.cpp')
| -rw-r--r-- | src/bitcoin-tx.cpp | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp index ffe87298f..6cd2768d7 100644 --- a/src/bitcoin-tx.cpp +++ b/src/bitcoin-tx.cpp @@ -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"); |