diff options
Diffstat (limited to 'ext/standard/formatted_print.c')
| -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, | 
