felipe          Sat Aug 16 21:32:41 2008 UTC

  Modified files:              (Branch: PHP_5_3)
    /php-src/ext/standard       string.c 
    /php-src/ext/standard/tests/strings setlocale_error.phpt 
                                        strtok_error.phpt 
                                        strtok_variation1.phpt 
                                        strtok_variation2.phpt 
  Log:
  - New parameter parsing API (zend_get_parameters_array_ex--)
  - Fixed tests
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.445.2.14.2.69.2.34&r2=1.445.2.14.2.69.2.35&diff_format=u
Index: php-src/ext/standard/string.c
diff -u php-src/ext/standard/string.c:1.445.2.14.2.69.2.34 
php-src/ext/standard/string.c:1.445.2.14.2.69.2.35
--- php-src/ext/standard/string.c:1.445.2.14.2.69.2.34  Thu Aug 14 02:56:23 2008
+++ php-src/ext/standard/string.c       Sat Aug 16 21:32:41 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: string.c,v 1.445.2.14.2.69.2.34 2008/08/14 02:56:23 kalle Exp $ */
+/* $Id: string.c,v 1.445.2.14.2.69.2.35 2008/08/16 21:32:41 felipe Exp $ */
 
 /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
 
@@ -1177,38 +1177,34 @@
 /* {{{ proto string strtok([string str,] string token)
    Tokenize a string */
 PHP_FUNCTION(strtok)
-{
-       zval **args[2];
-       zval **tok, **str;
+{              
+       char *str, *tok = NULL;
+       int str_len, tok_len = 0;
+       zval *zv;
+       
        char *token;
        char *token_end;
        char *p;
        char *pe;
        int skipped = 0;
        
-       if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 || 
zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &str, 
&str_len, &tok, &tok_len) == FAILURE) {
+               return;
        }
