summaryrefslogtreecommitdiff
path: root/ext/standard/formatted_print.c
diff options
context:
space:
mode:
authorHartmut Holzgraefe <hholzgra@php.net>2002-06-16 13:14:21 +0000
committerHartmut Holzgraefe <hholzgra@php.net>2002-06-16 13:14:21 +0000
commit7686d43737ec89f500c090414f71d47ee6710322 (patch)
treea8e9a7d38c3e95d2cf99bf14d1a5a12ac0e46a25 /ext/standard/formatted_print.c
parentfcb692a75d32fbb2a31988df76b37ae5b7540086 (diff)
downloadphp-git-7686d43737ec89f500c090414f71d47ee6710322.tar.gz
make sprinf() locale-aware (Bug# 12647)
Diffstat (limited to 'ext/standard/formatted_print.c')
-rw-r--r--ext/standard/formatted_print.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c
index 7a11b3a5f0..2e55bbc884 100644
--- a/ext/standard/formatted_print.c
+++ b/ext/standard/formatted_print.c
@@ -274,6 +274,15 @@ php_sprintf_appenddouble(char **buffer, int *pos,
char *cvt;
register int i = 0, j = 0;
int sign, decpt;
+#ifdef HAVE_LOCALECONV
+ char decimal_point;
+ TSRMLS_FETCH();
+
+ decimal_point = CG(decimal_point);
+#else
+#define decimal_point '.'
+#endif
+
PRINTF_DEBUG(("sprintf: appenddouble(%x, %x, %x, %f, %d, '%c', %d, %c)\n",
*buffer, pos, size, number, width, padding, alignment, fmt));
@@ -308,7 +317,7 @@ php_sprintf_appenddouble(char **buffer, int *pos,
numbuf[i++] = '0';
if (precision > 0) {
int k = precision;
- numbuf[i++] = '.';
+ numbuf[i++] = decimal_point;
while ((decpt++ < 0) && k--) {
numbuf[i++] = '0';
}
@@ -317,12 +326,12 @@ php_sprintf_appenddouble(char **buffer, int *pos,
while (decpt-- > 0)
numbuf[i++] = cvt[j++];
if (precision > 0)
- numbuf[i++] = '.';
+ numbuf[i++] = decimal_point;
}
} else {
numbuf[i++] = cvt[j++];
if (precision > 0)
- numbuf[i++] = '.';
+ numbuf[i++] = decimal_point;
}
while (cvt[j]) {
@@ -336,6 +345,9 @@ php_sprintf_appenddouble(char **buffer, int *pos,
}
php_sprintf_appendstring(buffer, pos, size, numbuf, width, 0, padding,
alignment, i, sign, 0);
+#ifndef HAVE_LOCALECONV
+#undef decimal_point
+#endif
}
@@ -583,7 +595,7 @@ php_formatted_print(int ht, int *len, int use_array TSRMLS_DC)
case 'e':
case 'f':
- /* XXX not done */
+ /* XXX not done */ /* ??? WTF? 'g' missing or what? (hartmut) */
convert_to_double_ex(args[argnum]);
php_sprintf_appenddouble(&result, &outpos, &size,
Z_DVAL_PP(args[argnum]),