Nikolay Sivov : oleaut32: Add a helper to return INVOKEKIND flags value.
Alexandre Julliard
julliard at winehq.org
Mon Dec 27 10:03:53 CST 2010
Module: wine
Branch: master
Commit: b6313c702e6c7b43d58a47c9f2f2bcf7d6d9e57d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b6313c702e6c7b43d58a47c9f2f2bcf7d6d9e57d
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sat Dec 25 04:25:09 2010 +0300
oleaut32: Add a helper to return INVOKEKIND flags value.
---
dlls/oleaut32/typelib2.c | 20 ++++++++++++++------
1 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/dlls/oleaut32/typelib2.c b/dlls/oleaut32/typelib2.c
index 9b3015b..78192b1 100644
--- a/dlls/oleaut32/typelib2.c
+++ b/dlls/oleaut32/typelib2.c
@@ -240,6 +240,13 @@ static inline UINT cti2_get_func_count(const MSFT_TypeInfoBase *typeinfo)
return typeinfo->cElement & 0xFFFF;
}
+/* NOTE: entry always assumed to be a function */
+static inline INVOKEKIND ctl2_get_invokekind(const CyclicList *func)
+{
+ /* INVOKEKIND uses bit flags up to 8 */
+ return (func->u.data[4] >> 3) & 0xF;
+}
+
/****************************************************************************
* ctl2_init_header
*
@@ -2348,17 +2355,19 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
break;
/* cNames == cParams for put or putref accessor, cParams+1 otherwise */
- if(cNames != iter->u.data[5] + ((iter->u.data[4]>>3)&(INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF) ? 0 : 1))
+ if(cNames != iter->u.data[5] + (ctl2_get_invokekind(iter) & (INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF) ? 0 : 1))
return TYPE_E_ELEMENTNOTFOUND;
+ TRACE("function name %s\n", debugstr_w(names[0]));
len = ctl2_encode_name(This->typelib, names[0], &namedata);
for(iter2=This->typedata->next->next; iter2!=This->typedata->next; iter2=iter2->next) {
if(iter2->name!=-1 && !memcmp(namedata,
This->typelib->typelib_segment_data[MSFT_SEG_NAME]+iter2->name+8, len)) {
/* getters/setters can have a same name */
if (iter2->type == CyclicListFunc) {
- INT inv1 = iter2->u.data[4] >> 3;
- INT inv2 = iter->u.data[4] >> 3;
+ INVOKEKIND inv1 = ctl2_get_invokekind(iter2);
+ INVOKEKIND inv2 = ctl2_get_invokekind(iter);
+
if (((inv1&(INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF)) && (inv2&INVOKE_PROPERTYGET)) ||
((inv2&(INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF)) && (inv1&INVOKE_PROPERTYGET)))
continue;
@@ -2801,13 +2810,12 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(
for(i=0; i< cti2_get_func_count(This->typeinfo); i++) {
if(typedata[i]->u.data[4]>>16 > i) {
- int inv;
+ INVOKEKIND inv = ctl2_get_invokekind(typedata[i]);
- inv = (typedata[i]->u.data[4]>>3) & 0xf;
i = typedata[i]->u.data[4] >> 16;
while(i > typedata[i]->u.data[4]>>16) {
- int invkind = (typedata[i]->u.data[4]>>3) & 0xf;
+ INVOKEKIND invkind = ctl2_get_invokekind(typedata[i]);
if(inv & invkind) {
HeapFree(GetProcessHeap(), 0, typedata);
More information about the wine-cvs
mailing list