felipe          Thu Nov 27 02:17:22 2008 UTC

  Modified files:              (Branch: PHP_5_3)
    /php-src/ext/interbase      ibase_events.c ibase_query.c 
    /php-src/ext/interbase/tests        ibase_num_params_001.phpt 
                                        ibase_param_info_001.phpt 
  Log:
  - MFH: New parameter parsing API
  
http://cvs.php.net/viewvc.cgi/php-src/ext/interbase/ibase_events.c?r1=1.8.2.1.2.1.2.4&r2=1.8.2.1.2.1.2.5&diff_format=u
Index: php-src/ext/interbase/ibase_events.c
diff -u php-src/ext/interbase/ibase_events.c:1.8.2.1.2.1.2.4 
php-src/ext/interbase/ibase_events.c:1.8.2.1.2.1.2.5
--- php-src/ext/interbase/ibase_events.c:1.8.2.1.2.1.2.4        Tue Oct  7 
18:18:45 2008
+++ php-src/ext/interbase/ibase_events.c        Thu Nov 27 02:17:22 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ibase_events.c,v 1.8.2.1.2.1.2.4 2008/10/07 18:18:45 felipe Exp $ */
+/* $Id: ibase_events.c,v 1.8.2.1.2.1.2.5 2008/11/27 02:17:22 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -126,8 +126,9 @@
    Waits for any one of the passed Interbase events to be posted by the 
database, and returns its name */
 PHP_FUNCTION(ibase_wait_event)
 {
-       zval **args[16];
+       zval ***args;
        ibase_db_link *ib_link;
+       int num_args;
        char *event_buffer, *result_buffer, *events[15];
        unsigned short i = 0, event_count = 0, buffer_size;
        unsigned long occurred_event[15];
@@ -139,22 +140,25 @@
                WRONG_PARAM_COUNT;
        }
 
-       if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
-               RETURN_FALSE;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &args, 
&num_args) == FAILURE) {
+               return;
        }
 
        if (Z_TYPE_PP(args[0]) == IS_RESOURCE) {
-
-               ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, args[0], -1, 
"InterBase link", le_link, le_plink);
+               if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link, ibase_db_link *, 
args[0], -1, "InterBase link", le_link, le_plink)) {
+                       efree(args);
+                       RETURN_FALSE;
+               }
                i = 1;
-
        } else {
-
                if (ZEND_NUM_ARGS() > 15) {
+                       efree(args);
                        WRONG_PARAM_COUNT;
                }
-
-               ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, 
IBG(default_link), "InterBase link", le_link, le_plink);
+               if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link, ibase_db_link *, 
NULL, IBG(default_link), "InterBase link", le_link, le_plink)) {
+                       efree(args);
+                       RETURN_FALSE;
+               }
        }
 
        for (; i < ZEND_NUM_ARGS(); ++i) {
@@ -169,6 +173,7 @@
        if (isc_wait_for_event(IB_STATUS, &ib_link->handle, buffer_size, 
event_buffer, result_buffer)) {
                _php_ibase_error(TSRMLS_C);
                _php_ibase_event_free(event_buffer,result_buffer);
+               efree(args);
                RETURN_FALSE;
        }
 
@@ -178,6 +183,7 @@
                if (occurred_event[i]) {
                        char *result = estrdup(events[i]);
                        _php_ibase_event_free(event_buffer,result_buffer);
+                       efree(args);
                        RETURN_STRING(result,0);
                }
        }
@@ -185,6 +191,7 @@
        /* If we reach this line, isc_wait_for_event() did return, but we don't 
know
           which event fired. */
        _php_ibase_event_free(event_buffer,result_buffer);
+       efree(args);
        RETURN_FALSE;
 }
 /* }}} */
@@ -261,11 +268,11 @@
         * used to determine if the event handler should remain set.
         */
        char *cb_name;
-       zval **args[17], **cb_arg;
+       zval ***args, **cb_arg;
        ibase_db_link *ib_link;
        ibase_event *event;
        unsigned short i = 1, buffer_size;
-       int link_res_id;
+       int link_res_id, num_args;
 
        RESET_ERRMSG;
        
@@ -274,8 +281,8 @@
                WRONG_PARAM_COUNT;
        }
 
-       if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
-               RETURN_FALSE;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", &args, 
&num_args) == FAILURE) {
+               return;
        }
 
        /* get a working link */
