diff options
author | Harald Radi <phanto@php.net> | 2001-07-29 22:37:42 +0000 |
---|---|---|
committer | Harald Radi <phanto@php.net> | 2001-07-29 22:37:42 +0000 |
commit | f05328fdd664abc013c73c057579fa0e3912e5d8 (patch) | |
tree | 0a205e69fc16147e2966ba57900a5ada4fad348c | |
parent | e27b13af238beb554b912e9fc48f54053ec9911d (diff) | |
download | php-git-f05328fdd664abc013c73c057579fa0e3912e5d8.tar.gz |
- MFH and another set of memory fixes
- there were lots of changes in the zend core
and now the heap corruptions disapeared as
inconspicuous as they appeared.
maybe they were not our fault.
-rw-r--r-- | ext/com/COM.c | 57 | ||||
-rw-r--r-- | ext/com/VARIANT.c | 26 | ||||
-rw-r--r-- | ext/com/com.h | 18 | ||||
-rw-r--r-- | ext/com/conversion.c | 10 | ||||
-rw-r--r-- | ext/rpc/com/com_wrapper.c | 57 | ||||
-rw-r--r-- | ext/rpc/com/com_wrapper.h | 18 | ||||
-rw-r--r-- | ext/rpc/com/conversion.c | 10 | ||||
-rw-r--r-- | ext/rpc/com/variant.c | 26 |
8 files changed, 118 insertions, 104 deletions
diff --git a/ext/com/COM.c b/ext/com/COM.c index 7c2e761cc0..ab3ea4e8c3 100644 --- a/ext/com/COM.c +++ b/ext/com/COM.c @@ -378,8 +378,7 @@ static PHP_INI_MH(OnTypelibFileChange) char *typelib_name_buffer; char *strtok_buf = NULL; int interactive; - - CLS_FETCH(); + TSRMLS_FETCH(); interactive = CG(interactive); if(!new_value || (typelib_file = VCWD_FOPEN(new_value, "r"))==NULL) @@ -437,7 +436,7 @@ static PHP_INI_MH(OnTypelibFileChange) { printf("\rLoading %-60s\r", typelib_name); } - + if((pTL = php_COM_find_typelib(typelib_name, mode)) != NULL) { php_COM_load_typelib(pTL, mode); @@ -953,7 +952,6 @@ static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cle if(cleanup) { php_COM_destruct(array); - efree(array); } return retval; @@ -1113,7 +1111,7 @@ PHP_FUNCTION(com_propget) ALLOC_VARIANT(var_result); - if(do_COM_propget(var_result, obj, arg_property, 0)==FAILURE) + if(do_COM_propget(var_result, obj, arg_property, FALSE) == FAILURE) { FREE_VARIANT(var_result); RETURN_FALSE; @@ -1206,7 +1204,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer ZVAL_NULL(&return_value); /* fetch the IDispatch interface */ - zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle); + zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle); obj = (comval *) zend_list_find(Z_LVAL_P(*comval_handle), &type); if(!obj || (type != IS_COM)) { @@ -1225,7 +1223,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer if(do_COM_offget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return return_value; } @@ -1235,7 +1233,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer if(do_COM_propget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return return_value; } @@ -1243,15 +1241,18 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer case OE_IS_METHOD: { + FREE_VARIANT(var_result); if(obj != obj_prop) { - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return_value = *object; ZVAL_ADDREF(&return_value); } - FREE_VARIANT(var_result); - + else + { + RETVAL_COM(obj); + } return return_value; } break; @@ -1262,21 +1263,19 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer if(V_DISPATCH(var_result) == NULL) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return return_value; } obj = obj_prop; php_COM_set(obj, &V_DISPATCH(var_result), TRUE); - - RETVAL_COM(obj); } else { php_variant_to_pval(var_result, &return_value, FALSE, codepage); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); obj_prop = NULL; } @@ -1302,7 +1301,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere /* fetch the IDispatch interface */ - zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle); + zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle); obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type); if(!obj || (type != IS_COM)) { @@ -1321,7 +1320,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere if(do_COM_offget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return FAILURE; } @@ -1331,7 +1330,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere if(do_COM_propget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return FAILURE; } @@ -1348,7 +1347,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere if(V_DISPATCH(var_result) == NULL) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return FAILURE; } @@ -1358,7 +1357,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere } else { - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); FREE_VARIANT(var_result); return FAILURE; @@ -1371,7 +1370,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere overloaded_property = (zend_overloaded_element *) element->data; do_COM_propput(&result, obj, &overloaded_property->element, value); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); pval_destructor(&overloaded_property->element); @@ -1401,7 +1400,7 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro *object_handle = *return_value; pval_copy_constructor(object_handle); INIT_PZVAL(object_handle); - zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL); + zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL); pval_destructor(&function_name->element); return; @@ -1417,8 +1416,8 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro pval_destructor(&function_name->element); return; } - zend_hash_index_find(property.value.obj.properties, 0, (void **) &handle); - obj = (comval *)zend_list_find((*handle)->value.lval,&type); + zend_hash_index_find(Z_OBJPROP(property), 0, (void **) &handle); + obj = (comval *)zend_list_find(Z_LVAL_PP(handle), &type); if(!obj || (type != IS_COM)) { @@ -1450,8 +1449,6 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro if(do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count) == FAILURE) { - FREE_VARIANT(var_result); - RETVAL_FALSE; } else @@ -1660,7 +1657,7 @@ static int php_COM_load_typelib(ITypeLib *TypeLib, int mode) ITypeComp *TypeComp; int i; int interfaces; - ELS_FETCH(); + TSRMLS_FETCH(); if(NULL == TypeLib) { @@ -1729,7 +1726,7 @@ static int php_COM_load_typelib(ITypeLib *TypeLib, int mode) /* Before registering the contsnt, let's see if we can find it */ { - zend_register_constant(&c ELS_CC); + zend_register_constant(&c TSRMLS_CC); } j++; } @@ -1757,8 +1754,8 @@ PHP_FUNCTION(com_isenum) getParameters(ht, 1, &object); /* obtain IDispatch interface */ - zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle); - obj = (comval *) zend_list_find((*comval_handle)->value.lval, &type); + zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle); + obj = (comval *) zend_list_find(Z_LVAL_PP(comval_handle), &type); if(!obj || (type != IS_COM)) { php_error(E_WARNING,"%s is not a COM object handler", ""); diff --git a/ext/com/VARIANT.c b/ext/com/VARIANT.c index 49a7335ca0..fc04752f6c 100644 --- a/ext/com/VARIANT.c +++ b/ext/com/VARIANT.c @@ -98,10 +98,18 @@ PHP_MINIT_FUNCTION(VARIANT) REGISTER_LONG_CONSTANT("CP_ACP", CP_ACP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_MACCP", CP_MACCP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_OEMCP", CP_OEMCP, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_UTF7", CP_UTF7, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_UTF8", CP_UTF8, CONST_CS | CONST_PERSISTENT); +#ifdef CP_SYMBOL + REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT); +#else +# error "CP_SYMBOL undefined" +#endif +#ifdef CP_THREAD_ACP + REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT); +#else +# error "CP_THREAD_ACP undefined" +#endif php_register_VARIANT_class(); return SUCCESS; @@ -169,8 +177,8 @@ void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_proper *object_handle = *return_value; pval_copy_constructor(object_handle); INIT_PZVAL(object_handle); - zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL); - pval_destructor(&function_name->element); + zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL); + zval_dtor(&function_name->element); } } @@ -184,7 +192,7 @@ pval php_VARIANT_get_property_handler(zend_property_reference *property_referenc VARIANT *var_arg; /* fetch the VARIANT structure */ - zend_hash_index_find(object->value.obj.properties, 0, (void **) &var_handle); + zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle); var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type); if(!var_arg || (type != IS_VARIANT)) @@ -220,7 +228,7 @@ pval php_VARIANT_get_property_handler(zend_property_reference *property_referenc php_error(E_WARNING, "Unknown method."); break; - pval_destructor(&overloaded_property->element); + zval_dtor(&overloaded_property->element); } } @@ -236,7 +244,7 @@ int php_VARIANT_set_property_handler(zend_property_reference *property_reference VARIANT *var_arg; /* fetch the VARIANT structure */ - zend_hash_index_find(object->value.obj.properties, 0, (void **) &var_handle); + zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle); var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type); if(!var_arg || (type != IS_VARIANT)) @@ -244,7 +252,7 @@ int php_VARIANT_set_property_handler(zend_property_reference *property_reference overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data; do_VARIANT_propset(var_arg, &overloaded_property->element, value); - pval_destructor(&overloaded_property->element); + zval_dtor(&overloaded_property->element); return SUCCESS; } @@ -423,7 +431,7 @@ static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value) static void php_variant_destructor(zend_rsrc_list_entry *rsrc) { - efree(rsrc); + FREE_VARIANT(rsrc->ptr); } void php_register_VARIANT_class() diff --git a/ext/com/com.h b/ext/com/com.h index a4e0a604fd..700526c11f 100644 --- a/ext/com/com.h +++ b/ext/com/com.h @@ -20,30 +20,32 @@ typedef struct comval_ { } comval; #define ZVAL_COM(z,o) { \ - pval *handle; \ + zval *handle; \ \ + /* OBJECTS_FIXME */ \ Z_TYPE_P(z) = IS_OBJECT; \ - (z)->value.obj.ce = &com_class_entry; \ + Z_OBJCE_P(z) = &com_class_entry; \ \ - ALLOC_HASHTABLE((z)->value.obj.properties); \ - zend_hash_init((z)->value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0); \ + ALLOC_HASHTABLE(Z_OBJPROP_P(z)); \ + zend_hash_init(Z_OBJPROP_P(z), 0, NULL, ZVAL_PTR_DTOR, 0); \ \ ALLOC_ZVAL(handle); \ INIT_PZVAL(handle); \ ZVAL_LONG(handle, zend_list_insert((o), IS_COM)); \ \ - pval_copy_constructor(handle); \ - zend_hash_index_update((z)->value.obj.properties, 0, \ - &handle, sizeof(pval *), NULL); \ + zval_copy_ctor(handle); \ + zend_hash_index_update(Z_OBJPROP_P(z), 0, &handle, sizeof(zval *), NULL); \ } -#define RETVAL_COM(o) ZVAL_COM(&return_value, o) +#define RETVAL_COM(o) ZVAL_COM(&return_value, o); #define RETURN_COM(o) RETVAL_COM(o) \ return; #define ALLOC_COM(z) (z) = (comval *) emalloc(sizeof(comval)); \ C_REFCOUNT(z) = 0; +#define FREE_COM(z) efree(z); + #define IS_COM php_COM_get_le_comval() #define C_HASTLIB(x) ((x)->typelib) diff --git a/ext/com/conversion.c b/ext/com/conversion.c index 11fbd8a28f..31644e9a3c 100644 --- a/ext/com/conversion.c +++ b/ext/com/conversion.c @@ -62,11 +62,11 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage) break; case IS_OBJECT: - if(!strcmp(pval_arg->value.obj.ce->name, "VARIANT")) + if(!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) { - type = VT_VARIANT; + type = VT_VARIANT|VT_BYREF; } - else if(!strcmp(pval_arg->value.obj.ce->name, "COM")) + else if(!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) { type = VT_DISPATCH; } @@ -386,7 +386,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c pval **var_handle; /* fetch the VARIANT structure */ - zend_hash_index_find(pval_arg->value.obj.properties, 0, (void **) &var_handle); + zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &var_handle); V_VT(var_arg) = VT_VARIANT|VT_BYREF; V_VARIANTREF(var_arg) = (VARIANT FAR*) zend_list_find(Z_LVAL_P(*var_handle), &tp); @@ -895,7 +895,7 @@ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg) int type; /* fetch the comval structure */ - zend_hash_index_find(pval_arg->value.obj.properties, 0, (void **) &comval_handle); + zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &comval_handle); obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type); if(!obj || (type != IS_COM) || !C_ISREFD(obj)) { diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c index 7c2e761cc0..ab3ea4e8c3 100644 --- a/ext/rpc/com/com_wrapper.c +++ b/ext/rpc/com/com_wrapper.c @@ -378,8 +378,7 @@ static PHP_INI_MH(OnTypelibFileChange) char *typelib_name_buffer; char *strtok_buf = NULL; int interactive; - - CLS_FETCH(); + TSRMLS_FETCH(); interactive = CG(interactive); if(!new_value || (typelib_file = VCWD_FOPEN(new_value, "r"))==NULL) @@ -437,7 +436,7 @@ static PHP_INI_MH(OnTypelibFileChange) { printf("\rLoading %-60s\r", typelib_name); } - + if((pTL = php_COM_find_typelib(typelib_name, mode)) != NULL) { php_COM_load_typelib(pTL, mode); @@ -953,7 +952,6 @@ static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cle if(cleanup) { php_COM_destruct(array); - efree(array); } return retval; @@ -1113,7 +1111,7 @@ PHP_FUNCTION(com_propget) ALLOC_VARIANT(var_result); - if(do_COM_propget(var_result, obj, arg_property, 0)==FAILURE) + if(do_COM_propget(var_result, obj, arg_property, FALSE) == FAILURE) { FREE_VARIANT(var_result); RETURN_FALSE; @@ -1206,7 +1204,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer ZVAL_NULL(&return_value); /* fetch the IDispatch interface */ - zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle); + zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle); obj = (comval *) zend_list_find(Z_LVAL_P(*comval_handle), &type); if(!obj || (type != IS_COM)) { @@ -1225,7 +1223,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer if(do_COM_offget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return return_value; } @@ -1235,7 +1233,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer if(do_COM_propget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return return_value; } @@ -1243,15 +1241,18 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer case OE_IS_METHOD: { + FREE_VARIANT(var_result); if(obj != obj_prop) { - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return_value = *object; ZVAL_ADDREF(&return_value); } - FREE_VARIANT(var_result); - + else + { + RETVAL_COM(obj); + } return return_value; } break; @@ -1262,21 +1263,19 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer if(V_DISPATCH(var_result) == NULL) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return return_value; } obj = obj_prop; php_COM_set(obj, &V_DISPATCH(var_result), TRUE); - - RETVAL_COM(obj); } else { php_variant_to_pval(var_result, &return_value, FALSE, codepage); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); obj_prop = NULL; } @@ -1302,7 +1301,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere /* fetch the IDispatch interface */ - zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle); + zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle); obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type); if(!obj || (type != IS_COM)) { @@ -1321,7 +1320,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere if(do_COM_offget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return FAILURE; } @@ -1331,7 +1330,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere if(do_COM_propget(var_result, obj, &overloaded_property->element, FALSE) == FAILURE) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return FAILURE; } @@ -1348,7 +1347,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere if(V_DISPATCH(var_result) == NULL) { FREE_VARIANT(var_result); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); return FAILURE; } @@ -1358,7 +1357,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere } else { - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); FREE_VARIANT(var_result); return FAILURE; @@ -1371,7 +1370,7 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere overloaded_property = (zend_overloaded_element *) element->data; do_COM_propput(&result, obj, &overloaded_property->element, value); - php_COM_destruct(obj_prop); + FREE_COM(obj_prop); pval_destructor(&overloaded_property->element); @@ -1401,7 +1400,7 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro *object_handle = *return_value; pval_copy_constructor(object_handle); INIT_PZVAL(object_handle); - zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL); + zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL); pval_destructor(&function_name->element); return; @@ -1417,8 +1416,8 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro pval_destructor(&function_name->element); return; } - zend_hash_index_find(property.value.obj.properties, 0, (void **) &handle); - obj = (comval *)zend_list_find((*handle)->value.lval,&type); + zend_hash_index_find(Z_OBJPROP(property), 0, (void **) &handle); + obj = (comval *)zend_list_find(Z_LVAL_PP(handle), &type); if(!obj || (type != IS_COM)) { @@ -1450,8 +1449,6 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro if(do_COM_invoke(obj , &function_name->element, var_result, arguments, arg_count) == FAILURE) { - FREE_VARIANT(var_result); - RETVAL_FALSE; } else @@ -1660,7 +1657,7 @@ static int php_COM_load_typelib(ITypeLib *TypeLib, int mode) ITypeComp *TypeComp; int i; int interfaces; - ELS_FETCH(); + TSRMLS_FETCH(); if(NULL == TypeLib) { @@ -1729,7 +1726,7 @@ static int php_COM_load_typelib(ITypeLib *TypeLib, int mode) /* Before registering the contsnt, let's see if we can find it */ { - zend_register_constant(&c ELS_CC); + zend_register_constant(&c TSRMLS_CC); } j++; } @@ -1757,8 +1754,8 @@ PHP_FUNCTION(com_isenum) getParameters(ht, 1, &object); /* obtain IDispatch interface */ - zend_hash_index_find(object->value.obj.properties, 0, (void **) &comval_handle); - obj = (comval *) zend_list_find((*comval_handle)->value.lval, &type); + zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &comval_handle); + obj = (comval *) zend_list_find(Z_LVAL_PP(comval_handle), &type); if(!obj || (type != IS_COM)) { php_error(E_WARNING,"%s is not a COM object handler", ""); diff --git a/ext/rpc/com/com_wrapper.h b/ext/rpc/com/com_wrapper.h index a4e0a604fd..700526c11f 100644 --- a/ext/rpc/com/com_wrapper.h +++ b/ext/rpc/com/com_wrapper.h @@ -20,30 +20,32 @@ typedef struct comval_ { } comval; #define ZVAL_COM(z,o) { \ - pval *handle; \ + zval *handle; \ \ + /* OBJECTS_FIXME */ \ Z_TYPE_P(z) = IS_OBJECT; \ - (z)->value.obj.ce = &com_class_entry; \ + Z_OBJCE_P(z) = &com_class_entry; \ \ - ALLOC_HASHTABLE((z)->value.obj.properties); \ - zend_hash_init((z)->value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0); \ + ALLOC_HASHTABLE(Z_OBJPROP_P(z)); \ + zend_hash_init(Z_OBJPROP_P(z), 0, NULL, ZVAL_PTR_DTOR, 0); \ \ ALLOC_ZVAL(handle); \ INIT_PZVAL(handle); \ ZVAL_LONG(handle, zend_list_insert((o), IS_COM)); \ \ - pval_copy_constructor(handle); \ - zend_hash_index_update((z)->value.obj.properties, 0, \ - &handle, sizeof(pval *), NULL); \ + zval_copy_ctor(handle); \ + zend_hash_index_update(Z_OBJPROP_P(z), 0, &handle, sizeof(zval *), NULL); \ } -#define RETVAL_COM(o) ZVAL_COM(&return_value, o) +#define RETVAL_COM(o) ZVAL_COM(&return_value, o); #define RETURN_COM(o) RETVAL_COM(o) \ return; #define ALLOC_COM(z) (z) = (comval *) emalloc(sizeof(comval)); \ C_REFCOUNT(z) = 0; +#define FREE_COM(z) efree(z); + #define IS_COM php_COM_get_le_comval() #define C_HASTLIB(x) ((x)->typelib) diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c index 11fbd8a28f..31644e9a3c 100644 --- a/ext/rpc/com/conversion.c +++ b/ext/rpc/com/conversion.c @@ -62,11 +62,11 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage) break; case IS_OBJECT: - if(!strcmp(pval_arg->value.obj.ce->name, "VARIANT")) + if(!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) { - type = VT_VARIANT; + type = VT_VARIANT|VT_BYREF; } - else if(!strcmp(pval_arg->value.obj.ce->name, "COM")) + else if(!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) { type = VT_DISPATCH; } @@ -386,7 +386,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c pval **var_handle; /* fetch the VARIANT structure */ - zend_hash_index_find(pval_arg->value.obj.properties, 0, (void **) &var_handle); + zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &var_handle); V_VT(var_arg) = VT_VARIANT|VT_BYREF; V_VARIANTREF(var_arg) = (VARIANT FAR*) zend_list_find(Z_LVAL_P(*var_handle), &tp); @@ -895,7 +895,7 @@ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg) int type; /* fetch the comval structure */ - zend_hash_index_find(pval_arg->value.obj.properties, 0, (void **) &comval_handle); + zend_hash_index_find(Z_OBJPROP_P(pval_arg), 0, (void **) &comval_handle); obj = (comval *)zend_list_find(Z_LVAL_P(*comval_handle), &type); if(!obj || (type != IS_COM) || !C_ISREFD(obj)) { diff --git a/ext/rpc/com/variant.c b/ext/rpc/com/variant.c index 49a7335ca0..fc04752f6c 100644 --- a/ext/rpc/com/variant.c +++ b/ext/rpc/com/variant.c @@ -98,10 +98,18 @@ PHP_MINIT_FUNCTION(VARIANT) REGISTER_LONG_CONSTANT("CP_ACP", CP_ACP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_MACCP", CP_MACCP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_OEMCP", CP_OEMCP, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_UTF7", CP_UTF7, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("CP_UTF8", CP_UTF8, CONST_CS | CONST_PERSISTENT); +#ifdef CP_SYMBOL + REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT); +#else +# error "CP_SYMBOL undefined" +#endif +#ifdef CP_THREAD_ACP + REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT); +#else +# error "CP_THREAD_ACP undefined" +#endif php_register_VARIANT_class(); return SUCCESS; @@ -169,8 +177,8 @@ void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_proper *object_handle = *return_value; pval_copy_constructor(object_handle); INIT_PZVAL(object_handle); - zend_hash_index_update(object->value.obj.properties, 0, &object_handle, sizeof(pval *), NULL); - pval_destructor(&function_name->element); + zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL); + zval_dtor(&function_name->element); } } @@ -184,7 +192,7 @@ pval php_VARIANT_get_property_handler(zend_property_reference *property_referenc VARIANT *var_arg; /* fetch the VARIANT structure */ - zend_hash_index_find(object->value.obj.properties, 0, (void **) &var_handle); + zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle); var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type); if(!var_arg || (type != IS_VARIANT)) @@ -220,7 +228,7 @@ pval php_VARIANT_get_property_handler(zend_property_reference *property_referenc php_error(E_WARNING, "Unknown method."); break; - pval_destructor(&overloaded_property->element); + zval_dtor(&overloaded_property->element); } } @@ -236,7 +244,7 @@ int php_VARIANT_set_property_handler(zend_property_reference *property_reference VARIANT *var_arg; /* fetch the VARIANT structure */ - zend_hash_index_find(object->value.obj.properties, 0, (void **) &var_handle); + zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle); var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type); if(!var_arg || (type != IS_VARIANT)) @@ -244,7 +252,7 @@ int php_VARIANT_set_property_handler(zend_property_reference *property_reference overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data; do_VARIANT_propset(var_arg, &overloaded_property->element, value); - pval_destructor(&overloaded_property->element); + zval_dtor(&overloaded_property->element); return SUCCESS; } @@ -423,7 +431,7 @@ static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value) static void php_variant_destructor(zend_rsrc_list_entry *rsrc) { - efree(rsrc); + FREE_VARIANT(rsrc->ptr); } void php_register_VARIANT_class() |