Rob Shearman : rpcrt4: Add a test for the pointers in [in,out] pointer structs not changing when the pointers aren't NULL.

Alexandre Julliard julliard at winehq.org
Fri Nov 2 08:10:27 CDT 2007


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Thu Nov  1 22:04:43 2007 +0000

rpcrt4: Add a test for the pointers in [in,out] pointer structs not changing when the pointers aren't NULL.

---

 dlls/rpcrt4/tests/server.c   |   19 +++++++++++++++++++
 dlls/rpcrt4/tests/server.idl |    7 +++++++
 2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c
index d0f4eef..79a0e32 100644
--- a/dlls/rpcrt4/tests/server.c
+++ b/dlls/rpcrt4/tests/server.c
@@ -472,6 +472,16 @@ s_hash_bstr(bstr_t b)
 }
 
 void
+s_get_name(name_t *name)
+{
+  const char bossman[] = "Jeremy White";
+  memcpy(name->name, bossman, min(name->size, sizeof(bossman)));
+  /* ensure nul-termination */
+  if (name->size < sizeof(bossman))
+    name->name[name->size - 1] = 0;
+}
+
+void
 s_stop(void)
 {
   ok(RPC_S_OK == RpcMgmtStopServerListening(NULL), "RpcMgmtStopServerListening\n");
@@ -800,6 +810,8 @@ pointer_tests(void)
   cpuints_t cpus;
   short bstr_data[] = { 5, 'H', 'e', 'l', 'l', 'o' };
   bstr_t bstr = &bstr_data[1];
+  name_t name;
+  void *buffer;
 
   ok(test_list_length(list) == 3, "RPC test_list_length\n");
   ok(square_puint(p1) == 121, "RPC square_puint\n");
@@ -843,6 +855,13 @@ pointer_tests(void)
   ok(hash_bstr(bstr) == s_hash_bstr(bstr), "RPC hash_bstr_data\n");
 
   free_list(list);
+
+  name.size = 10;
+  name.name = buffer = HeapAlloc(GetProcessHeap(), 0, name.size);
+  get_name(&name);
+  todo_wine
+  ok(name.name == buffer, "[in,out] pointer should have stayed as %p but instead changed to %p\n", name.name, buffer);
+  HeapFree(GetProcessHeap(), 0, name.name);
 }
 
 static int
diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl
index fa1ea15..15402ee 100644
--- a/dlls/rpcrt4/tests/server.idl
+++ b/dlls/rpcrt4/tests/server.idl
@@ -290,5 +290,12 @@ cpp_quote("#endif")
   typedef [wire_marshal(wire_bstr_t)] short *bstr_t;
   unsigned hash_bstr(bstr_t s);
 
+  typedef struct
+  {
+    [string, size_is(size)] char *name;
+    unsigned int size;
+  } name_t;
+  void get_name([in,out] name_t *name);
+
   void stop(void);
 }




More information about the wine-cvs mailing list