From bc58d281c08ee47f87d40ff53b1138cd6611265d Mon Sep 17 00:00:00 2001 From: Ryan Flynn Date: Sat, 3 Nov 2012 22:47:16 -0700 Subject: [PATCH] base float buflen on float.h, not hardcoded assumptions --- c_src/encoder.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/c_src/encoder.c b/c_src/encoder.c index 00a9dba..297e2e8 100644 --- a/c_src/encoder.c +++ b/c_src/encoder.c @@ -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++] = '.';