diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/standard/formatted_print.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c index e35946fa10..75cf0205d8 100644 --- a/ext/standard/formatted_print.c +++ b/ext/standard/formatted_print.c @@ -303,13 +303,14 @@ php_sprintf_appenddouble(char **buffer, int *pos, char *cvt; register int i = 0, j = 0; int sign, decpt, cvt_len; + char decimal_point = '.'; #ifdef HAVE_LOCALE_H struct lconv lc; - char decimal_point; + char locale_decimal_point; localeconv_r(&lc); - decimal_point = (lc.decimal_point)[0]; + locale_decimal_point = (lc.decimal_point)[0]; #else - char decimal_point = '.'; + char locale_decimal_point = '.'; #endif PRINTF_DEBUG(("sprintf: appenddouble(%x, %x, %x, %f, %d, '%c', %d, %c)\n", @@ -343,12 +344,12 @@ php_sprintf_appenddouble(char **buffer, int *pos, numbuf[i++] = '+'; } - if (fmt == 'f') { + if (fmt == 'f' || fmt == 'F') { if (decpt <= 0) { numbuf[i++] = '0'; if (precision > 0) { int k = precision; - numbuf[i++] = decimal_point; + numbuf[i++] = fmt == 'F' ? decimal_point : locale_decimal_point; while ((decpt++ < 0) && k--) { numbuf[i++] = '0'; } @@ -358,7 +359,7 @@ php_sprintf_appenddouble(char **buffer, int *pos, numbuf[i++] = j < cvt_len ? cvt[j++] : '0'; } if (precision > 0) { - numbuf[i++] = decimal_point; + numbuf[i++] = fmt == 'F' ? decimal_point : locale_decimal_point; while (precision-- > 0) { numbuf[i++] = j < cvt_len ? cvt[j++] : '0'; } @@ -697,6 +698,7 @@ php_formatted_print(int ht, int *len, int use_array, int format_offset TSRMLS_DC case 'e': case 'f': + case 'F': /* XXX not done */ convert_to_double(tmp); php_sprintf_appenddouble(&result, &outpos, &size, |
