diff options
author | Hannes Magnusson <bjori@php.net> | 2006-12-18 09:26:54 +0000 |
---|---|---|
committer | Hannes Magnusson <bjori@php.net> | 2006-12-18 09:26:54 +0000 |
commit | 9ef3575c250f091643d6efdc2e09619d18cf9504 (patch) | |
tree | 5626f72fd947cfbcd107f1e6334ac7e886e73d85 /main/snprintf.c | |
parent | cfbd58c987cc140d8a776ff3408860ba2a10cf6c (diff) | |
download | php-git-9ef3575c250f091643d6efdc2e09619d18cf9504.tar.gz |
MFH:
- make %f locale aware again
- fix precision loss with %F (noticed by Sebastian Nohn)
- add new tests
Diffstat (limited to 'main/snprintf.c')
-rw-r--r-- | main/snprintf.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/main/snprintf.c b/main/snprintf.c index 192c02f7c1..28ff0f3231 100644 --- a/main/snprintf.c +++ b/main/snprintf.c @@ -363,12 +363,20 @@ char * ap_php_conv_fp(register char format, register double num, register char *s = buf; register char *p, *p_orig; int decimal_point; + char dec_point = '.'; + + if (format == 'f') { + struct lconv *lconv; + lconv = localeconv(); + dec_point = *lconv->decimal_point; + format = 'F'; + } if (precision >= NDIG - 1) { precision = NDIG - 2; } - if (format == 'f') + if (format == 'F') p_orig = p = bsd_fcvt(num, precision, &decimal_point, is_negative); else /* either e or E format */ p_orig = p = bsd_ecvt(num, precision + 1, &decimal_point, is_negative); @@ -383,16 +391,16 @@ char * ap_php_conv_fp(register char format, register double num, free(p_orig); return (buf); } - if (format == 'f') { + if (format == 'F') { if (decimal_point <= 0) { if (num != 0 || precision > 0) { *s++ = '0'; if (precision > 0) { - *s++ = '.'; + *s++ = dec_point; while (decimal_point++ < 0) *s++ = '0'; } else if (add_dp) { - *s++ = '.'; + *s++ = dec_point; } } } else { @@ -405,7 +413,7 @@ char * ap_php_conv_fp(register char format, register double num, *s++ = '0'; } if (precision > 0 || add_dp) { - *s++ = '.'; + *s++ = dec_point; } } } else { @@ -420,7 +428,7 @@ char * ap_php_conv_fp(register char format, register double num, while (*p) *s++ = *p++; - if (format != 'f') { + if (format != 'F') { char temp[EXPONENT_LENGTH]; /* for exponent conversion */ int t_len; bool_int exponent_is_negative; |