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

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 16 additions & 19 deletions library.c
Original file line number Diff line number Diff line change
Expand Up @@ -586,7 +586,6 @@ redis_cmd_format_static(char **ret, char *keyword, char *format, ...)
va_list ap;
smart_string buf = {0};
int l = strlen(keyword);
zend_string *dbl_str;

va_start(ap, format);

Expand Down Expand Up @@ -615,11 +614,11 @@ redis_cmd_format_static(char **ret, char *keyword, char *format, ...)
case 'f':
case 'F': {
double d = va_arg(ap, double);
REDIS_DOUBLE_TO_STRING(dbl_str, d);
smart_string_append_long(&buf, dbl_str->len);
char tmp[64];
int len = snprintf(tmp, sizeof(tmp), "%.16g", d);
smart_string_append_long(&buf, len);
smart_string_appendl(&buf, _NL, sizeof(_NL) - 1);
smart_string_appendl(&buf, dbl_str->val, dbl_str->len);
zend_string_release(dbl_str);
smart_string_appendl(&buf, tmp, len);
}
break;

Expand Down Expand Up @@ -666,7 +665,6 @@ redis_cmd_format(char **ret, char *format, ...) {
smart_string buf = {0};
va_list ap;
char *p = format;
zend_string *dbl_str;

va_start(ap, format);

Expand All @@ -683,11 +681,11 @@ redis_cmd_format(char **ret, char *format, ...) {
case 'F':
case 'f': {
double d = va_arg(ap, double);
REDIS_DOUBLE_TO_STRING(dbl_str, d);
smart_string_append_long(&buf, dbl_str->len);
char tmp[64];
int len = snprintf(tmp, sizeof(tmp), "%.16g", d);
smart_string_append_long(&buf, len);
smart_string_appendl(&buf, _NL, sizeof(_NL) - 1);
smart_string_appendl(&buf, dbl_str->val, dbl_str->len);
zend_string_release(dbl_str);
smart_string_appendl(&buf, tmp, len);
}
break;

Expand Down Expand Up @@ -792,18 +790,17 @@ int redis_cmd_append_sstr_long(smart_string *str, long append) {
/*
* Append a double to a smart string command
*/
int redis_cmd_append_sstr_dbl(smart_string *str, double value) {
zend_string *dbl_str;
int retval;
int
redis_cmd_append_sstr_dbl(smart_string *str, double value)
{
char tmp[64];
int len, retval;

/* Convert to double */
REDIS_DOUBLE_TO_STRING(dbl_str, value);
/* Convert to string */
len = snprintf(tmp, sizeof(tmp), "%.16g", value);

// Append the string
retval = redis_cmd_append_sstr(str, dbl_str->val, dbl_str->len);

/* Free our double string */
zend_string_release(dbl_str);
retval = redis_cmd_append_sstr(str, tmp, len);

/* Return new length */
return retval;
Expand Down
24 changes: 0 additions & 24 deletions library.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,28 +84,4 @@ PHP_REDIS_API int redis_read_variant_reply(INTERNAL_FUNCTION_PARAMETERS, RedisSo

PHP_REDIS_API void redis_client_list_reply(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock, zval *z_tab);

#if (PHP_MAJOR_VERSION < 7)
#if ZEND_MODULE_API_NO >= 20100000
#define REDIS_DOUBLE_TO_STRING(dbl_str, dbl) do { \
char dbl_decsep = '.'; \
dbl_str = emalloc(sizeof(zend_string)); \
dbl_str->val = _php_math_number_format_ex(dbl, 16, &dbl_decsep, 1, NULL, 0); \
dbl_str->len = strlen(dbl_str->val); \
dbl_str->gc = 0x11; \
} while (0);
#else
#define REDIS_DOUBLE_TO_STRING(dbl_str, dbl) do { \
dbl_str = emalloc(sizeof(zend_string)); \
dbl_str->val = _php_math_number_format(dbl, 16, '.', '\x00'); \
dbl_str->len = strlen(dbl_str->val); \
dbl_str->gc = 0x11; \
} while (0)
#endif
#else
#define REDIS_DOUBLE_TO_STRING(dbl_str, dbl) do { \
char dbl_decsep = '.'; \
dbl_str = _php_math_number_format_ex(dbl, 16, &dbl_decsep, 1, NULL, 0); \
} while (0);
#endif

#endif