@@ -284,14 +291,17 @@
                 * No more than 15 events
                 */
                if (ZEND_NUM_ARGS() < 3 || ZEND_NUM_ARGS() > 17) {
+                       efree(args);
                        WRONG_PARAM_COUNT;
                }
 
                cb_arg = args[1];
                i = 2;
 
-               ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, args[0], -1,
-                       "InterBase link", le_link, le_plink);
+               if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link, ibase_db_link *, 
args[0], -1, "InterBase link", le_link, le_plink)) {
+                       efree(args);
+                       RETURN_FALSE;
+               }
 
                convert_to_long_ex(args[0]);
                link_res_id = Z_LVAL_PP(args[0]);
@@ -301,13 +311,16 @@
                 * No more than 15 events
                 */
                if (ZEND_NUM_ARGS() < 2 || ZEND_NUM_ARGS() > 16) {
+                       efree(args);
                        WRONG_PARAM_COUNT;
                }
 
                cb_arg = args[0];
 
-               ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, 
IBG(default_link),
-                       "InterBase link", le_link, le_plink);
+               if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link, ibase_db_link *, 
NULL, IBG(default_link), "InterBase link", le_link, le_plink)) {
+                       efree(args);
+                       RETURN_FALSE;
+               }
                link_res_id = IBG(default_link);
        }
 
@@ -315,6 +328,7 @@
        if (!zend_is_callable(*cb_arg, 0, &cb_name TSRMLS_CC)) {
                _php_ibase_module_error("Callback argument %s is not a callable 
function" TSRMLS_CC, cb_name);
                efree(cb_name);
+               efree(args);
                RETURN_FALSE;
        }
        efree(cb_name);
@@ -348,6 +362,7 @@
 
                _php_ibase_error(TSRMLS_C);
                efree(event);
+               efree(args);
                RETURN_FALSE;
        }
 
@@ -356,6 +371,7 @@
 
        ZEND_REGISTER_RESOURCE(return_value, event, le_event);
        zend_list_addref(Z_LVAL_P(return_value));
+       efree(args);
 }
 /* }}} */
 
http://cvs.php.net/viewvc.cgi/php-src/ext/interbase/ibase_query.c?r1=1.23.2.1.2.10.2.7&r2=1.23.2.1.2.10.2.8&diff_format=u
Index: php-src/ext/interbase/ibase_query.c
diff -u php-src/ext/interbase/ibase_query.c:1.23.2.1.2.10.2.7 
php-src/ext/interbase/ibase_query.c:1.23.2.1.2.10.2.8
--- php-src/ext/interbase/ibase_query.c:1.23.2.1.2.10.2.7       Sun Nov 23 
20:01:20 2008
+++ php-src/ext/interbase/ibase_query.c Thu Nov 27 02:17:22 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: ibase_query.c,v 1.23.2.1.2.10.2.7 2008/11/23 20:01:20 felipe Exp $ */
+/* $Id: ibase_query.c,v 1.23.2.1.2.10.2.8 2008/11/27 02:17:22 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1070,7 +1070,7 @@
 {
        zval *zlink, *ztrans, ***bind_args = NULL;
        char *query;
-       int bind_i, query_len;
+       int bind_i, query_len, bind_num;
        long trans_res_id = 0;
        ibase_db_link *ib_link = NULL;
        ibase_trans *trans = NULL;
@@ -1176,11 +1176,9 @@
                        if (bind_n < expected_n) {
                                break;
                        }
-               } else if (bind_n > 0) {
-                       bind_args = (zval ***) safe_emalloc(sizeof(zval **), 
ZEND_NUM_ARGS(), 0);
-
-                       if (FAILURE == 
zend_get_parameters_array_ex(ZEND_NUM_ARGS(), bind_args)) {
-                               break;
+               } else if (bind_n > 0) {                
+                       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"+", &bind_args, &bind_num) == FAILURE) {
+                               return;
                        }
                }
        
@@ -1491,7 +1489,6 @@
 static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int 
fetch_type) /* {{{ */
 {
        zval *result_arg;
-       long flag_arg;
        long i, array_cnt = 0, flag = 0;
        ibase_result *ib_result;
 
@@ -2059,16 +2056,16 @@
    Get the number of params in a prepared query */
 PHP_FUNCTION(ibase_num_params)
 {
-       zval **result;
+       zval *result;
        ibase_query *ib_query;
 
        RESET_ERRMSG;
 
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &result) == 
FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &result) == 
FAILURE) {
+               return;
        }
 
