andrey          Wed May 10 12:29:10 2006 UTC

  Modified files:              
    /php-src/ext/mysqli mysqli.c mysqli_api.c 
  Log:
  MFB
  
  
http://cvs.php.net/viewcvs.cgi/php-src/ext/mysqli/mysqli.c?r1=1.87&r2=1.88&diff_format=u
Index: php-src/ext/mysqli/mysqli.c
diff -u php-src/ext/mysqli/mysqli.c:1.87 php-src/ext/mysqli/mysqli.c:1.88
--- php-src/ext/mysqli/mysqli.c:1.87    Tue May  9 11:27:20 2006
+++ php-src/ext/mysqli/mysqli.c Wed May 10 12:29:09 2006
@@ -15,7 +15,7 @@
   | Author: Georg Richter <[EMAIL PROTECTED]>                                |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli.c,v 1.87 2006/05/09 11:27:20 georg Exp $ 
+  $Id: mysqli.c,v 1.88 2006/05/10 12:29:09 andrey Exp $ 
 */
 
 #ifdef HAVE_CONFIG_H
@@ -69,10 +69,6 @@
                return;
        }
 
-       if (bbuf.is_null) {
-               efree(bbuf.is_null);
-       }
-
        for (i=0; i < bbuf.var_cnt; i++) {
 
                /* free temporary bind buffer */
@@ -89,9 +85,18 @@
                efree(bbuf.vars);
        }
 
+       /*
+         Don't free bbuf.is_null for FETCH_RESULT since we have allocated
+         is_null and buf in one block so we free only buf, which is the 
beginning
+         of the block. When FETCH_SIMPLE then buf wasn't allocated together 
with
+         buf and we have to free it.
+       */
        if (type == FETCH_RESULT) {
                efree(bbuf.buf);
+       } else if (type == FETCH_SIMPLE){
+               efree(bbuf.is_null);
        }
+
        bbuf.var_cnt = 0;
        return;
 }
@@ -158,16 +163,16 @@
                        efree(mysql);
                        my_res->ptr = NULL;
                }
-       } else if (instanceof_function(intern->zo.ce, mysqli_stmt_class_entry 
TSRMLS_CC)) { /* stmt obj */
+       } else if (instanceof_function(intern->zo.ce, mysqli_stmt_class_entry 
TSRMLS_CC)) { /* stmt object */
                if (my_res && my_res->ptr) {
                        MY_STMT *stmt = (MY_STMT *)my_res->ptr;
                        php_clear_stmt_bind(stmt);
                }
-       } else if (instanceof_function(intern->zo.ce, mysqli_result_class_entry 
TSRMLS_CC)) { /* result obj */
+       } else if (instanceof_function(intern->zo.ce, mysqli_result_class_entry 
TSRMLS_CC)) { /* result object */
                if (my_res && my_res->ptr) {
                        mysql_free_result(my_res->ptr);
                }
-       } else if (instanceof_function(intern->zo.ce, 
mysqli_warning_class_entry TSRMLS_CC)) { /* warning obj */
+       } else if (instanceof_function(intern->zo.ce, 
mysqli_warning_class_entry TSRMLS_CC)) { /* warning object */
                if (my_res && my_res->ptr) {
                        php_clear_warnings((MYSQLI_WARNING *)my_res->info);
                }
@@ -453,7 +458,7 @@
        zend_hash_init(&mysqli_driver_properties, 0, NULL, NULL, 1);
        MYSQLI_ADD_PROPERTIES(&mysqli_driver_properties, 
mysqli_driver_property_entries);
        zend_hash_add(&classes, ce->name.s, ce->name_length+1, 
&mysqli_driver_properties, sizeof(mysqli_driver_properties), NULL);
-    ce->ce_flags |= ZEND_ACC_FINAL_CLASS;
+       ce->ce_flags |= ZEND_ACC_FINAL_CLASS;
 
        REGISTER_MYSQLI_CLASS_ENTRY("mysqli", mysqli_link_class_entry, 
mysqli_link_methods);
        ce = mysqli_link_class_entry;
@@ -463,7 +468,7 @@
 
        REGISTER_MYSQLI_CLASS_ENTRY("mysqli_warning", 
mysqli_warning_class_entry, mysqli_warning_methods);
        ce = mysqli_warning_class_entry;
-    ce->ce_flags |= ZEND_ACC_FINAL_CLASS | ZEND_ACC_PROTECTED;
+       ce->ce_flags |= ZEND_ACC_FINAL_CLASS | ZEND_ACC_PROTECTED;
        zend_hash_init(&mysqli_warning_properties, 0, NULL, NULL, 1);
        MYSQLI_ADD_PROPERTIES(&mysqli_warning_properties, 
mysqli_warning_property_entries);
        zend_hash_add(&classes, ce->name.s, ce->name_length+1, 
&mysqli_warning_properties, sizeof(mysqli_warning_properties), NULL);
@@ -560,11 +565,14 @@
        REGISTER_LONG_CONSTANT("MYSQLI_TYPE_CHAR", FIELD_TYPE_CHAR, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("MYSQLI_TYPE_INTERVAL", FIELD_TYPE_INTERVAL, 
CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("MYSQLI_TYPE_GEOMETRY", FIELD_TYPE_GEOMETRY, 
CONST_CS | CONST_PERSISTENT);
+
 #if MYSQL_VERSION_ID > 50002
        REGISTER_LONG_CONSTANT("MYSQLI_TYPE_NEWDECIMAL", FIELD_TYPE_NEWDECIMAL, 
CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("MYSQLI_TYPE_BIT", FIELD_TYPE_BIT, CONST_CS | 
CONST_PERSISTENT);
 #endif
 
+
+
        /* replication */
        REGISTER_LONG_CONSTANT("MYSQLI_RPL_MASTER", MYSQL_RPL_MASTER, CONST_CS 
| CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("MYSQLI_RPL_SLAVE", MYSQL_RPL_SLAVE, CONST_CS | 
CONST_PERSISTENT);
@@ -693,7 +701,7 @@
        mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, 
sizeof(MYSQLI_RESOURCE));
        mysqli_resource->ptr = (void *)stmt;
        mysqli_resource->status = (ZEND_NUM_ARGS() == 1) ? 
MYSQLI_STATUS_INITIALIZED : MYSQLI_STATUS_VALID;
-       
+
        ((mysqli_object *) zend_object_store_get_object(getThis() 
TSRMLS_CC))->ptr = mysqli_resource;
 }
 /* }}} */
http://cvs.php.net/viewcvs.cgi/php-src/ext/mysqli/mysqli_api.c?r1=1.126&r2=1.127&diff_format=u
Index: php-src/ext/mysqli/mysqli_api.c
diff -u php-src/ext/mysqli/mysqli_api.c:1.126 
php-src/ext/mysqli/mysqli_api.c:1.127
--- php-src/ext/mysqli/mysqli_api.c:1.126       Tue May  9 11:27:20 2006
+++ php-src/ext/mysqli/mysqli_api.c     Wed May 10 12:29:09 2006
@@ -15,7 +15,7 @@
   | Author: Georg Richter <[EMAIL PROTECTED]>                                |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli_api.c,v 1.126 2006/05/09 11:27:20 georg Exp $ 
+  $Id: mysqli_api.c,v 1.127 2006/05/10 12:29:09 andrey Exp $ 
 */
 
 #ifdef HAVE_CONFIG_H
@@ -250,12 +250,16 @@
        }
 
        bind = (MYSQL_BIND *)ecalloc(var_cnt, sizeof(MYSQL_BIND));
-       stmt->result.buf = (VAR_BUFFER *)ecalloc(var_cnt,sizeof(VAR_BUFFER));
-       stmt->result.is_null = (char *)ecalloc(var_cnt, sizeof(char));
+       {
+               int size;
+               char *p= emalloc(size= var_cnt * (sizeof(char) + 
sizeof(VAR_BUFFER)));
+               stmt->result.buf = (VAR_BUFFER *) p;
+               stmt->result.is_null = p + var_cnt * sizeof(VAR_BUFFER);
+               memset(p, 0, size);
+       }
 
        for (i=start; i < var_cnt + start ; i++) {
                ofs = i - start;
-               stmt->result.is_null[ofs] = 0;
                col_type = (stmt->stmt->fields) ? stmt->stmt->fields[ofs].type 
: MYSQL_TYPE_STRING;
 
                switch (col_type) {
@@ -373,8 +377,8 @@
                                efree(stmt->result.buf[i].val);
                        }
                }
+               /* Don't free stmt->result.is_null because is_null & buf are 
one block of memory  */
                efree(stmt->result.buf);
-               efree(stmt->result.is_null);
                RETVAL_FALSE;
        } else {
                stmt->result.var_cnt = var_cnt;
@@ -1276,6 +1280,7 @@
                        ret = mysql_options(mysql->mysql, mysql_option, (char 
*)&l_value);
                        break;
        }
+
        RETURN_BOOL(!ret);
 }   
 /* }}} */
