Dan Hipschman : widl: Handle LPSTR in typelibs.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Aug 28 07:50:10 CDT 2007


Module: wine
Branch: master
Commit: d82b384859c9d87827a35151e14f8ca2365e8a57
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d82b384859c9d87827a35151e14f8ca2365e8a57

Author: Dan Hipschman <dsh at 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;




More information about the wine-cvs mailing list