[PATCH 2/2] Hide variables and functions count storage details in helpers
Nikolay Sivov
nsivov at codeweavers.com
Thu Dec 23 17:51:04 CST 2010
---
dlls/oleaut32/tests/typelib.c | 6 +++
dlls/oleaut32/typelib2.c | 68 ++++++++++++++++++++++------------------
2 files changed, 43 insertions(+), 31 deletions(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 4b91a6a..2eb1147 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -1548,6 +1548,12 @@ static void test_CreateTypeLib(void) {
hres = ICreateTypeInfo_SetFuncHelpContext(createti, 1, 0xabcdefab);
ok(hres == S_OK, "got %08x\n", hres);
+ hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, propname, 0);
+ ok(hres == TYPE_E_ELEMENTNOTFOUND, "got %08x\n", hres);
+
+ hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, NULL, 1);
+ ok(hres == E_INVALIDARG, "got %08x\n", hres);
+
hres = ICreateTypeInfo_SetFuncAndParamNames(createti, 0, propname, 1);
ok(hres == S_OK, "got %08x\n", hres);
diff --git a/dlls/oleaut32/typelib2.c b/dlls/oleaut32/typelib2.c
index 38ef545..9b3015b 100644
--- a/dlls/oleaut32/typelib2.c
+++ b/dlls/oleaut32/typelib2.c
@@ -230,6 +230,16 @@ static CyclicList *alloc_cyclic_list_item(CyclicListElementType type)
/*================== Internal functions ===================================*/
+static inline UINT cti2_get_var_count(const MSFT_TypeInfoBase *typeinfo)
+{
+ return typeinfo->cElement >> 16;
+}
+
+static inline UINT cti2_get_func_count(const MSFT_TypeInfoBase *typeinfo)
+{
+ return typeinfo->cElement & 0xFFFF;
+}
+
/****************************************************************************
* ctl2_init_header
*
@@ -1921,7 +1931,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddFuncDesc(
return TYPE_E_BADMODULEKIND;
}
- if(This->typeinfo->cElement<index)
+ if(cti2_get_func_count(This->typeinfo) < index)
return TYPE_E_ELEMENTNOTFOUND;
if((pFuncDesc->invkind&(INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF)) &&
@@ -2006,7 +2016,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddFuncDesc(
insert->name = -1;
/* insert type data to list */
- if(index == This->typeinfo->cElement) {
+ if(index == cti2_get_func_count(This->typeinfo)) {
insert->next = This->typedata->next;
This->typedata->next = insert;
This->typedata = insert;
@@ -2212,10 +2222,8 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc(
pVarDesc->elemdescVar.u.paramdesc.pparamdescex, pVarDesc->elemdescVar.u.paramdesc.wParamFlags,
pVarDesc->wVarFlags, pVarDesc->varkind);
- if ((This->typeinfo->cElement >> 16) != index) {
- TRACE("Out-of-order element.\n");
+ if (cti2_get_var_count(This->typeinfo) != index)
return TYPE_E_ELEMENTNOTFOUND;
- }
if (!This->typedata) {
This->typedata = alloc_cyclic_list_item(CyclicListSentinel);
@@ -2318,20 +2326,20 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc(
static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
ICreateTypeInfo2* iface,
UINT index,
- LPOLESTR* rgszNames,
+ LPOLESTR* names,
UINT cNames)
{
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
- CyclicList *iter = NULL, *iter2;
- int offset, len, i=0;
+ CyclicList *iter, *iter2;
+ int offset, len, i;
char *namedata;
- TRACE("(%p %d %p %d)\n", iface, index, rgszNames, cNames);
+ TRACE("(%p %d %p %d)\n", This, index, names, cNames);
- if(!rgszNames)
+ if(!names)
return E_INVALIDARG;
- if(index >= (This->typeinfo->cElement&0xFFFF) || !cNames)
+ if(index >= cti2_get_func_count(This->typeinfo) || cNames == 0)
return TYPE_E_ELEMENTNOTFOUND;
for(iter=This->typedata->next->next, i=0; /* empty */; iter=iter->next)
@@ -2343,7 +2351,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
if(cNames != iter->u.data[5] + ((iter->u.data[4]>>3)&(INVOKE_PROPERTYPUT|INVOKE_PROPERTYPUTREF) ? 0 : 1))
return TYPE_E_ELEMENTNOTFOUND;
- len = ctl2_encode_name(This->typelib, rgszNames[0], &namedata);
+ 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)) {
@@ -2360,7 +2368,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
}
}
- offset = ctl2_alloc_name(This->typelib, rgszNames[0]);
+ offset = ctl2_alloc_name(This->typelib, names[0]);
if(offset == -1)
return E_OUTOFMEMORY;
@@ -2373,7 +2381,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
len = (iter->u.data[0]&0xFFFF)/4 - iter->u.data[5]*3;
for (i = 1; i < cNames; i++) {
- offset = ctl2_alloc_name(This->typelib, rgszNames[i]);
+ offset = ctl2_alloc_name(This->typelib, names[i]);
iter->u.data[len + ((i-1)*3) + 1] = offset;
}
@@ -2395,12 +2403,10 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(
int offset, i;
char *namedata;
- TRACE("(%p,%d,%s), stub!\n", iface, index, debugstr_w(szName));
+ TRACE("(%p,%d,%s)\n", This, index, debugstr_w(szName));
- if ((This->typeinfo->cElement >> 16) <= index) {
- TRACE("Out-of-order element.\n");
+ if (cti2_get_var_count(This->typeinfo) <= index)
return TYPE_E_ELEMENTNOTFOUND;
- }
offset = ctl2_alloc_name(This->typelib, szName);
if (offset == -1) return E_OUTOFMEMORY;
@@ -2516,10 +2522,10 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncHelpContext(
TRACE("(%p,%d,%d)\n", iface, index, dwHelpContext);
- if(This->typeinfo->cElement<index)
+ if(cti2_get_func_count(This->typeinfo) < index)
return TYPE_E_ELEMENTNOTFOUND;
- if(This->typeinfo->cElement == index && This->typedata->type == CyclicListFunc)
+ if(cti2_get_func_count(This->typeinfo) == index && This->typedata->type == CyclicListFunc)
func = This->typedata;
else
for(func=This->typedata->next->next; func!=This->typedata; func=func->next)
@@ -2550,7 +2556,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetVarHelpContext(
TRACE("(%p,%d,%d)\n", This, index, context);
- if ((This->typeinfo->cElement >> 16) <= index)
+ if (cti2_get_var_count(This->typeinfo) <= index)
return TYPE_E_ELEMENTNOTFOUND;
for (iter = This->typedata->next->next; iter != This->typedata->next; iter = iter->next)
@@ -2711,7 +2717,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(
if(!This->typedata)
return S_OK;
- typedata = HeapAlloc(GetProcessHeap(), 0, sizeof(CyclicList*)*(This->typeinfo->cElement&0xffff));
+ typedata = HeapAlloc(GetProcessHeap(), 0, sizeof(CyclicList*)*cti2_get_func_count(This->typeinfo));
if(!typedata)
return E_OUTOFMEMORY;
@@ -2793,7 +2799,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnLayOut(
if(user_vft)
This->typeinfo->cbSizeVft = user_vft+3;
- for(i=0; i<(This->typeinfo->cElement&0xffff); i++) {
+ for(i=0; i< cti2_get_func_count(This->typeinfo); i++) {
if(typedata[i]->u.data[4]>>16 > i) {
int inv;
@@ -2962,7 +2968,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncCustData(
TRACE("(%p,%d,%s,%p)\n", iface, index, debugstr_guid(guid), pVarVal);
- if(index >= (This->typeinfo->cElement&0xFFFF))
+ if(index >= cti2_get_func_count(This->typeinfo))
return TYPE_E_ELEMENTNOTFOUND;
for(iter=This->typedata->next->next; /* empty */; iter=iter->next)
@@ -3198,16 +3204,16 @@ static HRESULT WINAPI ITypeInfo2_fnGetTypeAttr(
(*ppTypeAttr)->lcid = This->typelib->typelib_header.lcid;
(*ppTypeAttr)->cbSizeInstance = This->typeinfo->size;
(*ppTypeAttr)->typekind = This->typekind;
- (*ppTypeAttr)->cFuncs = This->typeinfo->cElement&0xffff;
+ (*ppTypeAttr)->cFuncs = cti2_get_func_count(This->typeinfo);
if(This->typeinfo->flags&TYPEFLAG_FDUAL && This->typekind==TKIND_DISPATCH)
(*ppTypeAttr)->cFuncs += 7;
- (*ppTypeAttr)->cVars = This->typeinfo->cElement>>16;
+ (*ppTypeAttr)->cVars = cti2_get_var_count(This->typeinfo);
(*ppTypeAttr)->cImplTypes = This->typeinfo->cImplTypes;
(*ppTypeAttr)->cbSizeVft = This->typekind==TKIND_DISPATCH ? 7 * sizeof(void*) : This->typeinfo->cbSizeVft;
(*ppTypeAttr)->cbAlignment = (This->typeinfo->typekind>>11) & 0x1f;
(*ppTypeAttr)->wTypeFlags = This->typeinfo->flags;
- (*ppTypeAttr)->wMajorVerNum = This->typeinfo->version&0xffff;
- (*ppTypeAttr)->wMinorVerNum = This->typeinfo->version>>16;
+ (*ppTypeAttr)->wMajorVerNum = LOWORD(This->typeinfo->version);
+ (*ppTypeAttr)->wMinorVerNum = HIWORD(This->typeinfo->version);
if((*ppTypeAttr)->typekind == TKIND_ALIAS)
FIXME("TKIND_ALIAS handling not implemented\n");
@@ -3248,7 +3254,7 @@ static HRESULT WINAPI ITypeInfo2_fnGetFuncDesc(
if (!ppFuncDesc)
return E_INVALIDARG;
- if (index >= This->typeinfo->cElement)
+ if (index >= cti2_get_func_count(This->typeinfo))
return TYPE_E_ELEMENTNOTFOUND;
hres = ICreateTypeInfo2_LayOut((ICreateTypeInfo2*)This);
@@ -4599,8 +4605,8 @@ static HRESULT ctl2_finalize_typeinfos(ICreateTypeLib2Impl *This, int filesize)
if (typeinfo->typedata)
filesize += typeinfo->typedata->next->u.val
- + ((typeinfo->typeinfo->cElement >> 16) * 12)
- + ((typeinfo->typeinfo->cElement & 0xffff) * 12) + 4;
+ + cti2_get_var_count(typeinfo->typeinfo) * 12
+ + cti2_get_func_count(typeinfo->typeinfo) * 12 + 4;
}
return S_OK;
--
1.5.6.5
--------------000007090803040307010805--
More information about the wine-patches
mailing list