reduce code duplication

This commit is contained in:
Christian Grothoff 2019-06-18 13:20:43 +02:00
parent 6066ffcb9b
commit 30903b9386
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
4 changed files with 54 additions and 24 deletions

View File

@ -42,7 +42,6 @@ TALER_EXCHANGE_verify_coin_history (const char *currency,
struct TALER_Amount *total) struct TALER_Amount *total)
{ {
size_t len; size_t len;
int add;
struct TALER_Amount rtotal; struct TALER_Amount rtotal;
if (NULL == history) if (NULL == history)
@ -64,6 +63,7 @@ TALER_EXCHANGE_verify_coin_history (const char *currency,
&rtotal)); &rtotal));
for (size_t off=0;off<len;off++) for (size_t off=0;off<len;off++)
{ {
int add;
json_t *transaction; json_t *transaction;
struct TALER_Amount amount; struct TALER_Amount amount;
const char *type; const char *type;

View File

@ -873,12 +873,10 @@ refresh_melt_run (void *cls,
{ {
struct RefreshMeltState *rms = cls; struct RefreshMeltState *rms = cls;
unsigned int num_fresh_coins; unsigned int num_fresh_coins;
const struct TALER_TESTING_Command *coin_command;
/* FIXME: this should be dynamic */ /* FIXME: this should be dynamic */
const char *melt_fresh_amounts[] = { const char *melt_fresh_amounts[] = {
"EUR:1", "EUR:1", "EUR:1", "EUR:0.1", "EUR:1", "EUR:1", "EUR:1", "EUR:0.1",
NULL}; NULL};
const struct TALER_EXCHANGE_DenomPublicKey *fresh_pk;
rms->is = is; rms->is = is;
rms->noreveal_index = UINT16_MAX; rms->noreveal_index = UINT16_MAX;
@ -895,8 +893,9 @@ refresh_melt_run (void *cls,
struct TALER_Amount fresh_amount; struct TALER_Amount fresh_amount;
const struct TALER_DenominationSignature *melt_sig; const struct TALER_DenominationSignature *melt_sig;
const struct TALER_EXCHANGE_DenomPublicKey *melt_denom_pub; const struct TALER_EXCHANGE_DenomPublicKey *melt_denom_pub;
const struct TALER_TESTING_Command *coin_command;
const struct MeltDetails *md = &rms->melted_coin; const struct MeltDetails *md = &rms->melted_coin;
if (NULL == (coin_command if (NULL == (coin_command
= TALER_TESTING_interpreter_lookup_command = TALER_TESTING_interpreter_lookup_command
(is, md->coin_reference))) (is, md->coin_reference)))
@ -945,6 +944,8 @@ refresh_melt_run (void *cls,
for (unsigned int i=0;i<num_fresh_coins;i++) for (unsigned int i=0;i<num_fresh_coins;i++)
{ {
const struct TALER_EXCHANGE_DenomPublicKey *fresh_pk;
if (GNUNET_OK != TALER_string_to_amount if (GNUNET_OK != TALER_string_to_amount
(melt_fresh_amounts[i], &fresh_amount)) (melt_fresh_amounts[i], &fresh_amount))
{ {

View File

@ -263,7 +263,23 @@ deposit_confirmation_run (void *cls,
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
TALER_string_to_amount (dcs->amount_without_fee, TALER_string_to_amount (dcs->amount_without_fee,
&amount_without_fee)); &amount_without_fee));
{
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_absolute_time ("timestamp", &timestamp),
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->dc = TALER_AUDITOR_deposit_confirmation
(dcs->auditor, (dcs->auditor,
&h_wire, &h_wire,

View File

@ -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. * Convert amount to string.
* *
@ -548,9 +571,6 @@ char *
TALER_amount_to_string (const struct TALER_Amount *amount) TALER_amount_to_string (const struct TALER_Amount *amount)
{ {
char *result; char *result;
unsigned int i;
uint32_t n;
char tail[TALER_AMOUNT_FRAC_LEN + 1];
struct TALER_Amount norm; struct TALER_Amount norm;
if (GNUNET_YES != TALER_amount_is_valid (amount)) if (GNUNET_YES != TALER_amount_is_valid (amount))
@ -558,14 +578,12 @@ TALER_amount_to_string (const struct TALER_Amount *amount)
norm = *amount; norm = *amount;
GNUNET_break (GNUNET_SYSERR != GNUNET_break (GNUNET_SYSERR !=
TALER_amount_normalize (&norm)); TALER_amount_normalize (&norm));
if (0 != (n = norm.fraction)) if (0 != norm.fraction)
{ {
for (i = 0; (i < TALER_AMOUNT_FRAC_LEN) && (0 != n); i++) char tail[TALER_AMOUNT_FRAC_LEN + 1];
{
tail[i] = '0' + (n / (TALER_AMOUNT_FRAC_BASE / 10)); amount_to_tail (&norm,
n = (n * 10) % (TALER_AMOUNT_FRAC_BASE); tail);
}
tail[i] = '\0';
GNUNET_asprintf (&result, GNUNET_asprintf (&result,
"%s:%llu.%s", "%s:%llu.%s",
norm.currency, norm.currency,
@ -594,9 +612,6 @@ const char *
TALER_amount2s (const struct TALER_Amount *amount) TALER_amount2s (const struct TALER_Amount *amount)
{ {
static char result[TALER_AMOUNT_FRAC_LEN + TALER_CURRENCY_LEN + 3 + 12]; 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; struct TALER_Amount norm;
if (GNUNET_YES != TALER_amount_is_valid (amount)) if (GNUNET_YES != TALER_amount_is_valid (amount))
@ -604,14 +619,12 @@ TALER_amount2s (const struct TALER_Amount *amount)
norm = *amount; norm = *amount;
GNUNET_break (GNUNET_SYSERR != GNUNET_break (GNUNET_SYSERR !=
TALER_amount_normalize (&norm)); TALER_amount_normalize (&norm));
if (0 != (n = norm.fraction)) if (0 != norm.fraction)
{ {
for (i = 0; (i < TALER_AMOUNT_FRAC_LEN) && (0 != n); i++) char tail[TALER_AMOUNT_FRAC_LEN + 1];
{
tail[i] = '0' + (n / (TALER_AMOUNT_FRAC_BASE / 10)); amount_to_tail (&norm,
n = (n * 10) % (TALER_AMOUNT_FRAC_BASE); tail);
}
tail[i] = '\0';
GNUNET_snprintf (result, GNUNET_snprintf (result,
sizeof (result), sizeof (result),
"%s:%llu.%s", "%s:%llu.%s",