summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2014-09-10 19:31:59 +0200
committerAnatol Belski <ab@php.net>2014-09-10 19:31:59 +0200
commit0b89bb83ba1302c454965676e6ccfb094f2b3745 (patch)
tree009f4ed11cbebf85466a39a83161ce42869aea02
parent4f2563329b3307e05dabec53e0c3e3a24a5cfad5 (diff)
parentdff820cea3d51d3bfb925bd1a09cbb2ee741e2b3 (diff)
downloadphp-git-0b89bb83ba1302c454965676e6ccfb094f2b3745.tar.gz
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5: fix precision when fetching float through mysqlnd
-rw-r--r--ext/mysqlnd/mysqlnd_ps_codec.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/ext/mysqlnd/mysqlnd_ps_codec.c b/ext/mysqlnd/mysqlnd_ps_codec.c
index 3ff0019c00..3af19cbc95 100644
--- a/ext/mysqlnd/mysqlnd_ps_codec.c
+++ b/ext/mysqlnd/mysqlnd_ps_codec.c
@@ -200,17 +200,27 @@ ps_fetch_float(zval * zv, const MYSQLND_FIELD * const field, unsigned int pack_l
/* The following cast is guaranteed to do the right thing */
dval = (double) d32val;
}
+#elif defined(PHP_WIN32)
+ {
+ /* float datatype on Winows is already 4 byte but has a precision of 7 digits */
+ char num_buf[2048];
+ (void)_gcvt_s(num_buf, 2048, fval, field->decimals >= 31 ? 7 : field->decimals);
+ dval = zend_strtod(num_buf, NULL);
+ }
#else
{
char num_buf[2048]; /* Over allocated */
char *s;
+#ifndef FLT_DIG
+# define FLT_DIG 6
+#endif
/* Convert to string. Ignoring localization, etc.
* Following MySQL's rules. If precision is undefined (NOT_FIXED_DEC i.e. 31)
* or larger than 31, the value is limited to 6 (FLT_DIG).
*/
s = php_gcvt(fval,
- field->decimals >= 31 ? 6 : field->decimals,
+ field->decimals >= 31 ? FLT_DIG : field->decimals,
'.',
'e',
num_buf);