-               
-       switch (ZEND_NUM_ARGS()) {
-               case 1:
-                       tok = args[0];
-                       break;
 
-               default:
-               case 2:
-                       str = args[0];
-                       tok = args[1];
-                       convert_to_string_ex(str);
-
-                       zval_add_ref(str);
-                       if (BG(strtok_zval)) {
-                               zval_ptr_dtor(&BG(strtok_zval));
-                       }
-                       BG(strtok_zval) = *str;
-                       BG(strtok_last) = BG(strtok_string) = Z_STRVAL_PP(str);
-                       BG(strtok_len) = Z_STRLEN_PP(str);
-                       break;
+       if (ZEND_NUM_ARGS() == 1) {
+               tok = str;
+               tok_len = str_len;
+       } else {
+               if (BG(strtok_zval)) {
+                       zval_ptr_dtor(&BG(strtok_zval));
+               }
+               MAKE_STD_ZVAL(zv);
+               ZVAL_STRINGL(zv, str, str_len, 1);
+
+               BG(strtok_zval) = zv;
+               BG(strtok_last) = BG(strtok_string) = Z_STRVAL_P(zv);
+               BG(strtok_len) = str_len;
        }
        
        p = BG(strtok_last); /* Where we start to search */
@@ -1217,11 +1213,9 @@
        if (!p || p >= pe) {
                RETURN_FALSE;
        }
-
-       convert_to_string_ex(tok);
        
-       token = Z_STRVAL_PP(tok);
-       token_end = token + Z_STRLEN_PP(tok);
+       token = tok;
+       token_end = token + tok_len;
 
        while (token < token_end) {
                STRTOK_TABLE(token++) = 1;
@@ -1256,7 +1250,7 @@
 
        /* Restore table -- usually faster then memset'ing the table on every 
invocation */
 restore:
-       token = Z_STRVAL_PP(tok);
+       token = tok;
        
        while (token < token_end) {
                STRTOK_TABLE(token++) = 0;
@@ -4001,61 +3995,64 @@
    Set locale information */
 PHP_FUNCTION(setlocale)
 {
-       zval ***args = (zval ***) safe_emalloc(sizeof(zval **), 
ZEND_NUM_ARGS(), 0);
+       zval ***args = NULL;
        zval **pcategory, **plocale;
-       int i, cat, n_args=ZEND_NUM_ARGS();
+       int num_args, cat, i = 0;
        char *loc, *retval;
 
-       if (zend_get_parameters_array_ex(n_args, args) == FAILURE || n_args < 
2) {
-               efree(args);
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z+", &pcategory, 
&args, &num_args) == FAILURE) {
+               return;
        }
+
 #ifdef HAVE_SETLOCALE
-       pcategory = args[0];
        if (Z_TYPE_PP(pcategory) == IS_LONG) {
                convert_to_long_ex(pcategory);  
                cat = Z_LVAL_PP(pcategory);
-       } else { /* FIXME: The following behaviour should be removed. */
+       } else {
+               /* FIXME: The following behaviour should be removed. */
                char *category;
+               
                php_error_docref(NULL TSRMLS_CC, E_DEPRECATED, "Passing locale 
category name as string is deprecated. Use the LC_* -constants instead");
+               
                convert_to_string_ex(pcategory);
-               category = Z_STRVAL_P(*pcategory);
+               category = Z_STRVAL_PP(pcategory);
 
-               if (!strcasecmp ("LC_ALL", category))
+               if (!strcasecmp("LC_ALL", category)) {
                        cat = LC_ALL;
-               else if (!strcasecmp ("LC_COLLATE", category))
+               } else if (!strcasecmp("LC_COLLATE", category)) {
                        cat = LC_COLLATE;
-               else if (!strcasecmp ("LC_CTYPE", category))
+               } else if (!strcasecmp("LC_CTYPE", category)) {
                        cat = LC_CTYPE;
 #ifdef LC_MESSAGES
-               else if (!strcasecmp ("LC_MESSAGES", category))
+               } else if (!strcasecmp("LC_MESSAGES", category)) {
                        cat = LC_MESSAGES;
 #endif
-               else if (!strcasecmp ("LC_MONETARY", category))
+               } else if (!strcasecmp("LC_MONETARY", category)) {
                        cat = LC_MONETARY;
-               else if (!strcasecmp ("LC_NUMERIC", category))
+               } else if (!strcasecmp("LC_NUMERIC", category)) {
                        cat = LC_NUMERIC;
-               else if (!strcasecmp ("LC_TIME", category))
+               } else if (!strcasecmp("LC_TIME", category)) {
                        cat = LC_TIME;
-               else {
+               } else {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid 
locale category name %s, must be one of LC_ALL, LC_COLLATE, LC_CTYPE, 
LC_MONETARY, LC_NUMERIC, or LC_TIME", category);
-                       efree(args);
+                       
+                       if (args) {
+                               efree(args);
+                       }                       
                        RETURN_FALSE;
                }
        }
 
-       if (Z_TYPE_PP(args[1]) == IS_ARRAY) {
-               zend_hash_internal_pointer_reset(Z_ARRVAL_PP(args[1]));
-               i=0; /* not needed in this case: only kill a compiler warning */
-       } else {
-               i=1;
+       if (Z_TYPE_PP(args[0]) == IS_ARRAY) {
+               zend_hash_internal_pointer_reset(Z_ARRVAL_PP(args[0]));
        }
+       
        while (1) {
-               if (Z_TYPE_PP(args[1]) == IS_ARRAY) {
-                       if (!zend_hash_num_elements(Z_ARRVAL_PP(args[1]))) {
+               if (Z_TYPE_PP(args[0]) == IS_ARRAY) {
+                       if (!zend_hash_num_elements(Z_ARRVAL_PP(args[0]))) {
                                break;
                        }
-                       zend_hash_get_current_data(Z_ARRVAL_PP(args[1]),(void 
**)&plocale);
+                       zend_hash_get_current_data(Z_ARRVAL_PP(args[0]), (void 
**)&plocale);
                } else {
                        plocale = args[i];
                }
@@ -4072,7 +4069,7 @@
                        }
                }
 
-               retval = setlocale (cat, loc);
+               retval = setlocale(cat, loc);
                zend_update_current_locale();
                if (retval) {
                        /* Remember if locale was changed */
@@ -4080,23 +4077,24 @@
                                STR_FREE(BG(locale_string));
                                BG(locale_string) = estrdup(retval);
                        }
-                       
-                       efree(args);
-                       RETVAL_STRING(retval, 1);
-                       
-                       return;
+
+                       if (args) {
+                               efree(args);
+                       }
+                       RETURN_STRING(retval, 1);
                }
                
-               if (Z_TYPE_PP(args[1]) == IS_ARRAY) {
-                       if (zend_hash_move_forward(Z_ARRVAL_PP(args[1])) == 
FAILURE) break;
+               if (Z_TYPE_PP(args[0]) == IS_ARRAY) {
+                       if (zend_hash_move_forward(Z_ARRVAL_PP(args[0])) == 
FAILURE) break;
                } else {
-                       if (++i >= n_args) break;
+                       if (++i >= num_args) break;
                }
        }
 
 #endif
-       efree(args);
-
+       if (args) {
+               efree(args);
+       }
        RETURN_FALSE;
 }
 /* }}} */
@@ -4847,29 +4845,21 @@
    Implements an ANSI C compatible sscanf */
 PHP_FUNCTION(sscanf)
 {
-       zval ***args;
-       int     result;
-       int         argc = ZEND_NUM_ARGS();     
+       zval ***args = NULL;
+       char *str, *format;
+       int str_len, format_len, result, num_args = 0;
 
-       if (argc < 2) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss*", &str, 
&str_len, &format, &format_len, 
+               &args, &num_args) == FAILURE) {
+               return;
        }
-
-       args = (zval ***) safe_emalloc(argc, sizeof(zval **), 0);
-       if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
+       
+       result = php_sscanf_internal(str, format, num_args, args, 0, 
&return_value TSRMLS_CC);
+       
+       if (args) {
                efree(args);
-               WRONG_PARAM_COUNT;
        }
 
-       convert_to_string_ex(args[0]);
-       convert_to_string_ex(args[1]);
-       
-       result = php_sscanf_internal(Z_STRVAL_PP(args[0]),
-                                    Z_STRVAL_PP(args[1]),
-                                    argc, args,
-                                    2, &return_value TSRMLS_CC);
-       efree(args);
-
        if (SCAN_ERROR_WRONG_PARAM_COUNT == result) {
                WRONG_PARAM_COUNT;
        }
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/strings/setlocale_error.phpt?r1=1.1.4.3&r2=1.1.4.4&diff_format=u
Index: php-src/ext/standard/tests/strings/setlocale_error.phpt
diff -u php-src/ext/standard/tests/strings/setlocale_error.phpt:1.1.4.3 
php-src/ext/standard/tests/strings/setlocale_error.phpt:1.1.4.4
--- php-src/ext/standard/tests/strings/setlocale_error.phpt:1.1.4.3     Sat Feb 
23 17:06:22 2008
+++ php-src/ext/standard/tests/strings/setlocale_error.phpt     Sat Aug 16 
21:32:41 2008
@@ -43,15 +43,14 @@
 echo "\nDone";
 ?>
 --EXPECTF--
-
 *** Testing setlocale() : error conditions ***
 
 -- Testing setlocale() function with Zero arguments --
-Warning: Wrong parameter count for setlocale() in %s on line %d
+Warning: setlocale() expects at least 2 parameters, 0 given in %s on line %d
 NULL
 
 -- Testing setlocale() function with One argument, 'category' = LC_ALL --
-Warning: Wrong parameter count for setlocale() in %s on line %d
+Warning: setlocale() expects at least 2 parameters, 1 given in %s on line %d
 NULL
 
 -- Testing setlocale() function with invalid locale array, 'category' = LC_ALL 
--
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/strings/strtok_error.phpt?r1=1.1.2.1&r2=1.1.2.1.2.1&diff_format=u
Index: php-src/ext/standard/tests/strings/strtok_error.phpt
diff -u php-src/ext/standard/tests/strings/strtok_error.phpt:1.1.2.1 
php-src/ext/standard/tests/strings/strtok_error.phpt:1.1.2.1.2.1
--- php-src/ext/standard/tests/strings/strtok_error.phpt:1.1.2.1        Sat Sep 
22 07:39:57 2007
+++ php-src/ext/standard/tests/strings/strtok_error.phpt        Sat Aug 16 
21:32:41 2008
@@ -40,12 +40,12 @@
 
 -- Testing strtok() function with Zero arguments --
 
-Warning: Wrong parameter count for strtok() in %s on line %d
+Warning: strtok() expects at least 1 parameter, 0 given in %s on line %d
 NULL
 
 -- Testing strtok() function with more than expected no. of arguments --
 
-Warning: Wrong parameter count for strtok() in %s on line %d
+Warning: strtok() expects at most 2 parameters, 3 given in %s on line %d
 NULL
 string(13) "sample string"
 
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/strings/strtok_variation1.phpt?r1=1.1.2.1.2.3&r2=1.1.2.1.2.4&diff_format=u
Index: php-src/ext/standard/tests/strings/strtok_variation1.phpt
diff -u php-src/ext/standard/tests/strings/strtok_variation1.phpt:1.1.2.1.2.3 
php-src/ext/standard/tests/strings/strtok_variation1.phpt:1.1.2.1.2.4
--- php-src/ext/standard/tests/strings/strtok_variation1.phpt:1.1.2.1.2.3       
Sat May 24 15:22:21 2008
+++ php-src/ext/standard/tests/strings/strtok_variation1.phpt   Sat Aug 16 
21:32:41 2008
@@ -127,24 +127,24 @@
 string(3) "0.5"
 -- Iteration 10 --
 
-Notice: Array to string conversion in %s on line %d
-string(5) "Array"
+Warning: strtok() expects parameter 1 to be string, array given in %s on line 
%d
+NULL
 -- Iteration 11 --
 
-Notice: Array to string conversion in %s on line %d
-string(5) "Array"
+Warning: strtok() expects parameter 1 to be string, array given in %s on line 
%d
+NULL
 -- Iteration 12 --
 
-Notice: Array to string conversion in %s on line %d
-string(5) "Array"
+Warning: strtok() expects parameter 1 to be string, array given in %s on line 
%d
+NULL
 -- Iteration 13 --
 
-Notice: Array to string conversion in %s on line %d
-string(5) "Array"
+Warning: strtok() expects parameter 1 to be string, array given in %s on line 
%d
+NULL
 -- Iteration 14 --
 
-Notice: Array to string conversion in %s on line %d
-string(5) "Array"
+Warning: strtok() expects parameter 1 to be string, array given in %s on line 
%d
+NULL
 -- Iteration 15 --
 string(1) "1"
 -- Iteration 16 --
@@ -168,5 +168,7 @@
 -- Iteration 25 --
 bool(false)
 -- Iteration 26 --
-string(%d) "Resource id #%d"
-Done
\ No newline at end of file
+
+Warning: strtok() expects parameter 1 to be string, resource given in %s on 
line %d
+NULL
+Done
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/strings/strtok_variation2.phpt?r1=1.1.2.1&r2=1.1.2.1.2.1&diff_format=u
Index: php-src/ext/standard/tests/strings/strtok_variation2.phpt
diff -u php-src/ext/standard/tests/strings/strtok_variation2.phpt:1.1.2.1 
php-src/ext/standard/tests/strings/strtok_variation2.phpt:1.1.2.1.2.1
--- php-src/ext/standard/tests/strings/strtok_variation2.phpt:1.1.2.1   Sat Sep 
22 07:39:57 2007
+++ php-src/ext/standard/tests/strings/strtok_variation2.phpt   Sat Aug 16 
21:32:41 2008
@@ -127,24 +127,24 @@
 string(37) "this testcase test strtok() function "
 -- Iteration 10 --
 
-Notice: Array to string conversion in %s on line %d
-string(10) "this testc"
+Warning: strtok() expects parameter 2 to be string, array given in %s on line 
%d
+NULL
 -- Iteration 11 --
 
-Notice: Array to string conversion in %s on line %d
-string(10) "this testc"
+Warning: strtok() expects parameter 2 to be string, array given in %s on line 
%d
+NULL
 -- Iteration 12 --
 
-Notice: Array to string conversion in %s on line %d
-string(10) "this testc"
+Warning: strtok() expects parameter 2 to be string, array given in %s on line 
%d
+NULL
 -- Iteration 13 --
 
-Notice: Array to string conversion in %s on line %d
-string(10) "this testc"
+Warning: strtok() expects parameter 2 to be string, array given in %s on line 
%d
+NULL
 -- Iteration 14 --
 
-Notice: Array to string conversion in %s on line %d
-string(10) "this testc"
+Warning: strtok() expects parameter 2 to be string, array given in %s on line 
%d
+NULL
 -- Iteration 15 --
 string(37) "this testcase test strtok() function "
 -- Iteration 16 --
@@ -168,5 +168,7 @@
 -- Iteration 25 --
 string(37) "this testcase test strtok() function "
 -- Iteration 26 --
-string(2) "th"
+
+Warning: strtok() expects parameter 2 to be string, resource given in %s on 
line %d
+NULL
 Done

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to