georg Mon Nov 24 06:31:27 2003 EDT Modified files: /php-src/ext/mysqli mysqli.c Log: added/fixed write property Index: php-src/ext/mysqli/mysqli.c diff -u php-src/ext/mysqli/mysqli.c:1.19 php-src/ext/mysqli/mysqli.c:1.20 --- php-src/ext/mysqli/mysqli.c:1.19 Sat Nov 22 16:20:06 2003 +++ php-src/ext/mysqli/mysqli.c Mon Nov 24 06:31:26 2003 @@ -15,7 +15,7 @@ | Author: Georg Richter <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: mysqli.c,v 1.19 2003/11/22 21:20:06 georg Exp $ + $Id: mysqli.c,v 1.20 2003/11/24 11:31:26 georg Exp $ */ #ifdef HAVE_CONFIG_H @@ -44,7 +44,7 @@ extern void php_mysqli_connect(INTERNAL_FUNCTION_PARAMETERS); typedef int (*mysqli_read_t)(mysqli_object *obj, zval **retval TSRMLS_DC); -typedef int (*mysqli_write_t)(mysqli_object *obj, zval *member, zval *newval TSRMLS_DC); +typedef int (*mysqli_write_t)(mysqli_object *obj, zval *newval TSRMLS_DC); typedef struct _mysqli_prop_handler { mysqli_read_t read_func; @@ -149,7 +149,7 @@ /* }}} */ /* {{{ mysqli_write_na */ -static int mysqli_write_na(mysqli_object *obj, zval *member, zval *newval TSRMLS_DC) +static int mysqli_write_na(mysqli_object *obj, zval *newval TSRMLS_DC) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot write property"); return FAILURE; @@ -195,19 +195,50 @@ if (member == &tmp_member) { zval_dtor(member); } - - return(retval); } /* }}} */ -/* {{{ mysqli_write_property */ +/* {{{ mysqli_read_property */ void mysqli_write_property(zval *object, zval *member, zval *value TSRMLS_DC) { - return; + zval tmp_member; + mysqli_object *obj; + mysqli_prop_handler *hnd; + zend_object_handlers *std_hnd; + int ret; + + if (member->type != IS_STRING) { + tmp_member = *member; + zval_copy_ctor(&tmp_member); + convert_to_string(&tmp_member); + member = &tmp_member; + } + + ret = FAILURE; + obj = (mysqli_object *)zend_objects_get_address(object TSRMLS_CC); + + if (obj->prop_handler != NULL) { + ret = zend_hash_find((HashTable *)obj->prop_handler, Z_STRVAL_P(member), Z_STRLEN_P(member)+1, (void **) &hnd); + } + if (ret == SUCCESS) { + hnd->write_func(obj, value TSRMLS_CC); + if (! PZVAL_IS_REF(value) && value->refcount == 0) { + value->refcount++; + zval_ptr_dtor(&value); + } + } else { + std_hnd = zend_get_std_object_handlers(); + std_hnd->write_property(object, member, value TSRMLS_CC); + } + + if (member == &tmp_member) { + zval_dtor(member); + } } /* }}} */ + void mysqli_add_property(HashTable *h, char *pname, mysqli_read_t r_func, mysqli_write_t w_func TSRMLS_DC) { mysqli_prop_handler p;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php