From: Stanislav Malyshev Date: Tue, 14 Jan 2003 12:15:09 +0000 (+0000) Subject: Make add_property_ functions work via write_property handler X-Git-Tag: PHP_5_0_dev_before_13561_fix~251 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eccc53688380ab46ea6f36127a62a0e30664d252;p=php Make add_property_ functions work via write_property handler --- diff --git a/Zend/zend_API.c b/Zend/zend_API.c index b3c08b14c7..3d41e15f98 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -933,90 +933,111 @@ ZEND_API int add_get_index_stringl(zval *arg, uint index, char *str, uint length } -ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long n) +ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long n TSRMLS_DC) { zval *tmp; - TSRMLS_FETCH(); + zval z_key; MAKE_STD_ZVAL(tmp); ZVAL_LONG(tmp, n); + ZVAL_STRINGL(&z_key, key, key_len, 0); - return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL); + Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC); + return SUCCESS; } -ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b) +ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b TSRMLS_DC) { zval *tmp; - TSRMLS_FETCH(); + zval z_key; MAKE_STD_ZVAL(tmp); ZVAL_BOOL(tmp, b); - return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL); + ZVAL_STRINGL(&z_key, key, key_len, 0); + + Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC); + return SUCCESS; } -ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len) +ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len TSRMLS_DC) { zval *tmp; - TSRMLS_FETCH(); + zval z_key; MAKE_STD_ZVAL(tmp); ZVAL_NULL(tmp); - return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL); + ZVAL_STRINGL(&z_key, key, key_len, 0); + + Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC); + return SUCCESS; } -ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long n) +ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long n TSRMLS_DC) { zval *tmp; - TSRMLS_FETCH(); + zval z_key; MAKE_STD_ZVAL(tmp); ZVAL_RESOURCE(tmp, n); + ZVAL_STRINGL(&z_key, key, key_len, 0); - return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL); + Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC); + return SUCCESS; } -ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d) +ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d TSRMLS_DC) { zval *tmp; - TSRMLS_FETCH(); + zval z_key; MAKE_STD_ZVAL(tmp); ZVAL_DOUBLE(tmp, d); + ZVAL_STRINGL(&z_key, key, key_len, 0); - return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL); + Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC); + return SUCCESS; } -ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate) +ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate TSRMLS_DC) { zval *tmp; - TSRMLS_FETCH(); + zval z_key; MAKE_STD_ZVAL(tmp); ZVAL_STRING(tmp, str, duplicate); - return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL); + ZVAL_STRINGL(&z_key, key, key_len, 0); + + Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC); + return SUCCESS; } -ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate) +ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate TSRMLS_DC) { zval *tmp; - TSRMLS_FETCH(); + zval z_key; MAKE_STD_ZVAL(tmp); ZVAL_STRINGL(tmp, str, length, duplicate); - return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &tmp, sizeof(zval *), NULL); + ZVAL_STRINGL(&z_key, key, key_len, 0); + + Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, tmp TSRMLS_CC); + return SUCCESS; } -ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value) +ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value TSRMLS_DC) { - TSRMLS_FETCH(); + zval z_key; - return zend_hash_update(Z_OBJPROP_P(arg), key, key_len, (void *) &value, sizeof(zval *), NULL); + ZVAL_STRINGL(&z_key, key, key_len, 0); + + Z_OBJ_HANDLER_P(arg, write_property)(arg, &z_key, value TSRMLS_CC); + return SUCCESS; } ZEND_API int zend_startup_module(zend_module_entry *module) diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 5695cc9b8e..58b109e983 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -220,23 +220,23 @@ ZEND_API int add_get_index_double(zval *arg, uint idx, double d, void **dest); ZEND_API int add_get_index_string(zval *arg, uint idx, char *str, void **dest, int duplicate); ZEND_API int add_get_index_stringl(zval *arg, uint idx, char *str, uint length, void **dest, int duplicate); -ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long l); -ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len); -ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b); -ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long r); -ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d); -ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate); -ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate); -ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value); - -#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key)+1, __n) -#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key) + 1) -#define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key)+1, __b) -#define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key)+1, __r) -#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key)+1, __d) -#define add_property_string(__arg, __key, __str, __duplicate) add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate) -#define add_property_stringl(__arg, __key, __str, __length, __duplicate) add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate) -#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key)+1, __value) +ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long l TSRMLS_DC); +ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len TSRMLS_DC); +ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b TSRMLS_DC); +ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long r TSRMLS_DC); +ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d TSRMLS_DC); +ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate TSRMLS_DC); +ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate TSRMLS_DC); +ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value TSRMLS_DC); + +#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key)+1, __n TSRMLS_CC) +#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key) + 1 TSRMLS_CC) +#define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key)+1, __b TSRMLS_CC) +#define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key)+1, __r TSRMLS_CC) +#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key)+1, __d TSRMLS_CC) +#define add_property_string(__arg, __key, __str, __duplicate) add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate TSRMLS_CC) +#define add_property_stringl(__arg, __key, __str, __length, __duplicate) add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate TSRMLS_CC) +#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key)+1, __value TSRMLS_CC) ZEND_API int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, int param_count, zval *params[] TSRMLS_DC); ZEND_API int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation, HashTable *symbol_table TSRMLS_DC);