Module: wine Branch: master Commit: 18c16a802741eaacd14a1f98b3862b1e2795e8a2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=18c16a802741eaacd14a1f98b3...
Author: Rob Shearman rob@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); }