Refactor php_com_get_id_of_name()

Use zend_string*
This commit is contained in:
George Peter Banyard 2021-09-26 02:23:39 +01:00
parent f3ca081379
commit 3dc4863f2b
No known key found for this signature in database
GPG Key ID: D49A095D7329F6DC
3 changed files with 11 additions and 15 deletions

View File

@ -408,23 +408,19 @@ HRESULT php_com_invoke_helper(php_com_dotnet_object *obj, DISPID id_member,
}
/* map an ID to a name */
HRESULT php_com_get_id_of_name(php_com_dotnet_object *obj, char *name,
size_t namelen, DISPID *dispid)
HRESULT php_com_get_id_of_name(php_com_dotnet_object *obj, zend_string *name,
DISPID *dispid)
{
OLECHAR *olename;
HRESULT hr;
zval *tmp;
if (namelen == -1) {
namelen = strlen(name);
}
if (obj->id_of_name_cache && NULL != (tmp = zend_hash_str_find(obj->id_of_name_cache, name, namelen))) {
if (obj->id_of_name_cache && NULL != (tmp = zend_hash_find(obj->id_of_name_cache, name))) {
*dispid = (DISPID)Z_LVAL_P(tmp);
return S_OK;
}
olename = php_com_string_to_olestring(name, namelen, obj->code_page);
olename = php_com_string_to_olestring(ZSTR_VAL(name), ZSTR_LEN(name), obj->code_page);
if (obj->typeinfo) {
hr = ITypeInfo_GetIDsOfNames(obj->typeinfo, &olename, 1, dispid);
@ -451,7 +447,7 @@ HRESULT php_com_get_id_of_name(php_com_dotnet_object *obj, char *name,
zend_hash_init(obj->id_of_name_cache, 2, NULL, NULL, 0);
}
ZVAL_LONG(&tmp, *dispid);
zend_hash_str_update(obj->id_of_name_cache, name, namelen, &tmp);
zend_hash_update(obj->id_of_name_cache, name, &tmp);
}
return hr;
@ -472,7 +468,7 @@ int php_com_do_invoke_byref(php_com_dotnet_object *obj, zend_internal_function *
return FAILURE;
}
hr = php_com_get_id_of_name(obj, f->function_name->val, f->function_name->len, &dispid);
hr = php_com_get_id_of_name(obj, f->function_name, &dispid);
if (FAILED(hr)) {
char *msg = NULL;
@ -640,7 +636,7 @@ zend_result php_com_do_invoke(php_com_dotnet_object *obj, zend_string *name,
HRESULT hr;
char *msg = NULL;
hr = php_com_get_id_of_name(obj, ZSTR_VAL(name), ZSTR_LEN(name), &dispid);
hr = php_com_get_id_of_name(obj, name, &dispid);
if (FAILED(hr)) {
char *winerr = php_win32_error_to_msg(hr);

View File

@ -190,7 +190,7 @@ static int com_property_exists(zend_object *object, zend_string *member, int che
obj = (php_com_dotnet_object*) object;
if (V_VT(&obj->v) == VT_DISPATCH) {
if (SUCCEEDED(php_com_get_id_of_name(obj, ZSTR_VAL(member), ZSTR_LEN(member), &dispid))) {
if (SUCCEEDED(php_com_get_id_of_name(obj, member, &dispid))) {
/* TODO: distinguish between property and method! */
return 1;
}
@ -298,7 +298,7 @@ static zend_function *com_method_get(zend_object **object_ptr, zend_string *name
return NULL;
}
if (FAILED(php_com_get_id_of_name(obj, name->val, name->len, &dummy))) {
if (FAILED(php_com_get_id_of_name(obj, name, &dummy))) {
return NULL;
}

View File

@ -93,8 +93,8 @@ PHP_METHOD(com, __construct);
HRESULT php_com_invoke_helper(php_com_dotnet_object *obj, DISPID id_member,
WORD flags, DISPPARAMS *disp_params, VARIANT *v, int silent, int allow_noarg);
HRESULT php_com_get_id_of_name(php_com_dotnet_object *obj, char *name,
size_t namelen, DISPID *dispid);
HRESULT php_com_get_id_of_name(php_com_dotnet_object *obj, zend_string *name,
DISPID *dispid);
int php_com_do_invoke_by_id(php_com_dotnet_object *obj, DISPID dispid,
WORD flags, VARIANT *v, int nargs, zval *args, int silent, int allow_noarg);
zend_result php_com_do_invoke(php_com_dotnet_object *obj, zend_string *name,