@@ -1295,6 +1300,7 @@
        MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", 
MYSQLI_STATUS_VALID);
        rc = mysql_ping(mysql->mysql);
        MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
+
        RETURN_BOOL(!rc);
 }
 /* }}} */
@@ -1412,21 +1418,23 @@
        }
 
        if 
(mysql_real_connect(mysql->mysql,hostname,username,passwd,dbname,port,socket,flags)
 == NULL) {
-               
                php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) 
mysql_error(mysql->mysql) TSRMLS_CC);
                php_mysqli_throw_sql_exception( mysql->mysql->net.sqlstate, 
mysql->mysql->net.last_errno TSRMLS_CC,
                                                                                
"%s", mysql->mysql->net.last_error);
+
                /* change status */
                MYSQLI_SET_STATUS(&mysql_link, MYSQLI_STATUS_INITIALIZED);
-
                RETURN_FALSE;
        }
+
        php_mysqli_set_error(mysql_errno(mysql->mysql), (char 
*)mysql_error(mysql->mysql) TSRMLS_CC);
 
        mysql->mysql->reconnect = MyG(reconnect);
 
        /* set our own local_infile handler */
        php_set_local_infile_handler_default(mysql);
+
+       /* change status */
        MYSQLI_SET_STATUS(&mysql_link, MYSQLI_STATUS_VALID);
 
        RETURN_TRUE;
@@ -1531,6 +1539,7 @@
 }
 /* }}} */
 
+
 /* {{{ proto mixed mysqli_stmt_affected_rows(object stmt)
    Return the number of rows affected in the last query for the given link */
 PHP_FUNCTION(mysqli_stmt_affected_rows)
@@ -1785,7 +1794,7 @@
 
 /* }}} */
  
-/* {{{ proto int mysqli_stmt_attr_set(object stmt, long attr, bool mode)
+/* {{{ proto int mysqli_stmt_attr_set(object stmt, long attr, long mode)
 */
 PHP_FUNCTION(mysqli_stmt_attr_set)
 {
@@ -2073,7 +2082,6 @@
        if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
                php_mysqli_report_index("from previous query", 
mysql->mysql->server_status TSRMLS_CC);
        }
-
        mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, 
sizeof(MYSQLI_RESOURCE));
        mysqli_resource->ptr = (void *)result;
        mysqli_resource->status = MYSQLI_STATUS_VALID;

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

Reply via email to