summaryrefslogtreecommitdiff
path: root/ext/standard/formatted_print.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-12-29 22:26:48 +0000
committerMarcus Boerger <helly@php.net>2003-12-29 22:26:48 +0000
commit2fc7a07e62cff942c1aaf2ea050f7163abdac70a (patch)
tree780a544e2a07061f36cd3fc717f7bfc8a8285f8e /ext/standard/formatted_print.c
parentc6755e8394a221cd225e252a2d792bd574d38b69 (diff)
downloadphp-git-2fc7a07e62cff942c1aaf2ea050f7163abdac70a.tar.gz
Use __tostring() in all printing functions.
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 4d141afc45..85ed45abeb 100644
--- a/ext/standard/formatted_print.c
+++ b/ext/standard/formatted_print.c
@@ -622,15 +622,27 @@ php_formatted_print(int ht, int *len, int use_array, int format_offset TSRMLS_DC
PRINTF_DEBUG(("sprintf: format character='%c'\n", format[inpos]));
/* now we expect to find a type specifier */
switch (format[inpos]) {
- case 's':
- convert_to_string_ex(args[argnum]);
+ case 's': {
+ zval *var, var_copy;
+ int use_copy;
+
+ zend_make_printable_zval(*args[argnum], &var_copy, &use_copy);
+ if (use_copy) {
+ var = &var_copy;
+ } else {
+ var = *args[argnum];
+ }
php_sprintf_appendstring(&result, &outpos, &size,
- Z_STRVAL_PP(args[argnum]),
+ Z_STRVAL_P(var),
width, precision, padding,
alignment,
- Z_STRLEN_PP(args[argnum]),
+ Z_STRLEN_P(var),
0, expprec);
+ if (use_copy) {
+ zval_dtor(&var_copy);
+ }
break;
+ }
case 'd':
convert_to_long_ex(args[argnum]);