Piotr Caban : oleaut32: Store names in list.
Alexandre Julliard
julliard at winehq.org
Thu Feb 18 12:49:23 CST 2010
Module: wine
Branch: master
Commit: 12feffe49eef72abaef49a9e7067d24deedeeb0c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=12feffe49eef72abaef49a9e7067d24deedeeb0c
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Feb 18 03:21:21 2010 +0100
oleaut32: Store names in list.
---
dlls/oleaut32/typelib2.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/dlls/oleaut32/typelib2.c b/dlls/oleaut32/typelib2.c
index 21e9c73..347ab7a 100644
--- a/dlls/oleaut32/typelib2.c
+++ b/dlls/oleaut32/typelib2.c
@@ -120,6 +120,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(typelib2);
typedef struct tagCyclicList {
struct tagCyclicList *next;
int indice;
+ int name;
union {
int val;
@@ -194,8 +195,6 @@ typedef struct tagICreateTypeInfo2Impl
struct tagCyclicList *typedata; /* tail of cyclic list */
- int names[42];
-
int datawidth;
struct tagICreateTypeInfo2Impl *next_typeinfo;
@@ -1447,7 +1446,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddFuncDesc(
/* update the index data */
insert->indice = ((0x6000 | This->typeinfo->cImplTypes) << 16) | index;
- This->names[index] = -1;
+ insert->name = -1;
/* ??? */
if (!This->typeinfo->res2) This->typeinfo->res2 = 0x20;
@@ -1688,7 +1687,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc(
/* update the index data */
insert->indice = 0x40000000 + index;
- This->names[index] = -1;
+ insert->name = -1;
/* figure out type widths and whatnot */
ctl2_encode_typedesc(This->typelib, &pVarDesc->elemdescVar.tdesc,
@@ -1754,7 +1753,6 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
FIXME("(%p,%d,%s,%d), stub!\n", iface, index, debugstr_w(*rgszNames), cNames);
offset = ctl2_alloc_name(This->typelib, rgszNames[0]);
- This->names[index] = offset;
namedata = This->typelib->typelib_segment_data[MSFT_SEG_NAME] + offset;
namedata[9] &= ~0x10;
@@ -1766,6 +1764,8 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
for(i=0; i<index; i++)
iter = iter->next;
+ iter->name = offset;
+
for (i = 1; i < cNames; i++) {
/* FIXME: Almost certainly easy to break */
offset = ctl2_alloc_name(This->typelib, rgszNames[i]);
@@ -1786,7 +1786,8 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(
LPOLESTR szName)
{
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
- int offset;
+ CyclicList *iter;
+ int offset, i;
char *namedata;
TRACE("(%p,%d,%s), stub!\n", iface, index, debugstr_w(szName));
@@ -1807,8 +1808,12 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(
if ((This->typeinfo->typekind & 15) == TKIND_ENUM) {
namedata[9] |= 0x20;
}
- This->names[index] = offset;
+ iter = This->typedata->next->next;
+ for(i=0; i<index; i++)
+ iter = iter->next;
+
+ iter->name = offset;
return S_OK;
}
@@ -3362,7 +3367,8 @@ static void ctl2_write_typeinfos(ICreateTypeLib2Impl *This, HANDLE hFile)
for(iter=typeinfo->typedata->next->next; iter!=typeinfo->typedata->next; iter=iter->next)
ctl2_write_chunk(hFile, &iter->indice, sizeof(int));
- ctl2_write_chunk(hFile, typeinfo->names, ((typeinfo->typeinfo->cElement & 0xffff) + (typeinfo->typeinfo->cElement >> 16)) * 4);
+ for(iter=typeinfo->typedata->next->next; iter!=typeinfo->typedata->next; iter=iter->next)
+ ctl2_write_chunk(hFile, &iter->name, sizeof(int));
for(iter=typeinfo->typedata->next->next; iter!=typeinfo->typedata->next; iter=iter->next) {
ctl2_write_chunk(hFile, &offset, sizeof(int));
More information about the wine-cvs
mailing list