Hello Felipe,

Tuesday, August 12, 2008, 9:38:55 PM, you wrote:

> felipe          Tue Aug 12 19:38:55 2008 UTC

>   Modified files:              (Branch: PHP_5_3)
>     /php-src/ext/standard       file.c 
>     /php-src/ext/standard/tests/file    fscanf.phpt fscanf_error.phpt 
>   Log:
>   - New parameter parsing API (for fscanf)
>   
>   
> http://cvs.php.net/viewvc.cgi/php-src/ext/standard/file.c?r1=1.409.2.6.2.28.2.20&r2=1.409.2.6.2.28.2.21&diff_format=u
> Index: php-src/ext/standard/file.c
> diff -u php-src/ext/standard/file.c:1.409.2.6.2.28.2.20
> php-src/ext/standard/file.c:1.409.2.6.2.28.2.21
> --- php-src/ext/standard/file.c:1.409.2.6.2.28.2.20     Mon Aug 11 13:11:30 
> 2008
> +++ php-src/ext/standard/file.c       Tue Aug 12 19:38:54 2008
> @@ -21,7 +21,7 @@
>    
> +----------------------------------------------------------------------+
>  */
>  
> -/* $Id: file.c,v 1.409.2.6.2.28.2.20 2008/08/11 13:11:30 pajoye Exp $ */
> +/* $Id: file.c,v 1.409.2.6.2.28.2.21 2008/08/12 19:38:54 felipe Exp $ */
>  
>  /* Synced with php 3.0 revision 1.218 1999-06-16 [ssb] */
>  
> @@ -1168,30 +1168,18 @@
>     Implements a mostly ANSI compatible fscanf() */
>  PHP_FUNCTION(fscanf)
>  {
> -       int result;
> -       zval **file_handle, **format_string;
> +       int result, format_len, type, argc = 0;
> +       zval ***args = NULL;
> +       zval *file_handle;
> +       char *buf, *format;
>         size_t len;
> -       int type;
> -       char *buf;
>         void *what;
> -
> -       zval ***args;
> -       int argCount;
> -
> -       argCount = ZEND_NUM_ARGS();
> -       if (argCount < 2) {
> -               WRONG_PARAM_COUNT;
> -       }
> -       args = (zval ***)safe_emalloc(argCount, sizeof(zval **), 0);
> -       if (zend_get_parameters_array_ex(argCount, args) == FAILURE) {
> -               efree( args );
> -               WRONG_PARAM_COUNT;
> +       
> +       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs*",
> &file_handle, &format, &format_len, &args, &argc) == FAILURE) {
> +               return;
>         }
>  
> -       file_handle = args[0];
> -       format_string = args[1];
> -
> -       what = zend_fetch_resource(file_handle TSRMLS_CC, -1,
> "File-Handle", &type, 2, php_file_le_stream(), php_file_le_pstream());
> +       what = zend_fetch_resource(&file_handle TSRMLS_CC, -1,
> "File-Handle", &type, 2, php_file_le_stream(), php_file_le_pstream());
>  
>         /*
>          * we can't do a ZEND_VERIFY_RESOURCE(what), otherwise we end up
> @@ -1199,26 +1187,30 @@
>          * if the code behind ZEND_VERIFY_RESOURCE changed. - cc
>          */
>         if (!what) {
> -               efree(args);
> +               if (args) {
> +                       efree(args);
> +               }
>                 RETURN_FALSE;
>         }
>  
>         buf = php_stream_get_line((php_stream *) what, NULL, 0, &len);
>         if (buf == NULL) {
> -               efree(args);
> +               if (args) {
> +                       efree(args);
> +               }
>                 RETURN_FALSE;
>         }
>  
> -       convert_to_string_ex(format_string);
> -       result = php_sscanf_internal(buf, Z_STRVAL_PP(format_string),
> argCount, args, 2, &return_value TSRMLS_CC);
> +       result = php_sscanf_internal(buf, format, argc, args, 0, 
> &return_value TSRMLS_CC);
>  
> -       efree(args);
> +       if (args) {
> +               efree(args);
> +       }
>         efree(buf);
>  
>         if (SCAN_ERROR_WRONG_PARAM_COUNT == result) {
>                 WRONG_PARAM_COUNT;
>         }
> -
>  }
>  /* }}} */
>  
> http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/file/fscanf.phpt?r1=1.1.2.2.2.1&r2=1.1.2.2.2.2&diff_format=u
> Index: php-src/ext/standard/tests/file/fscanf.phpt
> diff -u php-src/ext/standard/tests/file/fscanf.phpt:1.1.2.2.2.1
> php-src/ext/standard/tests/file/fscanf.phpt:1.1.2.2.2.2
> --- php-src/ext/standard/tests/file/fscanf.phpt:1.1.2.2.2.1     Mon Nov  5 
> 17:43:20 2007
> +++ php-src/ext/standard/tests/file/fscanf.phpt       Tue Aug 12 19:38:54 2008
> @@ -60,14 +60,14 @@
>  echo "Done\n";
>  ?>
>  --EXPECTF--    
> -Warning: Wrong parameter count for fscanf() in %s on line %d
> +Warning: fscanf() expects at least 2 parameters, 0 given in %s on line %d
>  NULL
>  
> -Warning: Wrong parameter count for fscanf() in %s on line %d
> +Warning: fscanf() expects at least 2 parameters, 1 given in %s on line %d
>  NULL
>  
> -Warning: fscanf(): supplied argument is not a valid File-Handle resource in 
> %s on line %d
> -bool(false)
> +Warning: fscanf() expects parameter 1 to be resource, array given in %s on 
> line %d
> +NULL
>  int(0)
>  NULL
>  int(1)
> http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/file/fscanf_error.phpt?r1=1.1.2.1.2.1&r2=1.1.2.1.2.2&diff_format=u
> Index: php-src/ext/standard/tests/file/fscanf_error.phpt
> diff -u php-src/ext/standard/tests/file/fscanf_error.phpt:1.1.2.1.2.1
> php-src/ext/standard/tests/file/fscanf_error.phpt:1.1.2.1.2.2
> --- php-src/ext/standard/tests/file/fscanf_error.phpt:1.1.2.1.2.1       Mon 
> Nov  5 17:43:20 2007
> +++ php-src/ext/standard/tests/file/fscanf_error.phpt   Tue Aug 12 19:38:54 
> 2008
> @@ -64,13 +64,13 @@
>  --EXPECTF--
>  *** Testing fscanf() for error conditions ***
>  
> -Warning: Wrong parameter count for fscanf() in %s on line %d
> +Warning: fscanf() expects at least 2 parameters, 0 given in %s on line %d
>  NULL
>  
> -Warning: Wrong parameter count for fscanf() in %s on line %d
> +Warning: fscanf() expects at least 2 parameters, 1 given in %s on line %d
>  NULL
>  
> -Warning: fscanf(): %d is not a valid File-Handle resource in %s on line %d
> +Warning: fscanf(): 6 is not a valid File-Handle resource in %s on line %d

Verifying the resource number is a bad idea here.

>  bool(false)
>  
>  Warning: fscanf(): Different numbers of variable names and field specifiers 
> in %s on line %d
> @@ -97,4 +97,3 @@
>  NULL
>  
>  *** Done ***
> -

Best regards,
 Marcus


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

Reply via email to