Huw Davies : rpcrt4/tests: Add a test for marshalling a pointer to a user type, where the user type is itself a pointer.

Alexandre Julliard julliard at winehq.org
Fri Feb 4 09:37:17 CST 2011


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Fri Feb  4 10:19:18 2011 +0000

rpcrt4/tests: Add a test for marshalling a pointer to a user type, where the user type is itself a pointer.

---

 dlls/rpcrt4/tests/server.c   |   18 +++++++++++++++++-
 dlls/rpcrt4/tests/server.idl |    2 +-
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c
index f07fad4..1764718 100644
--- a/dlls/rpcrt4/tests/server.c
+++ b/dlls/rpcrt4/tests/server.c
@@ -562,6 +562,16 @@ s_hash_bstr(bstr_t b)
 }
 
 void
+s_get_a_bstr(bstr_t *b)
+{
+  bstr_t bstr;
+  short str[] = {5, 'W', 'i', 'n', 'e', 0};
+  bstr = HeapAlloc(GetProcessHeap(), 0, sizeof(str));
+  memcpy(bstr, str, sizeof(str));
+  *b = bstr + 1;
+}
+
+void
 s_get_name(name_t *name)
 {
   const char bossman[] = "Jeremy White";
@@ -1119,7 +1129,7 @@ pointer_tests(void)
   puints_t pus;
   cpuints_t cpus;
   short bstr_data[] = { 5, 'H', 'e', 'l', 'l', 'o' };
-  bstr_t bstr = &bstr_data[1];
+  bstr_t bstr = &bstr_data[1], bstr2;
   name_t name;
   void *buffer;
   int *pa2;
@@ -1167,6 +1177,12 @@ pointer_tests(void)
 
   ok(hash_bstr(bstr) == s_hash_bstr(bstr), "RPC hash_bstr_data\n");
 
+  get_a_bstr(&bstr);
+  s_get_a_bstr(&bstr2);
+  ok(!lstrcmpW((LPCWSTR)bstr, (LPCWSTR)bstr2), "bstr mismatch\n");
+  HeapFree(GetProcessHeap(), 0, bstr - 1);
+  HeapFree(GetProcessHeap(), 0, bstr2 - 1);
+
   free_list(list);
 
   if (!old_windows_version)
diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl
index 89f9930..2605c12 100644
--- a/dlls/rpcrt4/tests/server.idl
+++ b/dlls/rpcrt4/tests/server.idl
@@ -311,7 +311,7 @@ cpp_quote("#endif")
   typedef [unique] user_bstr_t *wire_bstr_t;
   typedef [wire_marshal(wire_bstr_t)] short *bstr_t;
   unsigned hash_bstr(bstr_t s);
-
+  void get_a_bstr([out]bstr_t *s);
   typedef struct
   {
     [string, size_is(size)] char *name;




More information about the wine-cvs mailing list