felipe          Mon Aug 18 00:37:16 2008 UTC

  Modified files:              (Branch: PHP_5_3)
    /php-src/ext/mbstring       mbstring.c 
  Log:
  - New parameter parsing API (for mb_convert_variables())
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/mbstring/mbstring.c?r1=1.224.2.22.2.25.2.30&r2=1.224.2.22.2.25.2.31&diff_format=u
Index: php-src/ext/mbstring/mbstring.c
diff -u php-src/ext/mbstring/mbstring.c:1.224.2.22.2.25.2.30 
php-src/ext/mbstring/mbstring.c:1.224.2.22.2.25.2.31
--- php-src/ext/mbstring/mbstring.c:1.224.2.22.2.25.2.30        Mon Aug 11 
15:42:35 2008
+++ php-src/ext/mbstring/mbstring.c     Mon Aug 18 00:37:16 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: mbstring.c,v 1.224.2.22.2.25.2.30 2008/08/11 15:42:35 nlopess Exp $ */
+/* $Id: mbstring.c,v 1.224.2.22.2.25.2.31 2008/08/18 00:37:16 felipe Exp $ */
 
 /*
  * PHP 4 Multibyte String module "mbstring"
@@ -3600,37 +3600,30 @@
 
 #define PHP_MBSTR_STACK_BLOCK_SIZE 32
 
-/* {{{ proto string mb_convert_variables(string to-encoding, mixed 
from-encoding [, mixed ...])
+/* {{{ proto string mb_convert_variables(string to-encoding, mixed 
from-encoding, mixed vars [, ...])
    Converts the string resource in variables to desired encoding */
 PHP_FUNCTION(mb_convert_variables)
 {
-       zval ***args, ***stack, **var, **hash_entry;
+       zval ***args, ***stack, **var, **hash_entry, **zfrom_enc;
        HashTable *target_hash;
        mbfl_string string, result, *ret;
        enum mbfl_no_encoding from_encoding, to_encoding;
        mbfl_encoding_detector *identd;
        mbfl_buffer_converter *convd;
-       int n, argc, stack_level, stack_max, elistsz;
+       int n, to_enc_len, argc, stack_level, stack_max, elistsz;
        enum mbfl_no_encoding *elist;
-       char *name;
-       void *ptmp;
-
-       argc = ZEND_NUM_ARGS();
-       if (argc < 3) {
-               WRONG_PARAM_COUNT;
-       }
-       args = (zval ***)ecalloc(argc, sizeof(zval **));
-       if (zend_get_parameters_array_ex(argc, args) == FAILURE) {
-               efree((void *)args);
-               WRONG_PARAM_COUNT;
+       char *name, *to_enc;
+       void *ptmp;     
+       
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sZ+", &to_enc, 
&to_enc_len, &zfrom_enc, &args, &argc) == FAILURE) {
+               return;
        }
 
        /* new encoding */
-       convert_to_string_ex(args[0]);
-       to_encoding = mbfl_name2no_encoding(Z_STRVAL_PP(args[0]));
+       to_encoding = mbfl_name2no_encoding(to_enc);
        if (to_encoding == mbfl_no_encoding_invalid) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding 
\"%s\"", Z_STRVAL_PP(args[0]));
-               efree((void *)args);
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding 
\"%s\"", to_enc);
+               efree(args);
                RETURN_FALSE;
        }
 
@@ -3644,13 +3637,13 @@
        /* pre-conversion encoding */
        elist = NULL;
        elistsz = 0;
-       switch (Z_TYPE_PP(args[1])) {
+       switch (Z_TYPE_PP(zfrom_enc)) {
        case IS_ARRAY:
-               php_mb_parse_encoding_array(*args[1], &elist, &elistsz, 0 
TSRMLS_CC);
+               php_mb_parse_encoding_array(*zfrom_enc, &elist, &elistsz, 0 
TSRMLS_CC);
                break;
        default:
-               convert_to_string_ex(args[1]);
-               php_mb_parse_encoding_list(Z_STRVAL_PP(args[1]), 
Z_STRLEN_PP(args[1]), &elist, &elistsz, 0 TSRMLS_CC);
+               convert_to_string_ex(zfrom_enc);
+               php_mb_parse_encoding_list(Z_STRVAL_PP(zfrom_enc), 
Z_STRLEN_PP(zfrom_enc), &elist, &elistsz, 0 TSRMLS_CC);
                break;
        }
        if (elistsz <= 0) {
@@ -3665,7 +3658,7 @@
                stack_level = 0;
                identd = mbfl_encoding_detector_new(elist, elistsz, 
MBSTRG(strict_detection));
                if (identd != NULL) {
-                       n = 2;
+                       n = 0;
                        while (n < argc || stack_level > 0) {
                                if (stack_level <= 0) {
                                        var = args[n++];
@@ -3746,7 +3739,7 @@
                stack_max = PHP_MBSTR_STACK_BLOCK_SIZE;
                stack = (zval ***)safe_emalloc(stack_max, sizeof(zval **), 0);
                stack_level = 0;
-               n = 2;
+               n = 0;
                while (n < argc || stack_level > 0) {
                        if (stack_level <= 0) {
                                var = args[n++];
@@ -3812,7 +3805,7 @@
                mbfl_buffer_converter_delete(convd);
        }
 
-       efree((void *)args);
+       efree(args);
 
        name = (char *)mbfl_no_encoding2name(from_encoding);
        if (name != NULL) {



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

Reply via email to