Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 72a041c

Browse files
committed
use helper for converting from double to string, use _ex version of _php_math_number_format_ex for PHP 5.4
1 parent c1bc92b commit 72a041c

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

library.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ redis_cmd_format_static(char **ret, char *keyword, char *format, ...) {
259259
case 'f':
260260
case 'F': {
261261
double d = va_arg(ap, double);
262-
dbl_len = spprintf(&dbl_str, 0, "%.8f", d);
262+
REDIS_DOUBLE_TO_STRING(dbl_str, dbl_len, d)
263263
smart_str_append_long(&buf, dbl_len);
264264
smart_str_appendl(&buf, _NL, sizeof(_NL) - 1);
265265
smart_str_appendl(&buf, dbl_str, dbl_len);
@@ -327,7 +327,7 @@ redis_cmd_format(char **ret, char *format, ...) {
327327
case 'F':
328328
case 'f': {
329329
double d = va_arg(ap, double);
330-
dbl_len = spprintf(&dbl_str, 0, "%.8f", d);
330+
REDIS_DOUBLE_TO_STRING(dbl_str, dbl_len, d)
331331
smart_str_append_long(&buf, dbl_len);
332332
smart_str_appendl(&buf, _NL, sizeof(_NL) - 1);
333333
smart_str_appendl(&buf, dbl_str, dbl_len);

library.h

+9
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,12 @@ redis_key_prefix(RedisSock *redis_sock, char **key, int *key_len TSRMLS_DC);
4242
PHPAPI int
4343
redis_unserialize(RedisSock *redis_sock, const char *val, int val_len, zval **return_value TSRMLS_DC);
4444

45+
#if (PHP_MAJOR_VERSION == 5) && (PHP_MINOR_VERSION >= 4)
46+
# define REDIS_DOUBLE_TO_STRING(dbl_str, dbl_len, dbl) \
47+
dbl_str = _php_math_number_format_ex(dbl, 8, (char*)'.', 0, NULL, 0); \
48+
dbl_len = strlen(dbl_str);
49+
#else
50+
# define REDIS_DOUBLE_TO_STRING(dbl_str, dbl_len, dbl) \
51+
dbl_str = _php_math_number_format(dbl, 8, '.', '\x00'); \
52+
dbl_len = strlen(dbl_str);
53+
#endif

redis.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -3662,7 +3662,7 @@ PHP_METHOD(Redis, zAdd) {
36623662

36633663
/* add score */
36643664
score = Z_DVAL_P(z_args[i]);
3665-
dbl_len = spprintf(&dbl_str, 0, "%.8f", score);
3665+
REDIS_DOUBLE_TO_STRING(dbl_str, dbl_len, score)
36663666
smart_str_appendc(&buf, '$');
36673667
smart_str_append_long(&buf, dbl_len);
36683668
smart_str_appendl(&buf, _NL, sizeof(_NL) - 1);

0 commit comments

Comments
 (0)