abies           Wed Aug 20 08:40:05 2003 EDT

  Modified files:              
    /php-src/ext/interbase      interbase.c 
  Log:
  Moved some local vars to stack
  
  
  
Index: php-src/ext/interbase/interbase.c
diff -u php-src/ext/interbase/interbase.c:1.154 php-src/ext/interbase/interbase.c:1.155
--- php-src/ext/interbase/interbase.c:1.154     Wed Aug 20 08:22:58 2003
+++ php-src/ext/interbase/interbase.c   Wed Aug 20 08:40:05 2003
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: interbase.c,v 1.154 2003/08/20 12:22:58 abies Exp $ */
+/* $Id: interbase.c,v 1.155 2003/08/20 12:40:05 abies Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -285,8 +285,8 @@
        } else {
                ISC_UINT64 res;
                int n = sscanf(id, BLOB_ID_MASK, &res);
-               qd->gds_quad_high = (SLONG) (res >> 0x20);
-               qd->gds_quad_low = (ULONG) (res & 0xFFFFFFFF);
+               qd->gds_quad_high = (long) (res >> 0x20);
+               qd->gds_quad_low = (unsigned long) (res & 0xFFFFFFFF);
                return n;
        }
 }
@@ -461,29 +461,27 @@
 static void _php_ibase_free_query(ibase_query *ib_query TSRMLS_DC)
 {
        IBDEBUG("Freeing query...");
-       if (ib_query) {
-               if (ib_query->in_sqlda) {
-                       efree(ib_query->in_sqlda);
-               }
-               if (ib_query->out_sqlda) {
-                       efree(ib_query->out_sqlda);
-               }
-               if (ib_query->stmt) {
-                       IBDEBUG("Dropping statement handle (free_query)...");
-                       if (isc_dsql_free_statement(IB_STATUS, &ib_query->stmt, 
DSQL_drop)) {
-                               _php_ibase_error(TSRMLS_C);
-                       }
-               }
-               if (ib_query->in_array) {
-                       efree(ib_query->in_array);
-               }
-               if (ib_query->out_array) {
-                       efree(ib_query->out_array);
-               }
-               if (ib_query->query) {
-                       efree(ib_query->query);
+
+       if (ib_query->in_sqlda) {
+               efree(ib_query->in_sqlda);
+       }
+       if (ib_query->out_sqlda) {
+               efree(ib_query->out_sqlda);
+       }
+       if (ib_query->stmt) {
+               IBDEBUG("Dropping statement handle (free_query)...");
+               if (isc_dsql_free_statement(IB_STATUS, &ib_query->stmt, DSQL_drop)) {
+                       _php_ibase_error(TSRMLS_C);
                }
-               efree(ib_query);
+       }
+       if (ib_query->in_array) {
+               efree(ib_query->in_array);
+       }
+       if (ib_query->out_array) {
+               efree(ib_query->out_array);
+       }
+       if (ib_query->query) {
+               efree(ib_query->query);
        }
 }
 /* }}} */
