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