Rob Shearman : rpcrt4: The type referred to by the wire_marshal attribute in server. idl must be a pointer.

Alexandre Julliard julliard at winehq.org
Tue Oct 14 08:29:59 CDT 2008


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

Author: Rob Shearman <robertshearman at gmail.com>
Date:   Mon Oct 13 23:36:17 2008 +0100

rpcrt4: The type referred to by the wire_marshal attribute in server.idl must be a pointer.

Therefore, declare the structure as user_bstr_t and make wire_bstr_t
be a typedef to a pointer of this type.

---

 dlls/rpcrt4/tests/server.c   |   10 +++++-----
 dlls/rpcrt4/tests/server.idl |    3 ++-
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c
index 78a8bff..a2d72de 100644
--- a/dlls/rpcrt4/tests/server.c
+++ b/dlls/rpcrt4/tests/server.c
@@ -990,27 +990,27 @@ us_t_UserFree(ULONG *flags, us_t *pus)
 ULONG __RPC_USER
 bstr_t_UserSize(ULONG *flags, ULONG start, bstr_t *b)
 {
-  return start + FIELD_OFFSET(wire_bstr_t, data[(*b)[-1]]);
+  return start + FIELD_OFFSET(user_bstr_t, data[(*b)[-1]]);
 }
 
 unsigned char * __RPC_USER
 bstr_t_UserMarshal(ULONG *flags, unsigned char *buffer, bstr_t *b)
 {
-  wire_bstr_t *wb = (wire_bstr_t *) buffer;
+  wire_bstr_t wb = (wire_bstr_t) buffer;
   wb->n = (*b)[-1];
   memcpy(&wb->data, *b, wb->n * sizeof wb->data[0]);
-  return buffer + FIELD_OFFSET(wire_bstr_t, data[wb->n]);
+  return buffer + FIELD_OFFSET(user_bstr_t, data[wb->n]);
 }
 
 unsigned char * __RPC_USER
 bstr_t_UserUnmarshal(ULONG *flags, unsigned char *buffer, bstr_t *b)
 {
-  wire_bstr_t *wb = (wire_bstr_t *) buffer;
+  wire_bstr_t wb = (wire_bstr_t) buffer;
   short *data = HeapAlloc(GetProcessHeap(), 0, (wb->n + 1) * sizeof *data);
   data[0] = wb->n;
   memcpy(&data[1], wb->data, wb->n * sizeof data[1]);
   *b = &data[1];
-  return buffer + FIELD_OFFSET(wire_bstr_t, data[wb->n]);
+  return buffer + FIELD_OFFSET(user_bstr_t, data[wb->n]);
 }
 
 void __RPC_USER
diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl
index 26d3373..53ec016 100644
--- a/dlls/rpcrt4/tests/server.idl
+++ b/dlls/rpcrt4/tests/server.idl
@@ -299,8 +299,9 @@ cpp_quote("#endif")
   {
     short n;
     [size_is(n)] short data[];
-  } wire_bstr_t;
+  } user_bstr_t;
 
+  typedef [unique] user_bstr_t *wire_bstr_t;
   typedef [wire_marshal(wire_bstr_t)] short *bstr_t;
   unsigned hash_bstr(bstr_t s);
 




More information about the wine-cvs mailing list