Dan Hipschman : widl:
Check if a typeinfo is already in a typelib before adding it.
Alexandre Julliard
julliard at wine.codeweavers.com
Sat Jul 29 05:22:19 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: c650cceae32849ea974328a94753cd2cef94a9c1
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=c650cceae32849ea974328a94753cd2cef94a9c1
Author: Dan Hipschman <dsh at linux.ucla.edu>
Date: Fri Jul 28 13:44:21 2006 -0700
widl: Check if a typeinfo is already in a typelib before adding it.
---
tools/widl/write_msft.c | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
index d2a49e9..f2800d8 100644
--- a/tools/widl/write_msft.c
+++ b/tools/widl/write_msft.c
@@ -1901,6 +1901,9 @@ static void add_dispinterface_typeinfo(m
var_t *var;
msft_typeinfo_t *msft_typeinfo;
+ if (-1 < dispinterface->typelib_idx)
+ return;
+
dispinterface->typelib_idx = typelib->typelib_header.nrtypeinfos;
msft_typeinfo = create_msft_typeinfo(typelib, TKIND_DISPATCH, dispinterface->name,
dispinterface->attrs, typelib->typelib_header.nrtypeinfos);
@@ -1950,6 +1953,9 @@ static void add_interface_typeinfo(msft_
const attr_t *attr;
const type_t *derived;
+ if (-1 < interface->typelib_idx)
+ return;
+
for(attr = interface->attrs; attr; attr = NEXT_LINK(attr))
if(attr->type == ATTR_DISPINTERFACE)
return add_dispinterface_typeinfo(typelib, interface);
@@ -2012,6 +2018,9 @@ static void add_structure_typeinfo(msft_
var_t *cur = structure->fields;
msft_typeinfo_t *msft_typeinfo;
+ if (-1 < structure->typelib_idx)
+ return;
+
structure->typelib_idx = typelib->typelib_header.nrtypeinfos;
msft_typeinfo = create_msft_typeinfo(typelib, TKIND_RECORD, structure->name, structure->attrs,
typelib->typelib_header.nrtypeinfos);
@@ -2050,6 +2059,9 @@ static void add_typedef_typeinfo(msft_ty
int alignment;
const attr_t *attrs;
+ if (-1 < tdef->type->typelib_idx)
+ return;
+
tdef->type->typelib_idx = typelib->typelib_header.nrtypeinfos;
msft_typeinfo = create_msft_typeinfo(typelib, TKIND_ALIAS, tdef->name, tdef->type->attrs,
typelib->typelib_header.nrtypeinfos);
@@ -2070,6 +2082,9 @@ static void add_coclass_typeinfo(msft_ty
int have_default = 0, have_default_source = 0;
const attr_t *attr;
+ if (-1 < cls->typelib_idx)
+ return;
+
cls->typelib_idx = typelib->typelib_header.nrtypeinfos;
msft_typeinfo = create_msft_typeinfo(typelib, TKIND_COCLASS, cls->name, cls->attrs,
typelib->typelib_header.nrtypeinfos);
@@ -2148,6 +2163,9 @@ static void add_module_typeinfo(msft_typ
func_t *func;
msft_typeinfo_t *msft_typeinfo;
+ if (-1 < module->typelib_idx)
+ return;
+
module->typelib_idx = typelib->typelib_header.nrtypeinfos;
msft_typeinfo = create_msft_typeinfo(typelib, TKIND_MODULE, module->name, module->attrs,
typelib->typelib_header.nrtypeinfos);
More information about the wine-cvs
mailing list