-       ZEND_FETCH_RESOURCE(ib_query, ibase_query *, result, -1, LE_QUERY, 
le_query);
+       ZEND_FETCH_RESOURCE(ib_query, ibase_query *, &result, -1, LE_QUERY, 
le_query);
 
        if (ib_query->in_sqlda == NULL) {
                RETURN_LONG(0);
@@ -2082,28 +2079,27 @@
    Get information about a parameter */
 PHP_FUNCTION(ibase_param_info)
 {
-       zval **result_arg, **field_arg;
+       zval *result_arg;
+       long field_arg;
        ibase_query *ib_query;
 
        RESET_ERRMSG;
 
-       if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result_arg, 
&field_arg) == FAILURE) {
-               WRONG_PARAM_COUNT;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &result_arg, 
&field_arg) == FAILURE) {
+               return;
        }
 
-       ZEND_FETCH_RESOURCE(ib_query, ibase_query *, result_arg, -1, LE_QUERY, 
le_query);
+       ZEND_FETCH_RESOURCE(ib_query, ibase_query *, &result_arg, -1, LE_QUERY, 
le_query);
 
        if (ib_query->in_sqlda == NULL) {
                RETURN_FALSE;
        }
 
-       convert_to_long_ex(field_arg);
-
-       if (Z_LVAL_PP(field_arg) < 0 || Z_LVAL_PP(field_arg) >= 
ib_query->in_sqlda->sqld) {
+       if (field_arg < 0 || field_arg >= ib_query->in_sqlda->sqld) {
                RETURN_FALSE;
        }
 
-       _php_ibase_field_info(return_value,ib_query->in_sqlda->sqlvar + 
Z_LVAL_PP(field_arg));
+       _php_ibase_field_info(return_value,ib_query->in_sqlda->sqlvar + 
field_arg);
 }
 /* }}} */
 
http://cvs.php.net/viewvc.cgi/php-src/ext/interbase/tests/ibase_num_params_001.phpt?r1=1.1.2.3&r2=1.1.2.4&diff_format=u
Index: php-src/ext/interbase/tests/ibase_num_params_001.phpt
diff -u php-src/ext/interbase/tests/ibase_num_params_001.phpt:1.1.2.3 
php-src/ext/interbase/tests/ibase_num_params_001.phpt:1.1.2.4
--- php-src/ext/interbase/tests/ibase_num_params_001.phpt:1.1.2.3       Mon Nov 
10 22:33:53 2008
+++ php-src/ext/interbase/tests/ibase_num_params_001.phpt       Thu Nov 27 
02:17:22 2008
@@ -23,10 +23,10 @@
 --EXPECTF--
 int(2)
 
-Warning: Wrong parameter count for ibase_num_params() in %s on line %d
+Warning: ibase_num_params() expects exactly 1 parameter, 0 given in %s on line 
%d
 NULL
 
-Warning: ibase_prepare(): Dynamic SQL Error SQL error code = -206 Column 
unknown X At line 1, column 52%s in %s on line %d
+Warning: ibase_prepare(): Dynamic SQL Error SQL error code = -206 Column 
unknown X At line 1, column 52  in %s on line %d
 
-Warning: ibase_num_params(): supplied argument is not a valid 
Firebird/InterBase query resource in %s on line %d
-bool(false)
+Warning: ibase_num_params() expects parameter 1 to be resource, boolean given 
in %s on line %d
+NULL
http://cvs.php.net/viewvc.cgi/php-src/ext/interbase/tests/ibase_param_info_001.phpt?r1=1.1.2.2&r2=1.1.2.3&diff_format=u
Index: php-src/ext/interbase/tests/ibase_param_info_001.phpt
diff -u php-src/ext/interbase/tests/ibase_param_info_001.phpt:1.1.2.2 
php-src/ext/interbase/tests/ibase_param_info_001.phpt:1.1.2.3
--- php-src/ext/interbase/tests/ibase_param_info_001.phpt:1.1.2.2       Mon Nov 
10 18:02:56 2008
+++ php-src/ext/interbase/tests/ibase_param_info_001.phpt       Thu Nov 27 
02:17:22 2008
@@ -49,5 +49,5 @@
 bool(false)
 ---
 
-Warning: Wrong parameter count for ibase_param_info() in %s on line %d
+Warning: ibase_param_info() expects exactly 2 parameters, 1 given in %s on 
line %d
 NULL

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

Reply via email to