On Jun 19, 2008, at 7:06 PM, Stanislav Malyshev wrote:
While we nearing the release of 5.3 (hopefully?), there are many
functions in the PHP code which still use old parameter parsing API
(zend_get_parameters_ex) instead of the new one
(zend_parse_parameters).
This is my first patch submission, so please let me know if you have
any pointers. I went ahead and took care of basic_functions.c (because
i figured I'd start with basics :-) ). I'll try to do some more
tonight. Please let me know if there are any areas you would like me
to focus on.
Cheers!
--
Jordan CM Wambaugh
[EMAIL PROTECTED]
Index: basic_functions.c
===================================================================
RCS file: /repository/php-src/ext/standard/basic_functions.c,v
retrieving revision 1.725.2.31.2.64.2.35
diff -u -r1.725.2.31.2.64.2.35 basic_functions.c
--- basic_functions.c 25 May 2008 14:06:13 -0000 1.725.2.31.2.64.2.35
+++ basic_functions.c 28 Jun 2008 01:56:16 -0000
@@ -4924,18 +4924,17 @@
/* }}} */
/* {{{ proto bool set_magic_quotes_runtime(int new_setting)
- Set the current active configuration setting of
magic_quotes_runtime and return previous */
+ Set the current active configuration setting of
magic_quotes_runtime. Return true on success, false on failure.*/
PHP_FUNCTION(set_magic_quotes_runtime)
{
- zval **new_setting;
+ zend_bool new_setting;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &new_setting)
== FAILURE) {
+ if (ZEND_NUM_ARGS() != 1 || zend_parse_parameters( 1 TSRMLS_CC, "b",
&new_setting ) == FAILURE) {
RETURN_FALSE;
}
- convert_to_boolean_ex(new_setting);
-
- PG(magic_quotes_runtime) = (zend_bool) Z_LVAL_PP(new_setting);
+
+ PG(magic_quotes_runtime) = new_setting;
RETURN_TRUE;
}
/* }}} */
@@ -4973,68 +4972,40 @@
Send an error message somewhere */
PHP_FUNCTION(error_log)
{
- zval **string, **erropt = NULL, **option = NULL, **emailhead = NULL;
+
+
int opt_err = 0;
- char *message, *opt = NULL, *headers = NULL;
-
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &string) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Argument 1 invalid");
- RETURN_FALSE;
- }
- break;
-
- case 2:
- if (zend_get_parameters_ex(2, &string, &erropt) ==
FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid
arguments");
- RETURN_FALSE;
- }
- convert_to_long_ex(erropt);
- opt_err = Z_LVAL_PP(erropt);
- break;
-
- case 3:
- if (zend_get_parameters_ex(3, &string, &erropt, &option) ==
FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid
arguments");
- RETURN_FALSE;
- }
- convert_to_long_ex(erropt);
- opt_err = Z_LVAL_PP(erropt);
- convert_to_string_ex(option);
- opt = Z_STRVAL_PP(option);
- break;
+ char *message, *message_dup, *opt = NULL, *opt_dup, *headers = NULL,
*headers_dup;
+ int message_len, opt_len=0, headers_len=0;
- case 4:
- if (zend_get_parameters_ex (4, &string, &erropt, &option,
&emailhead) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid
arguments");
- RETURN_FALSE;
- }
- break;
-
- default:
- WRONG_PARAM_COUNT;
+ if(ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 4){
+ WRONG_PARAM_COUNT;
}
- convert_to_string_ex(string);
- message = Z_STRVAL_PP(string);
-
- if (erropt != NULL) {
- convert_to_long_ex(erropt);
- opt_err = Z_LVAL_PP(erropt);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lss"
+ , &message,
&message_len
+ , &opt_err
+ , &opt, &opt_len
+ , &headers,
&headers_len) == FAILURE) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid
Arguments");
+ RETURN_FALSE;
}
- if (option != NULL) {
- convert_to_string_ex(option);
- opt = Z_STRVAL_PP(option);
- }
+ /*convert our binary-safe strings to unsafe because that's what
_php_error_log() expects*/
+ message_dup=estrndup(message, message_len);
+ message_dup=erealloc(message_dup,message_len+1);
+ message_dup[message_len]=0;
+
+ opt_dup=estrndup(opt, opt_len);
+ opt_dup=erealloc(opt_dup,opt_len+1);
+ opt_dup[opt_len]=0;
+
+ headers_dup=estrndup(headers, headers_len);
+ headers_dup=erealloc(headers_dup,headers_len+1);
+ headers_dup[headers_len]=0;
- if (emailhead != NULL) {
- convert_to_string_ex(emailhead);
- headers = Z_STRVAL_PP(emailhead);
- }
- if (_php_error_log(opt_err, message, opt, headers TSRMLS_CC) ==
FAILURE) {
+ if (_php_error_log(opt_err, message_dup, opt_dup, headers_dup
TSRMLS_CC) == FAILURE) {
RETURN_FALSE;
}
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php