diff options
author | Jakub Zelenka <bukka@php.net> | 2016-06-26 14:03:01 +0100 |
---|---|---|
committer | Jakub Zelenka <bukka@php.net> | 2016-06-26 14:03:01 +0100 |
commit | 3f13507dd281adf0518c9162dce5391e9250e93b (patch) | |
tree | 70f4addc37de995e1a58e5baec180e0ef266a937 /ext | |
parent | 158b537c99ca5fc7846e7d16d532644be95894a7 (diff) | |
download | php-git-3f13507dd281adf0518c9162dce5391e9250e93b.tar.gz |
Use one place to define max length of double
Introduce new constant PHP_DOUBLE_MAX_LENGTH for that purpose
Diffstat (limited to 'ext')
-rw-r--r-- | ext/json/json.c | 8 | ||||
-rw-r--r-- | ext/json/json_encoder.c | 12 | ||||
-rw-r--r-- | ext/standard/var.c | 15 |
3 files changed, 4 insertions, 31 deletions
diff --git a/ext/json/json.c b/ext/json/json.c index d3c6111d4d..8bb5e51d41 100644 --- a/ext/json/json.c +++ b/ext/json/json.c @@ -33,14 +33,6 @@ #include "php_json_parser.h" #include <zend_exceptions.h> -#include <float.h> -#if defined(DBL_MANT_DIG) && defined(DBL_MIN_EXP) -#define NUM_BUF_SIZE (3 + DBL_MANT_DIG - DBL_MIN_EXP) -#else -#define NUM_BUF_SIZE 1080 -#endif - - static PHP_MINFO_FUNCTION(json); static PHP_FUNCTION(json_encode); static PHP_FUNCTION(json_decode); diff --git a/ext/json/json_encoder.c b/ext/json/json_encoder.c index 7720393c36..7cf7673235 100644 --- a/ext/json/json_encoder.c +++ b/ext/json/json_encoder.c @@ -31,14 +31,6 @@ #include "php_json.h" #include <zend_exceptions.h> -/* double limits */ -#include <float.h> -#if defined(DBL_MANT_DIG) && defined(DBL_MIN_EXP) -#define PHP_JSON_DOUBLE_MAX_LENGTH (3 + DBL_MANT_DIG - DBL_MIN_EXP) -#else -#define PHP_JSON_DOUBLE_MAX_LENGTH 1080 -#endif - static const char digits[] = "0123456789abcdef"; static void php_json_escape_string(smart_str *buf, char *s, size_t len, int options); @@ -103,11 +95,11 @@ static inline int php_json_is_valid_double(double d) /* {{{ */ static inline void php_json_encode_double(smart_str *buf, double d, int options) /* {{{ */ { size_t len; - char num[PHP_JSON_DOUBLE_MAX_LENGTH]; + char num[PHP_DOUBLE_MAX_LENGTH]; php_gcvt(d, (int)PG(serialize_precision), '.', 'e', num); len = strlen(num); - if (options & PHP_JSON_PRESERVE_ZERO_FRACTION && strchr(num, '.') == NULL && len < PHP_JSON_DOUBLE_MAX_LENGTH - 2) { + if (options & PHP_JSON_PRESERVE_ZERO_FRACTION && strchr(num, '.') == NULL && len < PHP_DOUBLE_MAX_LENGTH - 2) { num[len++] = '.'; num[len++] = '0'; num[len] = '\0'; diff --git a/ext/standard/var.c b/ext/standard/var.c index e0938fe6e9..809161afec 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -35,17 +35,6 @@ #define COMMON (is_ref ? "&" : "") -/* Copied from main/spprintf.c and use the same buffer size - * - * NUM_BUF_SIZE is the size of the buffer used for arithmetic conversions - * - * XXX: this is a magic number; do not decrease it - * Emax = 1023 - * NDIG = 320 - * NUM_BUF_SIZE >= strlen("-") + Emax + strlrn(".") + NDIG + strlen("E+1023") + 1; - */ -#define NUM_BUF_SIZE 2048 - static void php_array_element_dump(zval *zv, zend_ulong index, zend_string *key, int level) /* {{{ */ { if (key == NULL) { /* numeric key */ @@ -447,7 +436,7 @@ static void php_object_element_export(zval *zv, zend_ulong index, zend_string *k PHPAPI void php_var_export_ex(zval *struc, int level, smart_str *buf) /* {{{ */ { HashTable *myht; - char tmp_str[NUM_BUF_SIZE]; + char tmp_str[PHP_DOUBLE_MAX_LENGTH]; zend_string *ztmp, *ztmp2; zend_ulong index; zend_string *key; @@ -853,7 +842,7 @@ again: return; case IS_DOUBLE: { - char tmp_str[NUM_BUF_SIZE]; + char tmp_str[PHP_DOUBLE_MAX_LENGTH]; smart_str_appendl(buf, "d:", 2); php_gcvt(Z_DVAL_P(struc), (int)PG(serialize_precision), '.', 'E', tmp_str); smart_str_appends(buf, tmp_str); |