Re: cvs: php4 /ext/standard basic_functions.c formatted_print.c php_string.h
| From: | Andi Gutmans | Date: | Tue, 07 Aug 2001 19:50:29 +0000 |
| Subject: | Re: cvs: php4 /ext/standard basic_functions.c formatted_print.c php_string.h | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-62487@lists.php.net to get a copy of this message | ||
In what case is this useful? I'm kind of worried that so many functions are popping up in PHP which accept arrays as parameters. It's much slower than passing the arguments in a regular way. How often do people dynamically build formats *and* then dynamically build an array of arguments?
Andi
At 07:44 PM 8/7/2001 +0000, Andrei Zmievski wrote:
andrei Tue Aug 7 15:44:46 2001 EDTModified files:/php4/ext/standard basic_functions.c formatted_print.c php_string.hLog: @- Added vprintf() and vsprintf() functions that allow passing all arguments @ after format as an array. (Andrei) Index: php4/ext/standard/basic_functions.c diff -u php4/ext/standard/basic_functions.c:1.379 php4/ext/standard/basic_functions.c:1.380 --- php4/ext/standard/basic_functions.c:1.379 Mon Aug 6 09:36:08 2001 +++ php4/ext/standard/basic_functions.c Tue Aug 7 15:44:44 2001 @@ -17,7 +17,7 @@+----------------------------------------------------------------------+*/ -/* $Id: basic_functions.c,v 1.379 2001/08/06 13:36:08 thies Exp $ */ +/* $Id: basic_functions.c,v 1.380 2001/08/07 19:44:44 andrei Exp $ */ #include "php.h" #include "php_main.h" @@ -208,6 +208,8 @@PHP_FALIAS(strchr, strstr, NULL) PHP_NAMED_FE(sprintf, PHP_FN(user_sprintf), NULL) PHP_NAMED_FE(printf, PHP_FN(user_printf), NULL) + PHP_FE(vprintf, NULL) + PHP_FE(vsprintf, NULL) PHP_FE(sscanf, third_and_rest_force_ref) PHP_FE(fscanf, third_and_rest_force_ref) PHP_FE(parse_url, NULL)Index: php4/ext/standard/formatted_print.c diff -u php4/ext/standard/formatted_print.c:1.38 php4/ext/standard/formatted_print.c:1.39--- php4/ext/standard/formatted_print.c:1.38 Mon Jul 30 04:24:36 2001+++ php4/ext/standard/formatted_print.c Tue Aug 7 15:44:45 2001 @@ -16,7 +16,7 @@+----------------------------------------------------------------------+*/ -/* $Id: formatted_print.c,v 1.38 2001/07/30 08:24:36 zeev Exp $ */ +/* $Id: formatted_print.c,v 1.39 2001/08/07 19:44:45 andrei Exp $ */#include <math.h> /* modf() */#include "php.h" @@ -408,23 +408,40 @@ * */ static char * -php_formatted_print(int ht, int *len TSRMLS_DC) +php_formatted_print(int ht, int *len, int use_array TSRMLS_DC) {- pval ***args; + zval ***args, **z_format, **array; int argc, size = 240, inpos = 0, outpos = 0, temppos; int alignment, width, precision, currarg, adjusting, argnum; char *format, *result, padding;argc = ZEND_NUM_ARGS();- if (argc < 1) { - WRONG_PARAM_COUNT_WITH_RETVAL(NULL); - } - args = (pval ***)emalloc(argc * sizeof(pval *)); + if (use_array) { + int i = 1;++ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(argc, &z_format, &array) == FAILURE) { + WRONG_PARAM_COUNT_WITH_RETVAL(NULL); + } + SEPARATE_ZVAL(array); + convert_to_array_ex(array); + argc = 1 + zend_hash_num_elements(Z_ARRVAL_PP(array)); + args = (zval ***)emalloc(argc * sizeof(zval *)); + args[0] = z_format; + for (zend_hash_internal_pointer_reset(Z_ARRVAL_PP(array)); + zend_hash_get_current_data(Z_ARRVAL_PP(array), (void **)&args[i++]) == SUCCESS; + zend_hash_move_forward(Z_ARRVAL_PP(array))); + } else { + if (argc < 1) { + WRONG_PARAM_COUNT_WITH_RETVAL(NULL); + }++ args = (zval ***)emalloc(argc * sizeof(zval *));- if (zend_get_parameters_array_ex(argc, args) == FAILURE) { - efree(args); - WRONG_PARAM_COUNT_WITH_RETVAL(NULL); + if (zend_get_parameters_array_ex(argc, args) == FAILURE) { + efree(args); + WRONG_PARAM_COUNT_WITH_RETVAL(NULL); + } } convert_to_string_ex(args[0]); format = (*args[0])->value.str.val;@@ -632,7 +649,22 @@char *result; int len;- if ((result=php_formatted_print(ht, &len TSRMLS_CC))==NULL) { + if ((result=php_formatted_print(ht, &len, 0 TSRMLS_CC))==NULL) { + RETURN_FALSE; + } + RETVAL_STRINGL(result,len,1); + efree(result);+} +/* }}} */ + +/* {{{ proto string vsprintf(string format, array args) + Return a formatted string */ +PHP_FUNCTION(vsprintf) +{+ char *result; + int len;++ if ((result=php_formatted_print(ht, &len, 1 TSRMLS_CC))==NULL) { RETURN_FALSE; } RETVAL_STRINGL(result,len,1);@@ -647,7 +679,22 @@char *result; int len;- if ((result=php_formatted_print(ht, &len TSRMLS_CC))==NULL) { + if ((result=php_formatted_print(ht, &len, 0 TSRMLS_CC))==NULL) { + RETURN_FALSE; + } + PHPWRITE(result,len); + efree(result);+} +/* }}} */ + +/* {{{ proto int printf(string format, array args) + Output a formatted string */ +PHP_FUNCTION(vprintf) +{+ char *result; + int len;++ if ((result=php_formatted_print(ht, &len, 1 TSRMLS_CC))==NULL) { RETURN_FALSE; } PHPWRITE(result,len);Index: php4/ext/standard/php_string.h diff -u php4/ext/standard/php_string.h:1.47 php4/ext/standard/php_string.h:1.48 --- php4/ext/standard/php_string.h:1.47 Sun Aug 5 23:50:51 2001+++ php4/ext/standard/php_string.h Tue Aug 7 15:44:45 2001@@ -17,7 +17,7 @@+----------------------------------------------------------------------+*/ -/* $Id: php_string.h,v 1.47 2001/08/06 03:50:51 sas Exp $ */ +/* $Id: php_string.h,v 1.48 2001/08/07 19:44:45 andrei Exp $ */ /* Synced with php 3.0 revision 1.43 1999-06-16 [ssb] */ @@ -57,6 +57,8 @@ PHP_FUNCTION(hebrevc); PHP_FUNCTION(user_sprintf); PHP_FUNCTION(user_printf); +PHP_FUNCTION(vprintf); +PHP_FUNCTION(vsprintf); PHP_FUNCTION(addcslashes); PHP_FUNCTION(addslashes); PHP_FUNCTION(stripcslashes); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: php-cvs-unsubscribe@lists.php.net For additional commands, e-mail: php-cvs-help@lists.php.net To contact the list administrators, e-mail: php-list-admin@lists.php.net