diff options
| author | Christian Grothoff <christian@grothoff.org> | 2017-03-20 02:29:33 +0100 | 
|---|---|---|
| committer | Christian Grothoff <christian@grothoff.org> | 2017-03-20 02:29:33 +0100 | 
| commit | a38fa32484286d2895dca10d3f53d3c7599d2f3b (patch) | |
| tree | 64b840590eb69adca395368802548cd3febb0b84 /src/util | |
| parent | 7115eda899d6cd51342378047579d9a74b9cad29 (diff) | |
fixing misc auditor issues
Diffstat (limited to 'src/util')
| -rw-r--r-- | src/util/amount.c | 50 | 
1 files changed, 49 insertions, 1 deletions
diff --git a/src/util/amount.c b/src/util/amount.c index 44eefe6a..e0664853 100644 --- a/src/util/amount.c +++ b/src/util/amount.c @@ -529,9 +529,9 @@ 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]; -  unsigned int i;    struct TALER_Amount norm;    if (GNUNET_YES != TALER_amount_is_valid (amount)) @@ -565,6 +565,54 @@ TALER_amount_to_string (const struct TALER_Amount *amount)  /** + * Convert amount to string. + * + * @param amount amount to convert to string + * @return statically allocated buffer with string representation, + *         NULL if the @a amount was invalid + */ +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)) +    return NULL; +  norm = *amount; +  GNUNET_break (GNUNET_SYSERR != +                TALER_amount_normalize (&norm)); +  if (0 != (n = 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'; +    GNUNET_snprintf (result, +                     sizeof (result), +                     "%s:%llu.%s", +                     norm.currency, +                     (unsigned long long) norm.value, +                     tail); +  } +  else +  { +    GNUNET_snprintf (result, +                     sizeof (result), +                     "%s:%llu", +                     norm.currency, +                     (unsigned long long) norm.value); +  } +  return result; +} + + +/**   * Divide an amount by a float.  Note that this function   * may introduce a rounding error!   *  | 
