summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2023-11-23 15:42:44 -0800
committerJohn Wiegley <johnw@newartisans.com>2024-08-05 08:35:56 -0700
commita2df9c48870ee3fb25051c3473476f91e8d467d8 (patch)
treecb3653226eba7d8814c01b79deeb470a8c1c1a0f
parentdb0661dbb51e9082e47926c31e93bdc97b491bf9 (diff)
downloadfork-ledger-a2df9c48870ee3fb25051c3473476f91e8d467d8.tar.gz
fork-ledger-a2df9c48870ee3fb25051c3473476f91e8d467d8.tar.bz2
fork-ledger-a2df9c48870ee3fb25051c3473476f91e8d467d8.zip
--hashes option requires an argument to specify the algorithm
At the moment only "sha512" or "SHA512" is accepted, but this could extend to more algorithms in the future.
-rw-r--r--src/session.cc8
-rw-r--r--src/session.h19
2 files changed, 21 insertions, 6 deletions
diff --git a/src/session.cc b/src/session.cc
index 6958603e..4587f24a 100644
--- a/src/session.cc
+++ b/src/session.cc
@@ -134,7 +134,7 @@ std::size_t session_t::read_data(const string& master_account)
parsing_context.push(*price_db_path);
parsing_context.get_current().journal = journal.get();
try {
- if (journal->read(parsing_context, HANDLED(hashes)) > 0)
+ if (journal->read(parsing_context, HANDLED(hashes_)) > 0)
throw_(parse_error, _("Transactions not allowed in price history file"));
}
catch (...) {
@@ -169,7 +169,7 @@ std::size_t session_t::read_data(const string& master_account)
parsing_context.get_current().journal = journal.get();
parsing_context.get_current().master = acct;
try {
- xact_count += journal->read(parsing_context, HANDLED(hashes));
+ xact_count += journal->read(parsing_context, HANDLED(hashes_));
}
catch (...) {
parsing_context.pop();
@@ -230,7 +230,7 @@ journal_t * session_t::read_journal_from_string(const string& data)
parsing_context.get_current().journal = journal.get();
parsing_context.get_current().master = journal->master;
try {
- journal->read(parsing_context, HANDLED(hashes));
+ journal->read(parsing_context, HANDLED(hashes_));
}
catch (...) {
parsing_context.pop();
@@ -332,7 +332,7 @@ option_t<session_t> * session_t::lookup_option(const char * p)
OPT_(file_); // -f
break;
case 'h':
- OPT(hashes);
+ OPT(hashes_);
break;
case 'i':
OPT(input_date_format_);
diff --git a/src/session.h b/src/session.h
index dcb554eb..ce1b69a3 100644
--- a/src/session.h
+++ b/src/session.h
@@ -112,7 +112,7 @@ public:
HANDLER(decimal_comma).report(out);
HANDLER(time_colon).report(out);
HANDLER(file_).report(out);
- HANDLER(hashes).report(out);
+ HANDLER(hashes_).report(out);
HANDLER(input_date_format_).report(out);
HANDLER(explicit).report(out);
HANDLER(master_account_).report(out);
@@ -163,7 +163,22 @@ public:
data_files.push_back(str);
});
- OPTION(session_t, hashes);
+ enum hash_type_t {
+ NO_HASHES = 0,
+ HASH_SHA512 = 1
+ };
+
+ OPTION__
+ (session_t, hashes_,
+ hash_type_t hash_type = NO_HASHES;
+ CTOR(session_t, hashes_) {}
+ DO_(str) {
+ if (str == "sha512" || str == "SHA512") {
+ hash_type = HASH_SHA512;
+ } else {
+ throw_(std::invalid_argument, _f("Unrecognized hash type"));
+ }
+ });
OPTION_(session_t, input_date_format_, DO_(str) {
// This changes static variables inside times.h, which affects the