@@ -491,30 +489,10 @@
 /* {{{ php_ibase_free_query_rsrc() */
 static void php_ibase_free_query_rsrc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
 {
-       ibase_query *ib_query = (ibase_query *)rsrc->ptr;
-
-       IBDEBUG("Freeing query by dtor...");
-       if (ib_query) {
-               if (ib_query->in_sqlda) {
-                       efree(ib_query->in_sqlda);
-               }
-               if (ib_query->out_sqlda) {
-                       efree(ib_query->out_sqlda);
-               }
-               if (ib_query->stmt) {
-                       IBDEBUG("Dropping statement handle (free_query dtor)...");
-                       isc_dsql_free_statement(IB_STATUS, &ib_query->stmt, DSQL_drop);
-               }
-               if (ib_query->in_array) {
-                       efree(ib_query->in_array);
-               }
-               if (ib_query->out_array) {
-                       efree(ib_query->out_array);
-               }
-               if (ib_query->query) {
-                       efree(ib_query->query);
-               }
-               efree(ib_query);
+       if (rsrc->ptr != NULL) {
+               IBDEBUG("Preparing to free query by dtor...");
+               _php_ibase_free_query((ibase_query *)rsrc->ptr);
+               efree(rsrc->ptr);
        }
 }
 /* }}} */
@@ -706,7 +684,7 @@
 
        php_info_print_table_start();
        php_info_print_table_row(2, "Interbase Support", "enabled");
-       php_info_print_table_row(2, "Revision", "$Revision: 1.154 $");
+       php_info_print_table_row(2, "Revision", "$Revision: 1.155 $");
 #ifdef COMPILE_DL_INTERBASE
        php_info_print_table_row(2, "Dynamic Module", "Yes");
 #endif
@@ -1176,120 +1154,114 @@
 
 /* {{{ _php_ibase_alloc_query() */
 /* allocate and prepare query */
-static int _php_ibase_alloc_query(ibase_query **ib_queryp, ibase_db_link *link, 
ibase_trans *trans, char *query, unsigned short dialect, int trans_res_id TSRMLS_DC)
+static int _php_ibase_alloc_query(ibase_query *ib_query, ibase_db_link *link, 
ibase_trans *trans, char *query, unsigned short dialect, int trans_res_id TSRMLS_DC)
 {
-#define IB_QUERY (*ib_queryp)
        static char info_type[] = {isc_info_sql_stmt_type};
        char result[8];
        
-       IB_QUERY = emalloc(sizeof(ibase_query));
-       IB_QUERY->link = link;
-       IB_QUERY->trans = trans;
-       IB_QUERY->stmt = NULL;
-       IB_QUERY->out_sqlda = NULL;
-       IB_QUERY->in_sqlda = NULL;
-       IB_QUERY->in_array = NULL;
-       IB_QUERY->in_array_cnt = 0;
-       IB_QUERY->out_array = NULL;
-       IB_QUERY->out_array_cnt = 0;
-       IB_QUERY->dialect = dialect;
-       IB_QUERY->statement_type = '\0';
-       IB_QUERY->query = estrdup(query);
-       IB_QUERY->trans_res_id = trans_res_id;
+       ib_query->link = link;
+       ib_query->trans = trans;
+       ib_query->stmt = NULL;
+       ib_query->out_sqlda = NULL;
+       ib_query->in_sqlda = NULL;
+       ib_query->in_array = NULL;
+       ib_query->in_array_cnt = 0;
+       ib_query->out_array = NULL;
+       ib_query->out_array_cnt = 0;
+       ib_query->dialect = dialect;
+       ib_query->statement_type = '\0';
+       ib_query->query = estrdup(query);
+       ib_query->trans_res_id = trans_res_id;
        
-       if (isc_dsql_allocate_statement(IB_STATUS, &link->handle, &IB_QUERY->stmt)) {
+       if (isc_dsql_allocate_statement(IB_STATUS, &link->handle, &ib_query->stmt)) {
                _php_ibase_error(TSRMLS_C);
                goto _php_ibase_alloc_query_error;
        }
 
-       IB_QUERY->out_sqlda = (XSQLDA *) emalloc(XSQLDA_LENGTH(1));
-       IB_QUERY->out_sqlda->sqln = 1;
-       IB_QUERY->out_sqlda->version = SQLDA_CURRENT_VERSION;
+       ib_query->out_sqlda = (XSQLDA *) emalloc(XSQLDA_LENGTH(1));
+       ib_query->out_sqlda->sqln = 1;
+       ib_query->out_sqlda->version = SQLDA_CURRENT_VERSION;
 
-       if (isc_dsql_prepare(IB_STATUS, &IB_QUERY->trans->handle, &IB_QUERY->stmt, 0, 
query, dialect, IB_QUERY->out_sqlda)) {
+       if (isc_dsql_prepare(IB_STATUS, &ib_query->trans->handle, &ib_query->stmt, 0, 
query, dialect, ib_query->out_sqlda)) {
                _php_ibase_error(TSRMLS_C);
                goto _php_ibase_alloc_query_error;
        }
 
        /* find out what kind of statement was prepared */
-       if (isc_dsql_sql_info(IB_STATUS, &IB_QUERY->stmt, sizeof(info_type), 
info_type, sizeof(result), result)) {
+       if (isc_dsql_sql_info(IB_STATUS, &ib_query->stmt, sizeof(info_type), 
info_type, sizeof(result), result)) {
                _php_ibase_error(TSRMLS_C);
                goto _php_ibase_alloc_query_error;
        }
-       IB_QUERY->statement_type = result[3];   
+       ib_query->statement_type = result[3];   
        
        /* not enough output variables ? */
-       if (IB_QUERY->out_sqlda->sqld > IB_QUERY->out_sqlda->sqln) {
-               IB_QUERY->out_sqlda = erealloc(IB_QUERY->out_sqlda, 
XSQLDA_LENGTH(IB_QUERY->out_sqlda->sqld));
-               IB_QUERY->out_sqlda->sqln = IB_QUERY->out_sqlda->sqld;
-               IB_QUERY->out_sqlda->version = SQLDA_CURRENT_VERSION;
-               if (isc_dsql_describe(IB_STATUS, &IB_QUERY->stmt, 
SQLDA_CURRENT_VERSION, IB_QUERY->out_sqlda)) {
+       if (ib_query->out_sqlda->sqld > ib_query->out_sqlda->sqln) {
+               ib_query->out_sqlda = erealloc(ib_query->out_sqlda, 
XSQLDA_LENGTH(ib_query->out_sqlda->sqld));
+               ib_query->out_sqlda->sqln = ib_query->out_sqlda->sqld;
+               ib_query->out_sqlda->version = SQLDA_CURRENT_VERSION;
+               if (isc_dsql_describe(IB_STATUS, &ib_query->stmt, 
SQLDA_CURRENT_VERSION, ib_query->out_sqlda)) {
                        _php_ibase_error(TSRMLS_C);
                        goto _php_ibase_alloc_query_error;
                }
        }
 
        /* maybe have input placeholders? */
-       IB_QUERY->in_sqlda = emalloc(XSQLDA_LENGTH(1));
-       IB_QUERY->in_sqlda->sqln = 1;
-       IB_QUERY->in_sqlda->version = SQLDA_CURRENT_VERSION;
-       if (isc_dsql_describe_bind(IB_STATUS, &IB_QUERY->stmt, SQLDA_CURRENT_VERSION, 
IB_QUERY->in_sqlda)) {
+       ib_query->in_sqlda = emalloc(XSQLDA_LENGTH(1));
+       ib_query->in_sqlda->sqln = 1;
+       ib_query->in_sqlda->version = SQLDA_CURRENT_VERSION;
+       if (isc_dsql_describe_bind(IB_STATUS, &ib_query->stmt, SQLDA_CURRENT_VERSION, 
ib_query->in_sqlda)) {
                _php_ibase_error(TSRMLS_C);
                goto _php_ibase_alloc_query_error;
        }
        
        /* not enough input variables ? */
-       if (IB_QUERY->in_sqlda->sqln < IB_QUERY->in_sqlda->sqld) {
-               IB_QUERY->in_sqlda = erealloc(IB_QUERY->in_sqlda, 
XSQLDA_LENGTH(IB_QUERY->in_sqlda->sqld));
-               IB_QUERY->in_sqlda->sqln = IB_QUERY->in_sqlda->sqld;
-               IB_QUERY->in_sqlda->version = SQLDA_CURRENT_VERSION;
-               if (isc_dsql_describe_bind(IB_STATUS, &IB_QUERY->stmt, 
SQLDA_CURRENT_VERSION, IB_QUERY->in_sqlda)) {
+       if (ib_query->in_sqlda->sqln < ib_query->in_sqlda->sqld) {
+               ib_query->in_sqlda = erealloc(ib_query->in_sqlda, 
XSQLDA_LENGTH(ib_query->in_sqlda->sqld));
+               ib_query->in_sqlda->sqln = ib_query->in_sqlda->sqld;
+               ib_query->in_sqlda->version = SQLDA_CURRENT_VERSION;
+               if (isc_dsql_describe_bind(IB_STATUS, &ib_query->stmt, 
SQLDA_CURRENT_VERSION, ib_query->in_sqlda)) {
                        _php_ibase_error(TSRMLS_C);
                        goto _php_ibase_alloc_query_error;
                }
        }
        
        /* allocate arrays... */
-       if (_php_ibase_alloc_array(&IB_QUERY->in_array, &IB_QUERY->in_array_cnt, 
IB_QUERY->in_sqlda, link->handle, trans->handle TSRMLS_CC) == FAILURE) {
+       if (_php_ibase_alloc_array(&ib_query->in_array, &ib_query->in_array_cnt, 
ib_query->in_sqlda, link->handle, trans->handle TSRMLS_CC) == FAILURE) {
                goto _php_ibase_alloc_query_error; /* error report already done */
        }
        
-       if (_php_ibase_alloc_array(&IB_QUERY->out_array, &IB_QUERY->out_array_cnt, 
IB_QUERY->out_sqlda, link->handle, trans->handle TSRMLS_CC) == FAILURE) {
+       if (_php_ibase_alloc_array(&ib_query->out_array, &ib_query->out_array_cnt, 
ib_query->out_sqlda, link->handle, trans->handle TSRMLS_CC) == FAILURE) {
                goto _php_ibase_alloc_query_error;
        }
 
        /* no, haven't placeholders at all */
-       if (IB_QUERY->in_sqlda->sqld == 0) {
-               efree(IB_QUERY->in_sqlda);
-               IB_QUERY->in_sqlda = NULL;
+       if (ib_query->in_sqlda->sqld == 0) {
+               efree(ib_query->in_sqlda);
+               ib_query->in_sqlda = NULL;
        }
 
-       if (IB_QUERY->out_sqlda->sqld == 0) {
-               efree(IB_QUERY->out_sqlda);
-               IB_QUERY->out_sqlda = NULL;
+       if (ib_query->out_sqlda->sqld == 0) {
+               efree(ib_query->out_sqlda);
+               ib_query->out_sqlda = NULL;
        }
 
        return SUCCESS;
        
 _php_ibase_alloc_query_error:
        
-       if (IB_QUERY->out_sqlda) {
-               efree(IB_QUERY->out_sqlda);
+       if (ib_query->out_sqlda) {
+               efree(ib_query->out_sqlda);
        }
-       if (IB_QUERY->in_sqlda) {
-               efree(IB_QUERY->in_sqlda);
+       if (ib_query->in_sqlda) {
+               efree(ib_query->in_sqlda);
        }
-       if (IB_QUERY->out_array) {
-               efree(IB_QUERY->out_array);
+       if (ib_query->out_array) {
+               efree(ib_query->out_array);
        }
-       if (IB_QUERY->query) {
-               efree(IB_QUERY->query);
+       if (ib_query->query) {
+               efree(ib_query->query);
        }
-       efree(IB_QUERY);
-       IB_QUERY = NULL;
-       
        return FAILURE;
-#undef IB_QUERY
 }
 /* }}} */
 
@@ -2055,7 +2027,7 @@
        int i, bind_n = 0, trans_res_id = 0;
        ibase_db_link *ib_link = NULL;
        ibase_trans *trans = NULL;
-       ibase_query *ib_query;
+       ibase_query ib_query;
        ibase_result *ib_result = NULL;
        char *query;
 
@@ -2181,8 +2153,8 @@
                RETURN_FALSE;
        }
 
-       if (_php_ibase_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, &ib_result, ib_query, 
bind_n, bind_args) == FAILURE) {
-               _php_ibase_free_query(ib_query TSRMLS_CC);
+       if (_php_ibase_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, &ib_result, &ib_query, 
bind_n, bind_args) == FAILURE) {
+               _php_ibase_free_query(&ib_query TSRMLS_CC);
                free_alloca(args);
                RETURN_FALSE;
        }
@@ -2191,13 +2163,12 @@
        
        if (ib_result) { /* select statement */
                ib_result->drop_stmt = 1; /* drop stmt when free result */
-               ib_query->stmt = NULL; /* keep stmt when free query */
-               _php_ibase_free_query(ib_query TSRMLS_CC);
                ib_result->has_more_rows = 1;
                ZEND_REGISTER_RESOURCE(return_value, ib_result, le_result);
-       } else {
-               _php_ibase_free_query(ib_query TSRMLS_CC);
+
+               ib_query.stmt = NULL; /* keep stmt when free query */
        }
+       _php_ibase_free_query(&ib_query TSRMLS_CC);
 }
 /* }}} */
 
@@ -2736,7 +2707,7 @@
 }
 /* }}} */
 
-/* {{{ proto array ibase_fetch_row(resource result [, int blob_flag])
+/* {{{ proto array ibase_fetch_row(resource result [, int fetch_flags])
    Fetch a row  from the results of a query */
 PHP_FUNCTION(ibase_fetch_row)
 {
@@ -2744,7 +2715,7 @@
 }
 /* }}} */
 
-/* {{{ proto array ibase_fetch_assoc(resource result [, int blob_flag])
+/* {{{ proto array ibase_fetch_assoc(resource result [, int fetch_flags])
    Fetch a row  from the results of a query */
 PHP_FUNCTION(ibase_fetch_assoc)
 {
@@ -2752,7 +2723,7 @@
 }
 /* }}} */
 
-/* {{{ proto object ibase_fetch_object(resource result [, int blob_flag])
+/* {{{ proto object ibase_fetch_object(resource result [, int fetch_flags])
    Fetch a object from the results of a query */
 PHP_FUNCTION(ibase_fetch_object)
 {
@@ -2865,7 +2836,10 @@
                RETURN_FALSE;
        }
        
-       if (_php_ibase_alloc_query(&ib_query, ib_link, trans, query, ib_link->dialect, 
trans_res_id TSRMLS_CC) == FAILURE) {
+       ib_query = emalloc(sizeof(ibase_query));
+
+       if (_php_ibase_alloc_query(ib_query, ib_link, trans, query, ib_link->dialect, 
trans_res_id TSRMLS_CC) == FAILURE) {
+               efree(ib_query);
                RETURN_FALSE;
        }
        ib_query->cursor_open = 0;

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

Reply via email to