From d82b384859c9d87827a35151e14f8ca2365e8a57 Mon Sep 17 00:00:00 2001 From: Dan Hipschman Date: Mon, 27 Aug 2007 20:24:37 -0700 Subject: [PATCH] widl: Handle LPSTR in typelibs. --- tools/widl/typelib.c | 12 ++++++++++-- tools/widl/write_msft.c | 7 +++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/tools/widl/typelib.c b/tools/widl/typelib.c index 608a114717a..0238dc24f22 100644 --- a/tools/widl/typelib.c +++ b/tools/widl/typelib.c @@ -126,8 +126,9 @@ static int kw_cmp_func(const void *s1, const void *s2) return strcmp(KWP(s1)->kw, KWP(s2)->kw); } -static unsigned short builtin_vt(const char *kw) +static unsigned short builtin_vt(const type_t *t) { + const char *kw = t->name; struct oatype key, *kwp; key.kw = kw; #ifdef KW_BSEARCH @@ -145,6 +146,13 @@ static unsigned short builtin_vt(const char *kw) if (kwp) { return kwp->vt; } + if (is_string_type (t->attrs, t)) + switch (t->ref->type) + { + case RPC_FC_CHAR: return VT_LPSTR; + case RPC_FC_WCHAR: return VT_LPWSTR; + default: break; + } return 0; } @@ -160,7 +168,7 @@ unsigned short get_type_vt(type_t *t) chat("get_type_vt: %p type->name %s\n", t, t->name); if (t->name) { - vt = builtin_vt(t->name); + vt = builtin_vt(t); if (vt) return vt; } diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c index 920ca2bd2e4..dd29c73864d 100644 --- a/tools/widl/write_msft.c +++ b/tools/widl/write_msft.c @@ -852,6 +852,13 @@ static int encode_type( *encoded_type = default_type; break; + case VT_LPSTR: + case VT_LPWSTR: + *encoded_type = 0xfffe0000 | vt; + *width = 4; + *alignment = 4; + break; + case VT_PTR: { int next_vt; -- 2.11.4.GIT