# define PHP_HTTP_PPDBG 0
#endif
-php_http_property_proxy_t *php_http_property_proxy_init(php_http_property_proxy_t *proxy, zval *object, zval *member, zval *parent TSRMLS_DC)
+PHP_HTTP_API php_http_property_proxy_t *php_http_property_proxy_init(php_http_property_proxy_t *proxy, zval *object, zval *member, zval *parent TSRMLS_DC)
{
if (!proxy) {
proxy = emalloc(sizeof(*proxy));
memset(proxy, 0, sizeof(*proxy));
MAKE_STD_ZVAL(proxy->myself);
- ZVAL_OBJVAL(proxy->myself, php_http_property_proxy_object_new_ex(php_http_property_proxy_class_entry, proxy, NULL TSRMLS_CC), 0);
+ ZVAL_OBJVAL(proxy->myself, php_http_property_proxy_object_new_ex(php_http_property_proxy_get_class_entry(), proxy, NULL TSRMLS_CC), 0);
Z_ADDREF_P(object);
proxy->object = object;
proxy->member = php_http_ztyp(IS_STRING, member);
return proxy;
}
-void php_http_property_proxy_dtor(php_http_property_proxy_t *proxy)
+PHP_HTTP_API void php_http_property_proxy_dtor(php_http_property_proxy_t *proxy)
{
zval_ptr_dtor(&proxy->object);
zval_ptr_dtor(&proxy->member);
}
}
-void php_http_property_proxy_free(php_http_property_proxy_t **proxy)
+PHP_HTTP_API void php_http_property_proxy_free(php_http_property_proxy_t **proxy)
{
if (*proxy) {
php_http_property_proxy_dtor(*proxy);
PHP_HTTP_EMPTY_ARGS(__construct);
-zend_class_entry *php_http_property_proxy_class_entry;
-zend_function_entry php_http_property_proxy_method_entry[] = {
+static zend_class_entry *php_http_property_proxy_class_entry;
+
+zend_class_entry *php_http_property_proxy_get_class_entry(void)
+{
+ return php_http_property_proxy_class_entry;
+}
+
+static zend_function_entry php_http_property_proxy_method_entry[] = {
PHP_HTTP_PP_ME(__construct, ZEND_ACC_FINAL|ZEND_ACC_PRIVATE)
EMPTY_FUNCTION_ENTRY
};
+
static zend_object_handlers php_http_property_proxy_object_handlers;
zend_object_value php_http_property_proxy_object_new(zend_class_entry *ce TSRMLS_DC)
MAKE_STD_ZVAL(unset);
ZVAL_NULL(unset);
zend_symtable_update(Z_ARRVAL_P(obj->proxy->object), Z_STRVAL_P(obj->proxy->member), Z_STRLEN_P(obj->proxy->member)+1, (void *) &unset, sizeof(zval *), (void *) &data);
+ Z_ADDREF_PP(data);
}
return *data;
#if PHP_HTTP_PPDBG
fprintf(stderr, "proxy_set: %s\n", Z_STRVAL_P(obj->proxy->member));
#endif
+ Z_ADDREF_P(value);
if (Z_TYPE_P(target) == IS_OBJECT) {
zend_update_property(Z_OBJCE_P(target), target, Z_STRVAL_P(obj->proxy->member), Z_STRLEN_P(obj->proxy->member), value TSRMLS_CC);
} else {
- Z_ADDREF_P(value);
zend_symtable_update(Z_ARRVAL_P(target), Z_STRVAL_P(obj->proxy->member), Z_STRLEN_P(obj->proxy->member)+1, (void *) &value, sizeof(zval *), NULL);
}
/* propagate */
PHP_MINIT_FUNCTION(http_property_proxy)
{
- PHP_HTTP_REGISTER_CLASS(http\\Object, PropertyProxy, http_property_proxy, NULL, ZEND_ACC_FINAL);
+ PHP_HTTP_REGISTER_CLASS(http\\Object, PropertyProxy, http_property_proxy, NULL, ZEND_ACC_FINAL_CLASS);
php_http_property_proxy_class_entry->create_object = php_http_property_proxy_object_new;
memcpy(&php_http_property_proxy_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
php_http_property_proxy_object_handlers.set = php_http_property_proxy_object_set;