Re: cvs: php-src(PHP_5_3) /ext/standard file.c /ext/standard/tests/file fscanf.phpt fscanf_error.phpt
| From: | Marcus Boerger | Date: | Tue, 12 Aug 2008 19:46:19 +0000 |
| Subject: | Re: cvs: php-src(PHP_5_3) /ext/standard file.c /ext/standard/tests/file fscanf.phpt fscanf_error.phpt | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-52268@lists.php.net to get a copy of this message | ||
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