From 1d6cbd1389d5138d690dca0963fb944162fe526e Mon Sep 17 00:00:00 2001 From: Harald Radi Date: Mon, 10 Sep 2001 10:41:01 +0000 Subject: MFH --- ext/com/VARIANT.c | 221 ++++++++++-------------------- ext/com/conversion.c | 348 +++++++++++++++++------------------------------ ext/com/conversion.h | 4 +- ext/com/variant.h | 19 ++- ext/rpc/com/conversion.c | 348 +++++++++++++++++------------------------------ ext/rpc/com/conversion.h | 4 +- ext/rpc/com/variant.c | 221 ++++++++++-------------------- ext/rpc/com/variant.h | 19 ++- 8 files changed, 424 insertions(+), 760 deletions(-) diff --git a/ext/com/VARIANT.c b/ext/com/VARIANT.c index b8f2590101..5fb5760925 100644 --- a/ext/com/VARIANT.c +++ b/ext/com/VARIANT.c @@ -44,10 +44,12 @@ static int le_variant; static int codepage; static zend_class_entry VARIANT_class_entry; + function_entry VARIANT_functions[] = { {NULL, NULL, NULL} }; + static PHP_MINFO_FUNCTION(VARIANT) { php_info_print_table_start(); @@ -55,10 +57,12 @@ static PHP_MINFO_FUNCTION(VARIANT) php_info_print_table_end(); } + zend_module_entry VARIANT_module_entry = { "variant", VARIANT_functions, PHP_MINIT(VARIANT), PHP_MSHUTDOWN(VARIANT), NULL, NULL, PHP_MINFO(VARIANT), STANDARD_MODULE_PROPERTIES }; + PHP_MINIT_FUNCTION(VARIANT) { le_variant = zend_register_list_destructors_ex(php_VARIANT_destructor, NULL, "VARIANT", module_number); @@ -109,60 +113,60 @@ PHP_MINIT_FUNCTION(VARIANT) return SUCCESS; } + PHP_MSHUTDOWN_FUNCTION(VARIANT) { return SUCCESS; } + PHPAPI int php_VARIANT_get_le_variant() { return le_variant; } + static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) { pval *object = property_reference->object; zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data; VARIANT *pVar; - if((zend_llist_count(property_reference->elements_list)==1) && !strcmp(Z_STRVAL(function_name->element), "variant")) - { + if ((zend_llist_count(property_reference->elements_list)==1) && !strcmp(Z_STRVAL(function_name->element), "variant")) { /* constructor */ pval *object_handle, *data, *type, *code_page; ALLOC_VARIANT(pVar); VariantInit(pVar); - switch(ZEND_NUM_ARGS()) - { + switch (ZEND_NUM_ARGS()) { case 0: /* nothing to do */ break; case 1: - getParameters(ht, 1, &data); + zend_get_parameters(ht, 1, &data); php_pval_to_variant(data, pVar, codepage TSRMLS_CC); codepage = CP_ACP; break; case 2: - getParameters(ht, 2, &data, &type); + zend_get_parameters(ht, 2, &data, &type); php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC); codepage = CP_ACP; break; case 3: - getParameters(ht, 3, &data, &type, &code_page); + zend_get_parameters(ht, 3, &data, &type, &code_page); php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC); convert_to_long(code_page); codepage = code_page->value.lval; break; default: - WRONG_PARAM_COUNT; + ZEND_WRONG_PARAM_COUNT(); break; } RETVAL_LONG(zend_list_insert(pVar, IS_VARIANT)); - if(!zend_is_true(return_value)) - { + if (!zend_is_true(return_value)) { ZVAL_FALSE(object); return; } @@ -176,43 +180,35 @@ static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend } } + static pval php_VARIANT_get_property_handler(zend_property_reference *property_reference) { zend_overloaded_element *overloaded_property; int type; - TSRMLS_FETCH(); - pval result, **var_handle, *object = property_reference->object; VARIANT *var_arg; + TSRMLS_FETCH(); + /* fetch the VARIANT structure */ 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)) - { + if (!var_arg || (type != IS_VARIANT)) { ZVAL_FALSE(&result); - } - else - { + } else { overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data; - switch(overloaded_property->type) - { + switch (overloaded_property->type) { case OE_IS_ARRAY: ZVAL_FALSE(&result); break; case OE_IS_OBJECT: - if(!strcmp(overloaded_property->element.value.str.val, "value")) - { - php_variant_to_pval(var_arg, &result, 0, codepage TSRMLS_CC); - } - else if(!strcmp(Z_STRVAL(overloaded_property->element), "type")) - { + if (!strcmp(overloaded_property->element.value.str.val, "value")) { + php_variant_to_pval(var_arg, &result, codepage TSRMLS_CC); + } else if (!strcmp(Z_STRVAL(overloaded_property->element), "type")) { ZVAL_LONG(&result, V_VT(var_arg)) - } - else - { + } else { ZVAL_FALSE(&result); php_error(E_WARNING, "Unknown member."); } @@ -229,21 +225,23 @@ static pval php_VARIANT_get_property_handler(zend_property_reference *property_r return result; } + static int php_VARIANT_set_property_handler(zend_property_reference *property_reference, pval *value) { zend_overloaded_element *overloaded_property; int type; - TSRMLS_FETCH(); - pval **var_handle, *object = property_reference->object; VARIANT *var_arg; + TSRMLS_FETCH(); + /* fetch the VARIANT structure */ 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)) + if (!var_arg || (type != IS_VARIANT)) { return FAILURE; + } overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data; do_VARIANT_propset(var_arg, &overloaded_property->element, value TSRMLS_CC); @@ -251,170 +249,92 @@ static int php_VARIANT_set_property_handler(zend_property_reference *property_re return SUCCESS; } + static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value TSRMLS_DC) { pval type; Z_TYPE(type) = IS_STRING; - if(!strcmp(Z_STRVAL_P(arg_property), "bVal")) - { + if (!strcmp(Z_STRVAL_P(arg_property), "bVal")) { Z_LVAL(type) = VT_UI1; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "iVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "iVal")) { Z_LVAL(type) = VT_I2; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "lVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "lVal")) { Z_LVAL(type) = VT_I4; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "fltVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "fltVal")) { Z_LVAL(type) = VT_R4; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "dblVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "dblVal")) { Z_LVAL(type) = VT_R8; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "boolVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "boolVal")) { Z_LVAL(type) = VT_BOOL; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "scode")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "scode")) { Z_LVAL(type) = VT_ERROR; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "cyVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "cyVal")) { Z_LVAL(type) = VT_CY; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "date")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "date")) { Z_LVAL(type) = VT_DATE; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "bstrVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "bstrVal")) { Z_LVAL(type) = VT_BSTR; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pdecVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pdecVal")) { Z_LVAL(type) = VT_DECIMAL|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "punkVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "punkVal")) { Z_LVAL(type) = VT_UNKNOWN; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pdispVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pdispVal")) { Z_LVAL(type) = VT_DISPATCH; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "parray")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "parray")) { Z_LVAL(type) = VT_ARRAY; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pbVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pbVal")) { Z_LVAL(type) = VT_UI1|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "piVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "piVal")) { Z_LVAL(type) = VT_I2|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "plVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "plVal")) { Z_LVAL(type) = VT_I4|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pfltVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pfltVal")) { Z_LVAL(type) = VT_R4|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pdblVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pdblVal")) { Z_LVAL(type) = VT_R8|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pboolVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pboolVal")) { Z_LVAL(type) = VT_BOOL|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pscode")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pscode")) { Z_LVAL(type) = VT_ERROR|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pcyVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pcyVal")) { Z_LVAL(type) = VT_CY|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pdate")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pdate")) { Z_LVAL(type) = VT_DATE|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pbstrVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pbstrVal")) { Z_LVAL(type) = VT_BSTR|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "ppunkVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "ppunkVal")) { Z_LVAL(type) = VT_UNKNOWN|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "ppdispVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "ppdispVal")) { Z_LVAL(type) = VT_DISPATCH|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pparray")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pparray")) { Z_LVAL(type) = VT_ARRAY|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pvarVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pvarVal")) { Z_LVAL(type) = VT_VARIANT|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "byref")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "byref")) { Z_LVAL(type) = VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "cVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "cVal")) { Z_LVAL(type) = VT_I1; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "uiVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "uiVal")) { Z_LVAL(type) = VT_UI2; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "ulVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "ulVal")) { Z_LVAL(type) = VT_UI4; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "intVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "intVal")) { Z_LVAL(type) = VT_INT; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "uintVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "uintVal")) { Z_LVAL(type) = VT_UINT|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pcVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pcVal")) { Z_LVAL(type) = VT_I1|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "puiVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "puiVal")) { Z_LVAL(type) = VT_UI2|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pulVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pulVal")) { Z_LVAL(type) = VT_UI4|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pintVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pintVal")) { Z_LVAL(type) = VT_INT|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "puintVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "puintVal")) { Z_LVAL(type) = VT_UINT|VT_BYREF; - } - else - { + } else { php_error(E_WARNING, "Unknown member."); return FAILURE; } @@ -424,6 +344,7 @@ static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value return SUCCESS; } + static void php_VARIANT_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { FREE_VARIANT(rsrc->ptr); diff --git a/ext/com/conversion.c b/ext/com/conversion.c index 21dace5c18..ff1fcb5daa 100644 --- a/ext/com/conversion.c +++ b/ext/com/conversion.c @@ -45,8 +45,7 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage T { int type = VT_EMPTY; /* default variant type */ - switch(Z_TYPE_P(pval_arg)) - { + switch (Z_TYPE_P(pval_arg)) { case IS_NULL: type = VT_NULL; break; @@ -56,12 +55,9 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage T break; case IS_OBJECT: - if(!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) - { + if (!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) { type = VT_VARIANT|VT_BYREF; - } - else if(!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) - { + } else if (!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) { type = VT_DISPATCH; } break; @@ -89,19 +85,20 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage T break; } - if(pval_arg->is_ref) /* deprecated, implemented for downwards compatiblity */ - { - type |= VT_BYREF; + if (pval_arg->is_ref) { /* deprecated, implemented for downwards compatiblity */ +// type |= VT_BYREF; } pval_to_variant_ex(pval_arg, var_arg, type, codepage TSRMLS_CC); } + PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_type, int codepage TSRMLS_DC) { pval_to_variant_ex(pval_arg, var_arg, Z_LVAL_P(pval_type), codepage TSRMLS_CC); } + static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int codepage TSRMLS_DC) { OLECHAR *unicode_str; @@ -109,8 +106,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c VariantInit(var_arg); V_VT(var_arg) = type; - if(V_VT(var_arg) & VT_ARRAY) - { + if (V_VT(var_arg) & VT_ARRAY) { /* For now we'll just handle single dimension arrays, we'll use the data type of the first element for the output data type */ HashTable *ht = Z_ARRVAL(*pval_arg); @@ -122,8 +118,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c type &= ~VT_ARRAY; - if(V_VT(var_arg) == (VT_ARRAY|VT_BYREF)) /* == is intended, because VT_*|VT_BYREF|VT_ARRAY means something diffrent */ - { + if (V_VT(var_arg) == (VT_ARRAY|VT_BYREF)) { /* == is intended, because VT_*|VT_BYREF|VT_ARRAY means something diffrent */ type &= ~VT_BYREF; ALLOC_VARIANT(V_VARIANTREF(var_arg)); var_arg = V_VARIANTREF(var_arg); /* put the array in that VARIANT */ @@ -133,55 +128,38 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c bounds[0].cElements = numberOfElements; safeArray = SafeArrayCreate(VT_VARIANT, 1, bounds); - if(NULL == safeArray) - { + if (NULL == safeArray) { php_error( E_WARNING,"Unable to convert php array to VARIANT array - %s", numberOfElements ? "" : "(Empty input array)"); ZVAL_FALSE(pval_arg); - } - else - { + } else { V_ARRAY(var_arg) = safeArray; V_VT(var_arg) = VT_ARRAY|VT_VARIANT; /* Now have a valid safe array allocated */ - if(SUCCEEDED(SafeArrayLock( safeArray))) - { + if (SUCCEEDED(SafeArrayLock(safeArray))) { ulong i; zend_hash_internal_pointer_reset(ht); - for( i = 0; i < (ulong)numberOfElements; ++i) - { - if((zend_hash_get_current_data(ht, (void **)&entry) == SUCCESS) && (entry != NULL)) /* Get a pointer to the php array element */ - { + for (i = 0; i < (ulong)numberOfElements; ++i) { + if ((zend_hash_get_current_data(ht, (void **)&entry) == SUCCESS) && (entry != NULL)) { /* Get a pointer to the php array element */ /* Add another value to the safe array */ - if(SUCCEEDED(SafeArrayPtrOfIndex( safeArray, &i, &v))) /* Pointer to output element entry retrieved successfully */ - { - if(type) /* explicit type */ - { + if (SUCCEEDED(SafeArrayPtrOfIndex( safeArray, &i, &v))) { /* Pointer to output element entry retrieved successfully */ + if (type) { /* explicit type */ pval_to_variant_ex(*entry, v, type, codepage TSRMLS_CC); /* Do the required conversion */ - } - else - { + } else { php_pval_to_variant(*entry, v, codepage TSRMLS_CC); /* Do the required conversion */ } - } - else - { + } else { php_error( E_WARNING,"phpArrayToSafeArray() - Unable to retrieve pointer to output element number (%d)", i); } } zend_hash_move_forward(ht); } SafeArrayUnlock( safeArray); - } - else - { + } else { php_error( E_WARNING,"phpArrayToSafeArray() - Unable to lock safeArray"); } } - } - else - { - switch(V_VT(var_arg)) - { + } else { + switch (V_VT(var_arg)) { case VT_UI1: convert_to_long_ex(&pval_arg); V_UI1(var_arg) = (unsigned char)Z_LVAL_P(pval_arg); @@ -222,8 +200,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c VarCyFromR8(Z_DVAL_P(pval_arg), &V_CY(var_arg)); break; - case VT_DATE: - { + case VT_DATE: { SYSTEMTIME wintime; struct tm *phptime; @@ -261,13 +238,10 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c break; case VT_UNKNOWN: - comval_to_variant(pval_arg, var_arg TSRMLS_CC); - if(V_VT(var_arg) != VT_DISPATCH) - { + comval_to_variant(pval_arg, var_arg TSRMLS_CC); + if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); - } - else - { + } else { V_VT(var_arg) = VT_UNKNOWN; V_UNKNOWN(var_arg) = (IUnknown *) V_DISPATCH(var_arg); } @@ -275,8 +249,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c case VT_DISPATCH: comval_to_variant(pval_arg, var_arg TSRMLS_CC); - if(V_VT(var_arg) != VT_DISPATCH) - { + if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); } break; @@ -321,8 +294,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c VarCyFromR8(pval_arg->value.dval, var_arg->pcyVal); break; - case VT_DATE|VT_BYREF: - { + case VT_DATE|VT_BYREF: { SYSTEMTIME wintime; struct tm *phptime; @@ -350,12 +322,9 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c case VT_UNKNOWN|VT_BYREF: comval_to_variant(pval_arg, var_arg TSRMLS_CC); - if(V_VT(var_arg) != VT_DISPATCH) - { + if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); - } - else - { + } else { V_VT(var_arg) = VT_UNKNOWN|VT_BYREF; V_UNKNOWNREF(var_arg) = (IUnknown **) &V_DISPATCH(var_arg); } @@ -363,12 +332,9 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c case VT_DISPATCH|VT_BYREF: comval_to_variant(pval_arg, var_arg TSRMLS_CC); - if(V_VT(var_arg) != VT_DISPATCH) - { + if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); - } - else - { + } else { V_VT(var_arg) = VT_DISPATCH|VT_BYREF; V_DISPATCHREF(var_arg) = &V_DISPATCH(var_arg); } @@ -377,8 +343,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c case VT_VARIANT: php_error(E_WARNING,"VT_VARIANT is invalid. Use VT_VARIANT|VT_BYREF instead."); /* break missing intentionally */ - case VT_VARIANT|VT_BYREF: - { + case VT_VARIANT|VT_BYREF: { int tp; pval **var_handle; @@ -388,16 +353,14 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c V_VT(var_arg) = VT_VARIANT|VT_BYREF; V_VARIANTREF(var_arg) = (VARIANT FAR*) zend_list_find(Z_LVAL_P(*var_handle), &tp); - if(!V_VARIANTREF(var_arg) && (tp != IS_VARIANT)) - { + if (!V_VARIANTREF(var_arg) && (tp != IS_VARIANT)) { VariantInit(var_arg); } } /* should be, but isn't :) - if(V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) - { + if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) { VariantInit(var_arg); } */ @@ -459,7 +422,8 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c } } -PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, int codepage TSRMLS_DC) + +PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TSRMLS_DC) { /* Changed the function to return a value for recursive error testing */ /* Existing calls will be unaffected by the change - so it */ @@ -469,8 +433,7 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, INIT_PZVAL(pval_arg); /* Add SafeArray support */ - if (V_ISARRAY(var_arg)) - { + if (V_ISARRAY(var_arg)) { SAFEARRAY *array = V_ARRAY(var_arg); LONG indices[1]; LONG lbound=0, ubound; @@ -483,18 +446,16 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, /* TODO: Add support for multi-dimensional SafeArrays */ /* For now just validate that the SafeArray has one dimension */ - if (1 != (Dims = SafeArrayGetDim(array))) - { + if (1 != (Dims = SafeArrayGetDim(array))) { php_error(E_WARNING,"Unsupported: multi-dimensional (%d) SafeArrays", Dims); ZVAL_NULL(pval_arg); return FAILURE; } - SafeArrayLock( array); + SafeArrayLock(array); /* This call has failed for everything I have tried */ /* But best leave it to be on the safe side */ - if (FAILED(SafeArrayGetVartype(array, &vartype))) - { + if (FAILED(SafeArrayGetVartype(array, &vartype))) { /* Fall back to what we do know */ /* Mask off the array bit and assume */ /* what is left is the type of the array */ @@ -509,24 +470,19 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, array_init(pval_arg); /* Walk the safe array */ - for (ii=lbound;ii<=ubound;ii++) - { + for (ii=lbound;ii<=ubound;ii++) { indices[0] = ii; VariantInit(&vv); /* Docs say this just set the vt field, but you never know */ /* Set up a variant to pass to a recursive call */ /* So that we do not need to have two copies */ /* of the code */ - if (VT_VARIANT == vartype) - { + if (VT_VARIANT == vartype) { hr = SafeArrayGetElement(array, indices, (VOID *) &(vv)); - } - else - { + } else { V_VT(&vv) = vartype; hr = SafeArrayGetElement(array, indices, (VOID *) &(vv.lVal)); } - if (FAILED(hr)) - { + if (FAILED(hr)) { /* Failure to retieve an element probably means the array is sparse */ /* So leave the php array sparse too */ continue; @@ -537,8 +493,7 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, /* If SafeArrayGetElement proclaims to allocate */ /* memory for a BSTR, so the recursive call frees */ /* the string correctly */ - if (FAILURE == php_variant_to_pval(&vv, element, persistent, codepage TSRMLS_CC)) - { + if (FAILURE == php_variant_to_pval(&vv, element, codepage TSRMLS_CC)) { /* Error occurred setting up array element */ /* Error was displayed by the recursive call */ FREE_ZVAL(element); @@ -550,84 +505,63 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, /* And if we don't go on - what to do about */ /* the parts of the array that are OK? */ /* break; */ - } - else - { + } else { /* Just insert the element into our return array */ add_index_zval(pval_arg, ii, element); } } SafeArrayUnlock(array); - } - else switch(var_arg->vt & ~VT_BYREF) - { + } else switch (var_arg->vt & ~VT_BYREF) { case VT_EMPTY: ZVAL_NULL(pval_arg); break; case VT_UI1: - if(V_ISBYREF(var_arg)) - { - ZVAL_LONG(pval_arg, (long)*V_UI4REF(var_arg)); - } - else - { - ZVAL_LONG(pval_arg, (long)V_UI4(var_arg)); + if (V_ISBYREF(var_arg)) { + ZVAL_LONG(pval_arg, (long)*V_UI1REF(var_arg)); + } else { + ZVAL_LONG(pval_arg, (long)V_UI1(var_arg)); } break; case VT_I2: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long )*V_I2REF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_I2(var_arg)); } break; case VT_I4: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, *V_I4REF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, V_I4(var_arg)); } break; case VT_R4: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_DOUBLE(pval_arg, (double)*V_R4REF(var_arg)); - } - else - { + } else { ZVAL_DOUBLE(pval_arg, (double)V_R4(var_arg)); } break; case VT_R8: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_DOUBLE(pval_arg, *V_R8REF(var_arg)); - } - else - { + } else { ZVAL_DOUBLE(pval_arg, V_R8(var_arg)); } break; /* 96bit uint */ - case VT_DECIMAL: - { + case VT_DECIMAL: { OLECHAR *unicode_str; - switch(VarBstrFromDec(&V_DECIMAL(var_arg), LOCALE_SYSTEM_DEFAULT, 0, &unicode_str)) - { + switch (VarBstrFromDec(&V_DECIMAL(var_arg), LOCALE_SYSTEM_DEFAULT, 0, &unicode_str)) { case S_OK: - Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(unicode_str, &Z_STRLEN_P(pval_arg), persistent, codepage TSRMLS_CC); + Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(unicode_str, &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); Z_TYPE_P(pval_arg) = IS_STRING; break; @@ -642,24 +576,18 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, /* Currency */ case VT_CY: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { VarR8FromCy(*V_CYREF(var_arg), &Z_DVAL_P(pval_arg)); - } - else - { + } else { VarR8FromCy(V_CY(var_arg), &Z_DVAL_P(pval_arg)); } Z_TYPE_P(pval_arg) = IS_DOUBLE; break; case VT_BOOL: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_BOOL(pval_arg, *V_BOOLREF(var_arg)); - } - else - { + } else { ZVAL_BOOL(pval_arg, V_BOOL(var_arg)); } break; @@ -670,64 +598,59 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, break; case VT_VARIANT: - php_variant_to_pval(V_VARIANTREF(var_arg), pval_arg, persistent, codepage TSRMLS_CC); + php_variant_to_pval(V_VARIANTREF(var_arg), pval_arg, codepage TSRMLS_CC); break; case VT_BSTR: - if(V_ISBYREF(var_arg)) - { - Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), persistent, codepage TSRMLS_CC); + if (V_ISBYREF(var_arg)) { + Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); efree(V_BSTRREF(var_arg)); - } - else - { - Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), persistent, codepage TSRMLS_CC); + } else { + Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); } Z_TYPE_P(pval_arg) = IS_STRING; break; - case VT_DATE: - { + case VT_DATE: { + BOOL success; SYSTEMTIME wintime; struct tm phptime; - if(V_ISBYREF(var_arg)) - { - VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime); - } - else - { - VariantTimeToSystemTime(V_DATE(var_arg), &wintime); + if (V_ISBYREF(var_arg)) { + success = VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime); + } else { + success = VariantTimeToSystemTime(V_DATE(var_arg), &wintime); } - memset(&phptime, 0, sizeof(phptime)); + if (success) { + memset(&phptime, 0, sizeof(phptime)); - phptime.tm_year = wintime.wYear - 1900; - phptime.tm_mon = wintime.wMonth - 1; - phptime.tm_mday = wintime.wDay; - phptime.tm_hour = wintime.wHour; - phptime.tm_min = wintime.wMinute; - phptime.tm_sec = wintime.wSecond; - phptime.tm_isdst = -1; + phptime.tm_year = wintime.wYear - 1900; + phptime.tm_mon = wintime.wMonth - 1; + phptime.tm_mday = wintime.wDay; + phptime.tm_hour = wintime.wHour; + phptime.tm_min = wintime.wMinute; + phptime.tm_sec = wintime.wSecond; + phptime.tm_isdst = -1; - tzset(); - ZVAL_LONG(pval_arg, mktime(&phptime)); + tzset(); + ZVAL_LONG(pval_arg, mktime(&phptime)); + } else { + ret = FAILURE; + } } break; case VT_UNKNOWN: - if(V_UNKNOWN(var_arg) == NULL) - { + if (V_UNKNOWN(var_arg) == NULL) { V_DISPATCH(var_arg) = NULL; - } - else - { + } else { HRESULT hr; hr = V_UNKNOWN(var_arg)->lpVtbl->QueryInterface(var_arg->punkVal, &IID_IDispatch, &V_DISPATCH(var_arg)); - if(FAILED(hr)) + if (FAILED(hr)) { char *error_message; @@ -739,17 +662,13 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, } } /* break missing intentionaly */ - case VT_DISPATCH: - { + case VT_DISPATCH: { comval *obj; - if(V_DISPATCH(var_arg) == NULL) - { + if (V_DISPATCH(var_arg) == NULL) { ret = FAILURE; ZVAL_NULL(pval_arg); - } - else - { + } else { ALLOC_COM(obj); php_COM_set(obj, &V_DISPATCH(var_arg), TRUE TSRMLS_CC); @@ -759,56 +678,41 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, break; case VT_I1: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_I1REF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_I1(var_arg)); } break; case VT_UI2: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_UI2REF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_UI2(var_arg)); } break; case VT_UI4: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_UI4REF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_UI4(var_arg)); } break; case VT_INT: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_INTREF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_INT(var_arg)); } break; case VT_UINT: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_UINTREF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_UINT(var_arg)); } break; @@ -822,6 +726,7 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, return ret; } + PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRMLS_DC) { OLECHAR *unicode_str; @@ -829,20 +734,16 @@ PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRML /* request needed buffersize */ uint reqSize = MultiByteToWideChar(codepage, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, C_str, -1, NULL, 0); - if(reqSize) - { + if (reqSize) { unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR) * reqSize); /* convert string */ MultiByteToWideChar(codepage, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, C_str, -1, unicode_str, reqSize); - } - else - { + } else { unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR)); *unicode_str = 0; - switch(GetLastError()) - { + switch (GetLastError()) { case ERROR_NO_UNICODE_TRANSLATION: php_error(E_WARNING,"No unicode translation available for the specified string"); break; @@ -854,7 +755,8 @@ PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRML return unicode_str; } -PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int persistent, int codepage TSRMLS_DC) + +PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int codepage TSRMLS_DC) { char *C_str; uint length = 0; @@ -862,29 +764,26 @@ PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int per /* request needed buffersize */ uint reqSize = WideCharToMultiByte(codepage, WC_COMPOSITECHECK, unicode_str, -1, NULL, 0, NULL, NULL); - if(reqSize) - { - C_str = (char *) pemalloc(sizeof(char) * reqSize, persistent); + if (reqSize) { + C_str = (char *) emalloc(sizeof(char) * reqSize); /* convert string */ length = WideCharToMultiByte(codepage, WC_COMPOSITECHECK, unicode_str, -1, C_str, reqSize, NULL, NULL) - 1; - } - else - { - C_str = (char *) pemalloc(sizeof(char), persistent); + } else { + C_str = (char *) emalloc(sizeof(char)); *C_str = 0; php_error(E_WARNING,"Error in php_OLECHAR_to_char()"); } - if(out_length) - { + if (out_length) { *out_length = length; } return C_str; } + static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC) { pval **comval_handle; @@ -894,15 +793,12 @@ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC) /* fetch the comval structure */ 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)) - { + if (!obj || (type != IS_COM) || !C_ISREFD(obj)) { VariantInit(var_arg); - } - else - { + } else { V_VT(var_arg) = VT_DISPATCH; V_DISPATCH(var_arg) = C_DISPATCH(obj); } } -#endif /* PHP_WIN32 */ \ No newline at end of file +#endif /* PHP_WIN32 */ diff --git a/ext/com/conversion.h b/ext/com/conversion.h index a55d66c57b..20c078be79 100644 --- a/ext/com/conversion.h +++ b/ext/com/conversion.h @@ -5,9 +5,9 @@ BEGIN_EXTERN_C() PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage TSRMLS_DC); PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_type, int codepage TSRMLS_DC); -PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, int codepage TSRMLS_DC); +PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TSRMLS_DC); PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRMLS_DC); -PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int persistent, int codepage TSRMLS_DC); +PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int codepage TSRMLS_DC); END_EXTERN_C() diff --git a/ext/com/variant.h b/ext/com/variant.h index ce5b4e66ae..3fd11f32e4 100644 --- a/ext/com/variant.h +++ b/ext/com/variant.h @@ -3,15 +3,30 @@ #if PHP_WIN32 -#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ +#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ VariantInit(v); -#define FREE_VARIANT(v) VariantClear(v); \ +#define FREE_VARIANT(v) VariantClear(v); \ efree(v); #define IS_VARIANT php_VARIANT_get_le_variant() +#define ZVAL_VARIANT(z, v) if (V_VT(v) == VT_DISPATCH) { \ + comval *obj; \ + ALLOC_COM(obj); \ + php_COM_set(obj, &V_DISPATCH(v), TRUE TSRMLS_CC); \ + ZVAL_LONG((z), zend_list_insert(obj, IS_COM)); \ + } else { \ + php_variant_to_pval((v), (z), codepage TSRMLS_CC); \ + FREE_VARIANT(v); \ + } + +#define RETVAL_VARIANT(v) ZVAL_VARIANT(return_value, (v)); +#define RETURN_VARIANT(v) RETVAL_VARIANT(v) \ + return; + + #endif /* PHP_WIN32 */ #endif /* VARIANT_H */ diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c index 21dace5c18..ff1fcb5daa 100644 --- a/ext/rpc/com/conversion.c +++ b/ext/rpc/com/conversion.c @@ -45,8 +45,7 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage T { int type = VT_EMPTY; /* default variant type */ - switch(Z_TYPE_P(pval_arg)) - { + switch (Z_TYPE_P(pval_arg)) { case IS_NULL: type = VT_NULL; break; @@ -56,12 +55,9 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage T break; case IS_OBJECT: - if(!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) - { + if (!strcmp(Z_OBJCE_P(pval_arg)->name, "VARIANT")) { type = VT_VARIANT|VT_BYREF; - } - else if(!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) - { + } else if (!strcmp(Z_OBJCE_P(pval_arg)->name, "COM")) { type = VT_DISPATCH; } break; @@ -89,19 +85,20 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage T break; } - if(pval_arg->is_ref) /* deprecated, implemented for downwards compatiblity */ - { - type |= VT_BYREF; + if (pval_arg->is_ref) { /* deprecated, implemented for downwards compatiblity */ +// type |= VT_BYREF; } pval_to_variant_ex(pval_arg, var_arg, type, codepage TSRMLS_CC); } + PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_type, int codepage TSRMLS_DC) { pval_to_variant_ex(pval_arg, var_arg, Z_LVAL_P(pval_type), codepage TSRMLS_CC); } + static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int codepage TSRMLS_DC) { OLECHAR *unicode_str; @@ -109,8 +106,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c VariantInit(var_arg); V_VT(var_arg) = type; - if(V_VT(var_arg) & VT_ARRAY) - { + if (V_VT(var_arg) & VT_ARRAY) { /* For now we'll just handle single dimension arrays, we'll use the data type of the first element for the output data type */ HashTable *ht = Z_ARRVAL(*pval_arg); @@ -122,8 +118,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c type &= ~VT_ARRAY; - if(V_VT(var_arg) == (VT_ARRAY|VT_BYREF)) /* == is intended, because VT_*|VT_BYREF|VT_ARRAY means something diffrent */ - { + if (V_VT(var_arg) == (VT_ARRAY|VT_BYREF)) { /* == is intended, because VT_*|VT_BYREF|VT_ARRAY means something diffrent */ type &= ~VT_BYREF; ALLOC_VARIANT(V_VARIANTREF(var_arg)); var_arg = V_VARIANTREF(var_arg); /* put the array in that VARIANT */ @@ -133,55 +128,38 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c bounds[0].cElements = numberOfElements; safeArray = SafeArrayCreate(VT_VARIANT, 1, bounds); - if(NULL == safeArray) - { + if (NULL == safeArray) { php_error( E_WARNING,"Unable to convert php array to VARIANT array - %s", numberOfElements ? "" : "(Empty input array)"); ZVAL_FALSE(pval_arg); - } - else - { + } else { V_ARRAY(var_arg) = safeArray; V_VT(var_arg) = VT_ARRAY|VT_VARIANT; /* Now have a valid safe array allocated */ - if(SUCCEEDED(SafeArrayLock( safeArray))) - { + if (SUCCEEDED(SafeArrayLock(safeArray))) { ulong i; zend_hash_internal_pointer_reset(ht); - for( i = 0; i < (ulong)numberOfElements; ++i) - { - if((zend_hash_get_current_data(ht, (void **)&entry) == SUCCESS) && (entry != NULL)) /* Get a pointer to the php array element */ - { + for (i = 0; i < (ulong)numberOfElements; ++i) { + if ((zend_hash_get_current_data(ht, (void **)&entry) == SUCCESS) && (entry != NULL)) { /* Get a pointer to the php array element */ /* Add another value to the safe array */ - if(SUCCEEDED(SafeArrayPtrOfIndex( safeArray, &i, &v))) /* Pointer to output element entry retrieved successfully */ - { - if(type) /* explicit type */ - { + if (SUCCEEDED(SafeArrayPtrOfIndex( safeArray, &i, &v))) { /* Pointer to output element entry retrieved successfully */ + if (type) { /* explicit type */ pval_to_variant_ex(*entry, v, type, codepage TSRMLS_CC); /* Do the required conversion */ - } - else - { + } else { php_pval_to_variant(*entry, v, codepage TSRMLS_CC); /* Do the required conversion */ } - } - else - { + } else { php_error( E_WARNING,"phpArrayToSafeArray() - Unable to retrieve pointer to output element number (%d)", i); } } zend_hash_move_forward(ht); } SafeArrayUnlock( safeArray); - } - else - { + } else { php_error( E_WARNING,"phpArrayToSafeArray() - Unable to lock safeArray"); } } - } - else - { - switch(V_VT(var_arg)) - { + } else { + switch (V_VT(var_arg)) { case VT_UI1: convert_to_long_ex(&pval_arg); V_UI1(var_arg) = (unsigned char)Z_LVAL_P(pval_arg); @@ -222,8 +200,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c VarCyFromR8(Z_DVAL_P(pval_arg), &V_CY(var_arg)); break; - case VT_DATE: - { + case VT_DATE: { SYSTEMTIME wintime; struct tm *phptime; @@ -261,13 +238,10 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c break; case VT_UNKNOWN: - comval_to_variant(pval_arg, var_arg TSRMLS_CC); - if(V_VT(var_arg) != VT_DISPATCH) - { + comval_to_variant(pval_arg, var_arg TSRMLS_CC); + if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); - } - else - { + } else { V_VT(var_arg) = VT_UNKNOWN; V_UNKNOWN(var_arg) = (IUnknown *) V_DISPATCH(var_arg); } @@ -275,8 +249,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c case VT_DISPATCH: comval_to_variant(pval_arg, var_arg TSRMLS_CC); - if(V_VT(var_arg) != VT_DISPATCH) - { + if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); } break; @@ -321,8 +294,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c VarCyFromR8(pval_arg->value.dval, var_arg->pcyVal); break; - case VT_DATE|VT_BYREF: - { + case VT_DATE|VT_BYREF: { SYSTEMTIME wintime; struct tm *phptime; @@ -350,12 +322,9 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c case VT_UNKNOWN|VT_BYREF: comval_to_variant(pval_arg, var_arg TSRMLS_CC); - if(V_VT(var_arg) != VT_DISPATCH) - { + if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); - } - else - { + } else { V_VT(var_arg) = VT_UNKNOWN|VT_BYREF; V_UNKNOWNREF(var_arg) = (IUnknown **) &V_DISPATCH(var_arg); } @@ -363,12 +332,9 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c case VT_DISPATCH|VT_BYREF: comval_to_variant(pval_arg, var_arg TSRMLS_CC); - if(V_VT(var_arg) != VT_DISPATCH) - { + if (V_VT(var_arg) != VT_DISPATCH) { VariantInit(var_arg); - } - else - { + } else { V_VT(var_arg) = VT_DISPATCH|VT_BYREF; V_DISPATCHREF(var_arg) = &V_DISPATCH(var_arg); } @@ -377,8 +343,7 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c case VT_VARIANT: php_error(E_WARNING,"VT_VARIANT is invalid. Use VT_VARIANT|VT_BYREF instead."); /* break missing intentionally */ - case VT_VARIANT|VT_BYREF: - { + case VT_VARIANT|VT_BYREF: { int tp; pval **var_handle; @@ -388,16 +353,14 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c V_VT(var_arg) = VT_VARIANT|VT_BYREF; V_VARIANTREF(var_arg) = (VARIANT FAR*) zend_list_find(Z_LVAL_P(*var_handle), &tp); - if(!V_VARIANTREF(var_arg) && (tp != IS_VARIANT)) - { + if (!V_VARIANTREF(var_arg) && (tp != IS_VARIANT)) { VariantInit(var_arg); } } /* should be, but isn't :) - if(V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) - { + if (V_VT(var_arg) != (VT_VARIANT|VT_BYREF)) { VariantInit(var_arg); } */ @@ -459,7 +422,8 @@ static void pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, int type, int c } } -PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, int codepage TSRMLS_DC) + +PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TSRMLS_DC) { /* Changed the function to return a value for recursive error testing */ /* Existing calls will be unaffected by the change - so it */ @@ -469,8 +433,7 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, INIT_PZVAL(pval_arg); /* Add SafeArray support */ - if (V_ISARRAY(var_arg)) - { + if (V_ISARRAY(var_arg)) { SAFEARRAY *array = V_ARRAY(var_arg); LONG indices[1]; LONG lbound=0, ubound; @@ -483,18 +446,16 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, /* TODO: Add support for multi-dimensional SafeArrays */ /* For now just validate that the SafeArray has one dimension */ - if (1 != (Dims = SafeArrayGetDim(array))) - { + if (1 != (Dims = SafeArrayGetDim(array))) { php_error(E_WARNING,"Unsupported: multi-dimensional (%d) SafeArrays", Dims); ZVAL_NULL(pval_arg); return FAILURE; } - SafeArrayLock( array); + SafeArrayLock(array); /* This call has failed for everything I have tried */ /* But best leave it to be on the safe side */ - if (FAILED(SafeArrayGetVartype(array, &vartype))) - { + if (FAILED(SafeArrayGetVartype(array, &vartype))) { /* Fall back to what we do know */ /* Mask off the array bit and assume */ /* what is left is the type of the array */ @@ -509,24 +470,19 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, array_init(pval_arg); /* Walk the safe array */ - for (ii=lbound;ii<=ubound;ii++) - { + for (ii=lbound;ii<=ubound;ii++) { indices[0] = ii; VariantInit(&vv); /* Docs say this just set the vt field, but you never know */ /* Set up a variant to pass to a recursive call */ /* So that we do not need to have two copies */ /* of the code */ - if (VT_VARIANT == vartype) - { + if (VT_VARIANT == vartype) { hr = SafeArrayGetElement(array, indices, (VOID *) &(vv)); - } - else - { + } else { V_VT(&vv) = vartype; hr = SafeArrayGetElement(array, indices, (VOID *) &(vv.lVal)); } - if (FAILED(hr)) - { + if (FAILED(hr)) { /* Failure to retieve an element probably means the array is sparse */ /* So leave the php array sparse too */ continue; @@ -537,8 +493,7 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, /* If SafeArrayGetElement proclaims to allocate */ /* memory for a BSTR, so the recursive call frees */ /* the string correctly */ - if (FAILURE == php_variant_to_pval(&vv, element, persistent, codepage TSRMLS_CC)) - { + if (FAILURE == php_variant_to_pval(&vv, element, codepage TSRMLS_CC)) { /* Error occurred setting up array element */ /* Error was displayed by the recursive call */ FREE_ZVAL(element); @@ -550,84 +505,63 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, /* And if we don't go on - what to do about */ /* the parts of the array that are OK? */ /* break; */ - } - else - { + } else { /* Just insert the element into our return array */ add_index_zval(pval_arg, ii, element); } } SafeArrayUnlock(array); - } - else switch(var_arg->vt & ~VT_BYREF) - { + } else switch (var_arg->vt & ~VT_BYREF) { case VT_EMPTY: ZVAL_NULL(pval_arg); break; case VT_UI1: - if(V_ISBYREF(var_arg)) - { - ZVAL_LONG(pval_arg, (long)*V_UI4REF(var_arg)); - } - else - { - ZVAL_LONG(pval_arg, (long)V_UI4(var_arg)); + if (V_ISBYREF(var_arg)) { + ZVAL_LONG(pval_arg, (long)*V_UI1REF(var_arg)); + } else { + ZVAL_LONG(pval_arg, (long)V_UI1(var_arg)); } break; case VT_I2: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long )*V_I2REF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_I2(var_arg)); } break; case VT_I4: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, *V_I4REF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, V_I4(var_arg)); } break; case VT_R4: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_DOUBLE(pval_arg, (double)*V_R4REF(var_arg)); - } - else - { + } else { ZVAL_DOUBLE(pval_arg, (double)V_R4(var_arg)); } break; case VT_R8: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_DOUBLE(pval_arg, *V_R8REF(var_arg)); - } - else - { + } else { ZVAL_DOUBLE(pval_arg, V_R8(var_arg)); } break; /* 96bit uint */ - case VT_DECIMAL: - { + case VT_DECIMAL: { OLECHAR *unicode_str; - switch(VarBstrFromDec(&V_DECIMAL(var_arg), LOCALE_SYSTEM_DEFAULT, 0, &unicode_str)) - { + switch (VarBstrFromDec(&V_DECIMAL(var_arg), LOCALE_SYSTEM_DEFAULT, 0, &unicode_str)) { case S_OK: - Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(unicode_str, &Z_STRLEN_P(pval_arg), persistent, codepage TSRMLS_CC); + Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(unicode_str, &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); Z_TYPE_P(pval_arg) = IS_STRING; break; @@ -642,24 +576,18 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, /* Currency */ case VT_CY: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { VarR8FromCy(*V_CYREF(var_arg), &Z_DVAL_P(pval_arg)); - } - else - { + } else { VarR8FromCy(V_CY(var_arg), &Z_DVAL_P(pval_arg)); } Z_TYPE_P(pval_arg) = IS_DOUBLE; break; case VT_BOOL: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_BOOL(pval_arg, *V_BOOLREF(var_arg)); - } - else - { + } else { ZVAL_BOOL(pval_arg, V_BOOL(var_arg)); } break; @@ -670,64 +598,59 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, break; case VT_VARIANT: - php_variant_to_pval(V_VARIANTREF(var_arg), pval_arg, persistent, codepage TSRMLS_CC); + php_variant_to_pval(V_VARIANTREF(var_arg), pval_arg, codepage TSRMLS_CC); break; case VT_BSTR: - if(V_ISBYREF(var_arg)) - { - Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), persistent, codepage TSRMLS_CC); + if (V_ISBYREF(var_arg)) { + Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(*V_BSTRREF(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); efree(V_BSTRREF(var_arg)); - } - else - { - Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), persistent, codepage TSRMLS_CC); + } else { + Z_STRVAL_P(pval_arg) = php_OLECHAR_to_char(V_BSTR(var_arg), &Z_STRLEN_P(pval_arg), codepage TSRMLS_CC); } Z_TYPE_P(pval_arg) = IS_STRING; break; - case VT_DATE: - { + case VT_DATE: { + BOOL success; SYSTEMTIME wintime; struct tm phptime; - if(V_ISBYREF(var_arg)) - { - VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime); - } - else - { - VariantTimeToSystemTime(V_DATE(var_arg), &wintime); + if (V_ISBYREF(var_arg)) { + success = VariantTimeToSystemTime(*V_DATEREF(var_arg), &wintime); + } else { + success = VariantTimeToSystemTime(V_DATE(var_arg), &wintime); } - memset(&phptime, 0, sizeof(phptime)); + if (success) { + memset(&phptime, 0, sizeof(phptime)); - phptime.tm_year = wintime.wYear - 1900; - phptime.tm_mon = wintime.wMonth - 1; - phptime.tm_mday = wintime.wDay; - phptime.tm_hour = wintime.wHour; - phptime.tm_min = wintime.wMinute; - phptime.tm_sec = wintime.wSecond; - phptime.tm_isdst = -1; + phptime.tm_year = wintime.wYear - 1900; + phptime.tm_mon = wintime.wMonth - 1; + phptime.tm_mday = wintime.wDay; + phptime.tm_hour = wintime.wHour; + phptime.tm_min = wintime.wMinute; + phptime.tm_sec = wintime.wSecond; + phptime.tm_isdst = -1; - tzset(); - ZVAL_LONG(pval_arg, mktime(&phptime)); + tzset(); + ZVAL_LONG(pval_arg, mktime(&phptime)); + } else { + ret = FAILURE; + } } break; case VT_UNKNOWN: - if(V_UNKNOWN(var_arg) == NULL) - { + if (V_UNKNOWN(var_arg) == NULL) { V_DISPATCH(var_arg) = NULL; - } - else - { + } else { HRESULT hr; hr = V_UNKNOWN(var_arg)->lpVtbl->QueryInterface(var_arg->punkVal, &IID_IDispatch, &V_DISPATCH(var_arg)); - if(FAILED(hr)) + if (FAILED(hr)) { char *error_message; @@ -739,17 +662,13 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, } } /* break missing intentionaly */ - case VT_DISPATCH: - { + case VT_DISPATCH: { comval *obj; - if(V_DISPATCH(var_arg) == NULL) - { + if (V_DISPATCH(var_arg) == NULL) { ret = FAILURE; ZVAL_NULL(pval_arg); - } - else - { + } else { ALLOC_COM(obj); php_COM_set(obj, &V_DISPATCH(var_arg), TRUE TSRMLS_CC); @@ -759,56 +678,41 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, break; case VT_I1: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_I1REF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_I1(var_arg)); } break; case VT_UI2: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_UI2REF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_UI2(var_arg)); } break; case VT_UI4: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_UI4REF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_UI4(var_arg)); } break; case VT_INT: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_INTREF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_INT(var_arg)); } break; case VT_UINT: - if(V_ISBYREF(var_arg)) - { + if (V_ISBYREF(var_arg)) { ZVAL_LONG(pval_arg, (long)*V_UINTREF(var_arg)); - } - else - { + } else { ZVAL_LONG(pval_arg, (long)V_UINT(var_arg)); } break; @@ -822,6 +726,7 @@ PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, return ret; } + PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRMLS_DC) { OLECHAR *unicode_str; @@ -829,20 +734,16 @@ PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRML /* request needed buffersize */ uint reqSize = MultiByteToWideChar(codepage, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, C_str, -1, NULL, 0); - if(reqSize) - { + if (reqSize) { unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR) * reqSize); /* convert string */ MultiByteToWideChar(codepage, MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, C_str, -1, unicode_str, reqSize); - } - else - { + } else { unicode_str = (OLECHAR *) emalloc(sizeof(OLECHAR)); *unicode_str = 0; - switch(GetLastError()) - { + switch (GetLastError()) { case ERROR_NO_UNICODE_TRANSLATION: php_error(E_WARNING,"No unicode translation available for the specified string"); break; @@ -854,7 +755,8 @@ PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRML return unicode_str; } -PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int persistent, int codepage TSRMLS_DC) + +PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int codepage TSRMLS_DC) { char *C_str; uint length = 0; @@ -862,29 +764,26 @@ PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int per /* request needed buffersize */ uint reqSize = WideCharToMultiByte(codepage, WC_COMPOSITECHECK, unicode_str, -1, NULL, 0, NULL, NULL); - if(reqSize) - { - C_str = (char *) pemalloc(sizeof(char) * reqSize, persistent); + if (reqSize) { + C_str = (char *) emalloc(sizeof(char) * reqSize); /* convert string */ length = WideCharToMultiByte(codepage, WC_COMPOSITECHECK, unicode_str, -1, C_str, reqSize, NULL, NULL) - 1; - } - else - { - C_str = (char *) pemalloc(sizeof(char), persistent); + } else { + C_str = (char *) emalloc(sizeof(char)); *C_str = 0; php_error(E_WARNING,"Error in php_OLECHAR_to_char()"); } - if(out_length) - { + if (out_length) { *out_length = length; } return C_str; } + static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC) { pval **comval_handle; @@ -894,15 +793,12 @@ static void comval_to_variant(pval *pval_arg, VARIANT *var_arg TSRMLS_DC) /* fetch the comval structure */ 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)) - { + if (!obj || (type != IS_COM) || !C_ISREFD(obj)) { VariantInit(var_arg); - } - else - { + } else { V_VT(var_arg) = VT_DISPATCH; V_DISPATCH(var_arg) = C_DISPATCH(obj); } } -#endif /* PHP_WIN32 */ \ No newline at end of file +#endif /* PHP_WIN32 */ diff --git a/ext/rpc/com/conversion.h b/ext/rpc/com/conversion.h index a55d66c57b..20c078be79 100644 --- a/ext/rpc/com/conversion.h +++ b/ext/rpc/com/conversion.h @@ -5,9 +5,9 @@ BEGIN_EXTERN_C() PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage TSRMLS_DC); PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_type, int codepage TSRMLS_DC); -PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent, int codepage TSRMLS_DC); +PHPAPI int php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int codepage TSRMLS_DC); PHPAPI OLECHAR *php_char_to_OLECHAR(char *C_str, uint strlen, int codepage TSRMLS_DC); -PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int persistent, int codepage TSRMLS_DC); +PHPAPI char *php_OLECHAR_to_char(OLECHAR *unicode_str, uint *out_length, int codepage TSRMLS_DC); END_EXTERN_C() diff --git a/ext/rpc/com/variant.c b/ext/rpc/com/variant.c index b8f2590101..5fb5760925 100644 --- a/ext/rpc/com/variant.c +++ b/ext/rpc/com/variant.c @@ -44,10 +44,12 @@ static int le_variant; static int codepage; static zend_class_entry VARIANT_class_entry; + function_entry VARIANT_functions[] = { {NULL, NULL, NULL} }; + static PHP_MINFO_FUNCTION(VARIANT) { php_info_print_table_start(); @@ -55,10 +57,12 @@ static PHP_MINFO_FUNCTION(VARIANT) php_info_print_table_end(); } + zend_module_entry VARIANT_module_entry = { "variant", VARIANT_functions, PHP_MINIT(VARIANT), PHP_MSHUTDOWN(VARIANT), NULL, NULL, PHP_MINFO(VARIANT), STANDARD_MODULE_PROPERTIES }; + PHP_MINIT_FUNCTION(VARIANT) { le_variant = zend_register_list_destructors_ex(php_VARIANT_destructor, NULL, "VARIANT", module_number); @@ -109,60 +113,60 @@ PHP_MINIT_FUNCTION(VARIANT) return SUCCESS; } + PHP_MSHUTDOWN_FUNCTION(VARIANT) { return SUCCESS; } + PHPAPI int php_VARIANT_get_le_variant() { return le_variant; } + static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) { pval *object = property_reference->object; zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data; VARIANT *pVar; - if((zend_llist_count(property_reference->elements_list)==1) && !strcmp(Z_STRVAL(function_name->element), "variant")) - { + if ((zend_llist_count(property_reference->elements_list)==1) && !strcmp(Z_STRVAL(function_name->element), "variant")) { /* constructor */ pval *object_handle, *data, *type, *code_page; ALLOC_VARIANT(pVar); VariantInit(pVar); - switch(ZEND_NUM_ARGS()) - { + switch (ZEND_NUM_ARGS()) { case 0: /* nothing to do */ break; case 1: - getParameters(ht, 1, &data); + zend_get_parameters(ht, 1, &data); php_pval_to_variant(data, pVar, codepage TSRMLS_CC); codepage = CP_ACP; break; case 2: - getParameters(ht, 2, &data, &type); + zend_get_parameters(ht, 2, &data, &type); php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC); codepage = CP_ACP; break; case 3: - getParameters(ht, 3, &data, &type, &code_page); + zend_get_parameters(ht, 3, &data, &type, &code_page); php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC); convert_to_long(code_page); codepage = code_page->value.lval; break; default: - WRONG_PARAM_COUNT; + ZEND_WRONG_PARAM_COUNT(); break; } RETVAL_LONG(zend_list_insert(pVar, IS_VARIANT)); - if(!zend_is_true(return_value)) - { + if (!zend_is_true(return_value)) { ZVAL_FALSE(object); return; } @@ -176,43 +180,35 @@ static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend } } + static pval php_VARIANT_get_property_handler(zend_property_reference *property_reference) { zend_overloaded_element *overloaded_property; int type; - TSRMLS_FETCH(); - pval result, **var_handle, *object = property_reference->object; VARIANT *var_arg; + TSRMLS_FETCH(); + /* fetch the VARIANT structure */ 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)) - { + if (!var_arg || (type != IS_VARIANT)) { ZVAL_FALSE(&result); - } - else - { + } else { overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data; - switch(overloaded_property->type) - { + switch (overloaded_property->type) { case OE_IS_ARRAY: ZVAL_FALSE(&result); break; case OE_IS_OBJECT: - if(!strcmp(overloaded_property->element.value.str.val, "value")) - { - php_variant_to_pval(var_arg, &result, 0, codepage TSRMLS_CC); - } - else if(!strcmp(Z_STRVAL(overloaded_property->element), "type")) - { + if (!strcmp(overloaded_property->element.value.str.val, "value")) { + php_variant_to_pval(var_arg, &result, codepage TSRMLS_CC); + } else if (!strcmp(Z_STRVAL(overloaded_property->element), "type")) { ZVAL_LONG(&result, V_VT(var_arg)) - } - else - { + } else { ZVAL_FALSE(&result); php_error(E_WARNING, "Unknown member."); } @@ -229,21 +225,23 @@ static pval php_VARIANT_get_property_handler(zend_property_reference *property_r return result; } + static int php_VARIANT_set_property_handler(zend_property_reference *property_reference, pval *value) { zend_overloaded_element *overloaded_property; int type; - TSRMLS_FETCH(); - pval **var_handle, *object = property_reference->object; VARIANT *var_arg; + TSRMLS_FETCH(); + /* fetch the VARIANT structure */ 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)) + if (!var_arg || (type != IS_VARIANT)) { return FAILURE; + } overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data; do_VARIANT_propset(var_arg, &overloaded_property->element, value TSRMLS_CC); @@ -251,170 +249,92 @@ static int php_VARIANT_set_property_handler(zend_property_reference *property_re return SUCCESS; } + static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value TSRMLS_DC) { pval type; Z_TYPE(type) = IS_STRING; - if(!strcmp(Z_STRVAL_P(arg_property), "bVal")) - { + if (!strcmp(Z_STRVAL_P(arg_property), "bVal")) { Z_LVAL(type) = VT_UI1; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "iVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "iVal")) { Z_LVAL(type) = VT_I2; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "lVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "lVal")) { Z_LVAL(type) = VT_I4; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "fltVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "fltVal")) { Z_LVAL(type) = VT_R4; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "dblVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "dblVal")) { Z_LVAL(type) = VT_R8; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "boolVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "boolVal")) { Z_LVAL(type) = VT_BOOL; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "scode")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "scode")) { Z_LVAL(type) = VT_ERROR; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "cyVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "cyVal")) { Z_LVAL(type) = VT_CY; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "date")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "date")) { Z_LVAL(type) = VT_DATE; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "bstrVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "bstrVal")) { Z_LVAL(type) = VT_BSTR; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pdecVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pdecVal")) { Z_LVAL(type) = VT_DECIMAL|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "punkVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "punkVal")) { Z_LVAL(type) = VT_UNKNOWN; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pdispVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pdispVal")) { Z_LVAL(type) = VT_DISPATCH; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "parray")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "parray")) { Z_LVAL(type) = VT_ARRAY; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pbVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pbVal")) { Z_LVAL(type) = VT_UI1|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "piVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "piVal")) { Z_LVAL(type) = VT_I2|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "plVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "plVal")) { Z_LVAL(type) = VT_I4|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pfltVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pfltVal")) { Z_LVAL(type) = VT_R4|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pdblVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pdblVal")) { Z_LVAL(type) = VT_R8|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pboolVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pboolVal")) { Z_LVAL(type) = VT_BOOL|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pscode")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pscode")) { Z_LVAL(type) = VT_ERROR|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pcyVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pcyVal")) { Z_LVAL(type) = VT_CY|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pdate")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pdate")) { Z_LVAL(type) = VT_DATE|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pbstrVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pbstrVal")) { Z_LVAL(type) = VT_BSTR|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "ppunkVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "ppunkVal")) { Z_LVAL(type) = VT_UNKNOWN|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "ppdispVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "ppdispVal")) { Z_LVAL(type) = VT_DISPATCH|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pparray")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pparray")) { Z_LVAL(type) = VT_ARRAY|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pvarVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pvarVal")) { Z_LVAL(type) = VT_VARIANT|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "byref")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "byref")) { Z_LVAL(type) = VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "cVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "cVal")) { Z_LVAL(type) = VT_I1; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "uiVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "uiVal")) { Z_LVAL(type) = VT_UI2; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "ulVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "ulVal")) { Z_LVAL(type) = VT_UI4; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "intVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "intVal")) { Z_LVAL(type) = VT_INT; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "uintVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "uintVal")) { Z_LVAL(type) = VT_UINT|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pcVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pcVal")) { Z_LVAL(type) = VT_I1|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "puiVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "puiVal")) { Z_LVAL(type) = VT_UI2|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pulVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pulVal")) { Z_LVAL(type) = VT_UI4|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "pintVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "pintVal")) { Z_LVAL(type) = VT_INT|VT_BYREF; - } - else if(!strcmp(Z_STRVAL_P(arg_property), "puintVal")) - { + } else if (!strcmp(Z_STRVAL_P(arg_property), "puintVal")) { Z_LVAL(type) = VT_UINT|VT_BYREF; - } - else - { + } else { php_error(E_WARNING, "Unknown member."); return FAILURE; } @@ -424,6 +344,7 @@ static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value return SUCCESS; } + static void php_VARIANT_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC) { FREE_VARIANT(rsrc->ptr); diff --git a/ext/rpc/com/variant.h b/ext/rpc/com/variant.h index ce5b4e66ae..3fd11f32e4 100644 --- a/ext/rpc/com/variant.h +++ b/ext/rpc/com/variant.h @@ -3,15 +3,30 @@ #if PHP_WIN32 -#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ +#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT)); \ VariantInit(v); -#define FREE_VARIANT(v) VariantClear(v); \ +#define FREE_VARIANT(v) VariantClear(v); \ efree(v); #define IS_VARIANT php_VARIANT_get_le_variant() +#define ZVAL_VARIANT(z, v) if (V_VT(v) == VT_DISPATCH) { \ + comval *obj; \ + ALLOC_COM(obj); \ + php_COM_set(obj, &V_DISPATCH(v), TRUE TSRMLS_CC); \ + ZVAL_LONG((z), zend_list_insert(obj, IS_COM)); \ + } else { \ + php_variant_to_pval((v), (z), codepage TSRMLS_CC); \ + FREE_VARIANT(v); \ + } + +#define RETVAL_VARIANT(v) ZVAL_VARIANT(return_value, (v)); +#define RETURN_VARIANT(v) RETVAL_VARIANT(v) \ + return; + + #endif /* PHP_WIN32 */ #endif /* VARIANT_H */ -- cgit v1.2.1