abies           Mon Mar  8 05:49:21 2004 EDT

  Modified files:              
    /php-src/ext/interbase      interbase.c 
  Log:
  Merged some more odd fixes from my own branch
  
  
http://cvs.php.net/diff.php/php-src/ext/interbase/interbase.c?r1=1.206&r2=1.207&ty=u
Index: php-src/ext/interbase/interbase.c
diff -u php-src/ext/interbase/interbase.c:1.206 php-src/ext/interbase/interbase.c:1.207
--- php-src/ext/interbase/interbase.c:1.206     Mon Mar  8 05:32:23 2004
+++ php-src/ext/interbase/interbase.c   Mon Mar  8 05:49:17 2004
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: interbase.c,v 1.206 2004/03/08 10:32:23 abies Exp $ */
+/* $Id: interbase.c,v 1.207 2004/03/08 10:49:17 abies Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -30,7 +30,7 @@
 
 #include "php.h"
 
-#define FILE_REVISION "$Revision: 1.206 $"
+#define FILE_REVISION "$Revision: 1.207 $"
 
 #if HAVE_IBASE
 
@@ -860,7 +860,7 @@
                dpb += sprintf(dpb, "%c\2%c%c", isc_dpb_num_buffers, 
                        (char)(largs[BUF] >> 8), (char)(largs[BUF] & 0xff));
        }
-       if (isc_attach_database(IB_STATUS, len[DB], args[DB], db, 
(short)(dpb-dpb_buffer), dpb_buffer)) {
+       if (isc_attach_database(IB_STATUS, (short)len[DB], args[DB], db, 
(short)(dpb-dpb_buffer), dpb_buffer)) {
                _php_ibase_error(TSRMLS_C);
                return FAILURE;
        }
@@ -1757,15 +1757,16 @@
 static void _php_ibase_alloc_xsqlda(XSQLDA *sqlda) /* {{{ */
 {
        int i;
-       XSQLVAR *var = sqlda->sqlvar;
 
-       for (i = 0; i < sqlda->sqld; i++, var++) {
+       for (i = 0; i < sqlda->sqld; i++) {
+               XSQLVAR *var = &sqlda->sqlvar[i];
+
                switch (var->sqltype & ~1) {
                        case SQL_TEXT:
-                               var->sqldata = safe_emalloc(sizeof(char), 
(var->sqllen), 0);
+                               var->sqldata = safe_emalloc(sizeof(char), var->sqllen, 
0);
                                break;
                        case SQL_VARYING:
-                               var->sqldata = safe_emalloc(sizeof(char), (var->sqllen 
+ sizeof(short)), 0);
+                               var->sqldata = safe_emalloc(sizeof(char), var->sqllen 
+ sizeof(short), 0);
                                break;
                        case SQL_SHORT:
                                var->sqldata = emalloc(sizeof(short));
@@ -2316,17 +2317,20 @@
 
        /* use stack to avoid leaks */
        args = (zval ***) do_alloca(sizeof(zval **) * ZEND_NUM_ARGS());
+
+       RETVAL_FALSE;
+
        if (zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
-               free_alloca(args);
-               RETURN_FALSE;
+               goto ibase_query_end;
+
        }
        
        i = 0;
        while (Z_TYPE_PP(args[i++]) != IS_STRING) {
                if (i >= ZEND_NUM_ARGS()) {
                        _php_ibase_module_error("Query argument missing" TSRMLS_CC);
-                       free_alloca(args);
-                       RETURN_FALSE;
+                       goto ibase_query_end;
+
                }
        }
 
@@ -2347,8 +2351,7 @@
                                if (isc_dsql_execute_immediate(IB_STATUS, &db, &trans, 
0, query, 
                                                SQL_DIALECT_CURRENT, NULL)) {
                                        _php_ibase_error(TSRMLS_C);
-                                       free_alloca(args);
-                                       RETURN_FALSE;
+                                       goto ibase_query_end;
                                }
                                
                                /* has a new database been created ? */
@@ -2359,8 +2362,7 @@
                                                /* too many links already ? => close 
it up immediately */
                                                if (isc_detach_database(IB_STATUS, 
&db)) {
                                                        _php_ibase_error(TSRMLS_C);
-                                                       free_alloca(args);
-                                                       RETURN_FALSE;
+                                                       goto ibase_query_end;
                                                }
                                        } else {
                                                        
@@ -2375,9 +2377,7 @@
                                                
zend_list_addref(Z_LVAL_P(return_value));
                                                IBG(default_link) = 
Z_LVAL_P(return_value);
                                                IBG(num_links)++;
-
-                                               free_alloca(args);
-                                               return;
+                                               goto ibase_query_end;
                                        }
                                }
                                RETURN_TRUE;
@@ -2409,40 +2409,30 @@
                default:
                        /* more than two arguments preceed the SQL string */
                        _php_ibase_module_error("Invalid arguments" TSRMLS_CC);
-                       free_alloca(args);
-                       RETURN_FALSE;
+                       goto ibase_query_end;
        }
                        
        if (ZEND_NUM_ARGS() > i) { /* have variables to bind */
-               /* Using variables in a query without preparing it can be
-                  useful, because it allows you to use (among other things) 
-                  SQL-queries as consts and the passing of string arguments 
-                  without the horror of [un]slashing them. */
                bind_n = ZEND_NUM_ARGS() - i;
                bind_args = args[i];
        }
 
        /* open default transaction */
        if (ib_link == NULL || _php_ibase_def_trans(ib_link, &trans TSRMLS_CC) == 
FAILURE) {
-               free_alloca(args);
-               RETURN_FALSE;
+               goto ibase_query_end;
        }
 
        if (FAILURE == _php_ibase_alloc_query(&ib_query, ib_link, trans, query, 
ib_link->dialect,
                        trans_res_id TSRMLS_CC)) {
-               free_alloca(args);
-               RETURN_FALSE;
+               goto ibase_query_end;
        }
 
+       do {
                if (FAILURE == _php_ibase_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 
&result, &ib_query, 
                                bind_n, bind_args)) {
-               _php_ibase_free_query(&ib_query TSRMLS_CC);
-               free_alloca(args);
-               RETURN_FALSE;
+                       break;
                }
        
-       free_alloca(args);
-       
                if (result != NULL) { /* statement returns a result */
                        result->type = QUERY_RESULT;    
        
@@ -2452,7 +2442,11 @@
                        }
                        ZEND_REGISTER_RESOURCE(return_value, result, le_result);
                }
+       } while (0);
        _php_ibase_free_query(&ib_query TSRMLS_CC);
+
+ibase_query_end:
+       free_alloca(args);
 }
 /* }}} */
 
@@ -2734,9 +2728,6 @@
                
                if (FAILURE == _php_ibase_var_zval(ar_zval, data, ib_array->el_type,
                                ib_array->ar_desc.array_desc_length, 
ib_array->ar_desc.array_desc_scale, flag TSRMLS_CC)) {
-
-
-
                        return FAILURE;
                }
                
@@ -3257,7 +3248,7 @@
        add_assoc_stringl(return_value, "length", buf, len, 1);
 
        if (var->sqlscale < 0) {
-               unsigned short precision;
+               unsigned short precision = 0;
 
                switch (var->sqltype & ~1) {
 

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

Reply via email to