From: Harald Radi Date: Sun, 18 Feb 2001 16:49:59 +0000 (+0000) Subject: added a few more variant types for zval <-> variant conversion X-Git-Tag: php-4.0.5RC1~256 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c315e137c30ebb8e24ce45be2acc3f7a486fbbe4;p=php added a few more variant types for zval <-> variant conversion --- diff --git a/ext/com/conversion.c b/ext/com/conversion.c index d0effd96e3..044e142e25 100644 --- a/ext/com/conversion.c +++ b/ext/com/conversion.c @@ -317,7 +317,7 @@ PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_ case VT_UINT: convert_to_long_ex(&pval_arg); - var_arg->intVal = (unsigned int)pval_arg->value.lval; + var_arg->uintVal = (unsigned int)pval_arg->value.lval; break; case VT_I1|VT_BYREF: @@ -342,7 +342,7 @@ PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_ case VT_UINT|VT_BYREF: convert_to_long(pval_arg); - var_arg->pintVal = (unsigned int FAR*) &pval_arg->value.lval; + var_arg->puintVal = (unsigned int FAR*) &pval_arg->value.lval; break; default: @@ -421,6 +421,15 @@ PHPAPI void php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent } break; + case VT_CY: + if(var_arg->vt & VT_BYREF) + VarR8FromCy(var_arg->cyVal, &(pval_arg->value.dval)); + else + VarR8FromCy(*(var_arg->pcyVal), &(pval_arg->value.dval)); + + pval_arg->type = IS_DOUBLE; + break; + case VT_BOOL: if (var_arg->vt & VT_BYREF) if (*(var_arg->pboolVal) & 0xFFFF) @@ -498,6 +507,52 @@ PHPAPI void php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent case VT_UNKNOWN: var_arg->pdispVal->lpVtbl->Release(var_arg->pdispVal); /* break missing intentionally */ + + case VT_I1: + if(var_arg->vt & VT_BYREF) + pval_arg->value.lval = (long)*(var_arg->pcVal); + else + pval_arg->value.lval = (long) var_arg->cVal; + + pval_arg->type = IS_LONG; + break; + + case VT_UI2: + if(var_arg->vt & VT_BYREF) + pval_arg->value.lval = (long)*(var_arg->puiVal); + else + pval_arg->value.lval = (long) var_arg->uiVal; + + pval_arg->type = IS_LONG; + break; + + case VT_UI4: + if(var_arg->vt & VT_BYREF) + pval_arg->value.lval = (long)*(var_arg->pulVal); + else + pval_arg->value.lval = (long) var_arg->ulVal; + + pval_arg->type = IS_LONG; + break; + + case VT_INT: + if(var_arg->vt & VT_BYREF) + pval_arg->value.lval = (long)*(var_arg->pintVal); + else + pval_arg->value.lval = (long) var_arg->intVal; + + pval_arg->type = IS_LONG; + break; + + case VT_UINT: + if(var_arg->vt & VT_BYREF) + pval_arg->value.lval = (long)*(var_arg->puintVal); + else + pval_arg->value.lval = (long) var_arg->uintVal; + + pval_arg->type = IS_LONG; + break; + default: php_error(E_WARNING,"Unsupported variant type: %d (0x%X)", var_arg->vt, var_arg->vt); var_reset(pval_arg); diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c index d0effd96e3..044e142e25 100644 --- a/ext/rpc/com/conversion.c +++ b/ext/rpc/com/conversion.c @@ -317,7 +317,7 @@ PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_ case VT_UINT: convert_to_long_ex(&pval_arg); - var_arg->intVal = (unsigned int)pval_arg->value.lval; + var_arg->uintVal = (unsigned int)pval_arg->value.lval; break; case VT_I1|VT_BYREF: @@ -342,7 +342,7 @@ PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_ case VT_UINT|VT_BYREF: convert_to_long(pval_arg); - var_arg->pintVal = (unsigned int FAR*) &pval_arg->value.lval; + var_arg->puintVal = (unsigned int FAR*) &pval_arg->value.lval; break; default: @@ -421,6 +421,15 @@ PHPAPI void php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent } break; + case VT_CY: + if(var_arg->vt & VT_BYREF) + VarR8FromCy(var_arg->cyVal, &(pval_arg->value.dval)); + else + VarR8FromCy(*(var_arg->pcyVal), &(pval_arg->value.dval)); + + pval_arg->type = IS_DOUBLE; + break; + case VT_BOOL: if (var_arg->vt & VT_BYREF) if (*(var_arg->pboolVal) & 0xFFFF) @@ -498,6 +507,52 @@ PHPAPI void php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent case VT_UNKNOWN: var_arg->pdispVal->lpVtbl->Release(var_arg->pdispVal); /* break missing intentionally */ + + case VT_I1: + if(var_arg->vt & VT_BYREF) + pval_arg->value.lval = (long)*(var_arg->pcVal); + else + pval_arg->value.lval = (long) var_arg->cVal; + + pval_arg->type = IS_LONG; + break; + + case VT_UI2: + if(var_arg->vt & VT_BYREF) + pval_arg->value.lval = (long)*(var_arg->puiVal); + else + pval_arg->value.lval = (long) var_arg->uiVal; + + pval_arg->type = IS_LONG; + break; + + case VT_UI4: + if(var_arg->vt & VT_BYREF) + pval_arg->value.lval = (long)*(var_arg->pulVal); + else + pval_arg->value.lval = (long) var_arg->ulVal; + + pval_arg->type = IS_LONG; + break; + + case VT_INT: + if(var_arg->vt & VT_BYREF) + pval_arg->value.lval = (long)*(var_arg->pintVal); + else + pval_arg->value.lval = (long) var_arg->intVal; + + pval_arg->type = IS_LONG; + break; + + case VT_UINT: + if(var_arg->vt & VT_BYREF) + pval_arg->value.lval = (long)*(var_arg->puintVal); + else + pval_arg->value.lval = (long) var_arg->uintVal; + + pval_arg->type = IS_LONG; + break; + default: php_error(E_WARNING,"Unsupported variant type: %d (0x%X)", var_arg->vt, var_arg->vt); var_reset(pval_arg);