Parcourir la source

base float buflen on float.h, not hardcoded assumptions

pull/32/head
Ryan Flynn il y a 12 ans
Parent
révision
bc58d281c0
1 fichiers modifiés avec 6 ajouts et 4 suppressions
  1. +6
    -4
      c_src/encoder.c

+ 6
- 4
c_src/encoder.c Voir le fichier

@ -11,6 +11,8 @@
#define BIN_INC_SIZE 2048
#define FLOAT_BUFLEN (LDBL_DIG*2)
#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
#define MAYBE_PRETTY(e) \
@ -396,17 +398,17 @@ enc_double(Encoder* e, double val)
size_t len;
size_t i;
if(!enc_ensure(e, 32)) {
if(!enc_ensure(e, FLOAT_BUFLEN)) {
return 0;
}
start = &(e->p[e->i]);
// try to encode doubles using the fewest digits possible...
if (snprintf(start, 32, "%.*g", DBL_DIG, val) > FLT_DIG)
if (snprintf(start, FLOAT_BUFLEN, "%.*g", DBL_DIG, val) > FLT_DIG)
{
// ...fall back to full expansion to be safe
snprintf(start, 32, "%.*g", LDBL_DIG, val);
snprintf(start, FLOAT_BUFLEN, "%.*g", LDBL_DIG, val);
}
len = strlen(start);
@ -416,7 +418,7 @@ enc_double(Encoder* e, double val)
goto done;
}
if(len > 29) return 0;
if(len >= FLOAT_BUFLEN-2) return 0;
// Force a decimal point
start[len++] = '.';

Chargement…
Annuler
Enregistrer