From 30903b93866900e41bb4defa4d7b8ee49f3f3f99 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 18 Jun 2019 13:20:43 +0200 Subject: reduce code duplication --- src/lib/exchange_api_common.c | 2 +- src/lib/testing_api_cmd_refresh.c | 7 +-- .../testing_auditor_api_cmd_deposit_confirmation.c | 18 +++++++- src/util/amount.c | 53 ++++++++++++++-------- 4 files changed, 55 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/lib/exchange_api_common.c b/src/lib/exchange_api_common.c index a9c6e16cf..72eb9ace5 100644 --- a/src/lib/exchange_api_common.c +++ b/src/lib/exchange_api_common.c @@ -42,7 +42,6 @@ TALER_EXCHANGE_verify_coin_history (const char *currency, struct TALER_Amount *total) { size_t len; - int add; struct TALER_Amount rtotal; if (NULL == history) @@ -64,6 +63,7 @@ TALER_EXCHANGE_verify_coin_history (const char *currency, &rtotal)); for (size_t off=0;offis = is; rms->noreveal_index = UINT16_MAX; @@ -895,8 +893,9 @@ refresh_melt_run (void *cls, struct TALER_Amount fresh_amount; const struct TALER_DenominationSignature *melt_sig; const struct TALER_EXCHANGE_DenomPublicKey *melt_denom_pub; - + const struct TALER_TESTING_Command *coin_command; const struct MeltDetails *md = &rms->melted_coin; + if (NULL == (coin_command = TALER_TESTING_interpreter_lookup_command (is, md->coin_reference))) @@ -945,6 +944,8 @@ refresh_melt_run (void *cls, for (unsigned int i=0;iamount_without_fee, &amount_without_fee)); - + { + struct GNUNET_JSON_Specification spec[] = { + GNUNET_JSON_spec_absolute_time ("timestamp", ×tamp), + GNUNET_JSON_spec_absolute_time ("refund_deadline", &refund_deadline), + GNUNET_JSON_spec_end() + }; + + if (GNUNET_OK != + GNUNET_JSON_parse (contract_terms, + spec, + NULL, NULL)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (is); + return; + } + } dcs->dc = TALER_AUDITOR_deposit_confirmation (dcs->auditor, &h_wire, diff --git a/src/util/amount.c b/src/util/amount.c index b3e9b54e8..ac6be27d8 100644 --- a/src/util/amount.c +++ b/src/util/amount.c @@ -538,6 +538,29 @@ TALER_amount_normalize (struct TALER_Amount *amount) } +/** + * Convert the fraction of @a amount to a string + * in decimals. + * + * @param amount value to convert + * @param tail[out] where to write the reesult + */ +static void +amount_to_tail (const struct TALER_Amount *amount, + char tail[TALER_AMOUNT_FRAC_LEN + 1]) +{ + uint32_t n = amount->fraction; + unsigned int i; + + for (i = 0; (i < TALER_AMOUNT_FRAC_LEN) && (0 != n); i++) + { + tail[i] = '0' + (n / (TALER_AMOUNT_FRAC_BASE / 10)); + n = (n * 10) % (TALER_AMOUNT_FRAC_BASE); + } + tail[i] = '\0'; +} + + /** * Convert amount to string. * @@ -548,9 +571,6 @@ char * TALER_amount_to_string (const struct TALER_Amount *amount) { char *result; - unsigned int i; - uint32_t n; - char tail[TALER_AMOUNT_FRAC_LEN + 1]; struct TALER_Amount norm; if (GNUNET_YES != TALER_amount_is_valid (amount)) @@ -558,14 +578,12 @@ TALER_amount_to_string (const struct TALER_Amount *amount) norm = *amount; GNUNET_break (GNUNET_SYSERR != TALER_amount_normalize (&norm)); - if (0 != (n = norm.fraction)) + if (0 != norm.fraction) { - for (i = 0; (i < TALER_AMOUNT_FRAC_LEN) && (0 != n); i++) - { - tail[i] = '0' + (n / (TALER_AMOUNT_FRAC_BASE / 10)); - n = (n * 10) % (TALER_AMOUNT_FRAC_BASE); - } - tail[i] = '\0'; + char tail[TALER_AMOUNT_FRAC_LEN + 1]; + + amount_to_tail (&norm, + tail); GNUNET_asprintf (&result, "%s:%llu.%s", norm.currency, @@ -594,9 +612,6 @@ const char * TALER_amount2s (const struct TALER_Amount *amount) { static char result[TALER_AMOUNT_FRAC_LEN + TALER_CURRENCY_LEN + 3 + 12]; - unsigned int i; - uint32_t n; - char tail[TALER_AMOUNT_FRAC_LEN + 1]; struct TALER_Amount norm; if (GNUNET_YES != TALER_amount_is_valid (amount)) @@ -604,14 +619,12 @@ TALER_amount2s (const struct TALER_Amount *amount) norm = *amount; GNUNET_break (GNUNET_SYSERR != TALER_amount_normalize (&norm)); - if (0 != (n = norm.fraction)) + if (0 != norm.fraction) { - for (i = 0; (i < TALER_AMOUNT_FRAC_LEN) && (0 != n); i++) - { - tail[i] = '0' + (n / (TALER_AMOUNT_FRAC_BASE / 10)); - n = (n * 10) % (TALER_AMOUNT_FRAC_BASE); - } - tail[i] = '\0'; + char tail[TALER_AMOUNT_FRAC_LEN + 1]; + + amount_to_tail (&norm, + tail); GNUNET_snprintf (result, sizeof (result), "%s:%llu.%s", -- cgit v1.2.3