[PATCH 11/13] widl: Allow adding the same custdata GUID multiple times in a typelib.
Puetz Kevin A
PuetzKevinA at JohnDeere.com
Thu Aug 6 23:13:35 CDT 2020
e.g. using the same kind of custdata in multiple interfaces
Signed-off-by: Kevin Puetz <PuetzKevinA at JohnDeere.com>
---
tools/widl/write_msft.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
index 87863e25fb..70d123813f 100644
--- a/tools/widl/write_msft.c
+++ b/tools/widl/write_msft.c
@@ -1263,18 +1263,25 @@ static void write_default_value(msft_typelib_t *typelib, type_t *type, expr_t *e
static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid,
int vt, const void *value, int *offset)
{
- MSFT_GuidEntry guidentry;
int guidoffset;
int custoffset;
int *custdata;
int data_out;
+ int hash_key;
- guidentry.guid = *guid;
+ hash_key = ctl2_hash_guid(guid);
+ guidoffset = ctl2_find_guid(typelib, hash_key, guid);
+ if(guidoffset == -1) {
+ // add GUID that was not already present
+ MSFT_GuidEntry guidentry;
+ guidentry.guid = *guid;
- guidentry.hreftype = -1;
- guidentry.next_hash = -1;
+ guidentry.hreftype = -1;
+ guidentry.next_hash = -1;
+
+ guidoffset = ctl2_alloc_guid(typelib, &guidentry);
+ }
- guidoffset = ctl2_alloc_guid(typelib, &guidentry);
if(vt == VT_BSTR)
write_string_value(typelib, &data_out, value);
else
More information about the wine-devel
mailing list