Module: wine Branch: master Commit: d82b384859c9d87827a35151e14f8ca2365e8a57 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d82b384859c9d87827a35151e1...
Author: Dan Hipschman dsh@linux.ucla.edu Date: Mon Aug 27 20:24:37 2007 -0700
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 608a114..0238dc2 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 920ca2b..dd29c73 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;