diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c index 6ac2f742276..d6655688314 100644 --- a/dlls/rpcrt4/tests/server.c +++ b/dlls/rpcrt4/tests/server.c @@ -94,6 +94,9 @@ static int (__cdecl *sum_cps)(cps_t *cps); static int (__cdecl *sum_cpsc)(cpsc_t *cpsc); static int (__cdecl *get_cpsc)(int n, cpsc_t *cpsc); static int (__cdecl *sum_complex_array)(int n, refpint_t pi[]); +static int (__cdecl *sum_blob)(cs_blob_t *blob); +static int (__cdecl *sum_data)(cs_data_t *data); +static int (__cdecl *sum_container)(cs_container_t *container); static int (__cdecl *square_puint)(puint_t p); static int (__cdecl *sum_puints)(puints_t *p); static int (__cdecl *sum_cpuints)(cpuints_t *p); @@ -185,6 +188,9 @@ static void (__cdecl *test_handle)(ctx_handle_t ctx_handle); X(sum_cpsc) \ X(get_cpsc) \ X(sum_complex_array) \ + X(sum_blob) \ + X(sum_data) \ + X(sum_container) \ X(square_puint) \ X(sum_puints) \ X(sum_cpuints) \ @@ -507,6 +513,36 @@ int __cdecl s_sum_complex_array(int n, refpint_t pi[]) return total; } +int __cdecl s_sum_blob(cs_blob_t *blob) +{ + int i, total = 0; + + for (i = 0; i < blob->n; i++) + total += blob->ca[i]; + + return total; +} + +int __cdecl s_sum_data(cs_data_t *data) +{ + int i, total = 0; + + for (i = 0; i < data->blob.n; i++) + total += data->blob.ca[i]; + + return total; +} + +int __cdecl s_sum_container(cs_container_t *container) +{ + int i, total = 0; + + for (i = 0; i < container->data.blob.n; i++) + total += container->data.blob.ca[i]; + + return total; +} + int __cdecl s_dot_two_vectors(vector_t vs[2]) { return vs[0].x * vs[1].x + vs[0].y * vs[1].y + vs[0].z * vs[1].z; @@ -1618,6 +1654,9 @@ array_tests(void) vector_t vs[2] = {{1, -2, 3}, {4, -5, -6}}; cps_t cps; cpsc_t cpsc; + cs_blob_t blob; + cs_data_t data; + cs_container_t container; cs_t *cs; int n; int ca[5] = {1, -2, 3, -4, 5}; @@ -1761,6 +1800,21 @@ array_tests(void) ok(sum_ptr_array(ptr_array) == 3, "RPC sum_ptr_array\n"); ok(sum_array_ptr(&array) == 7, "RPC sum_array_ptr\n"); + + blob.n = ARRAY_SIZE(c); + blob.ca = c; + n = sum_blob(&blob); + ok(n == 45, "RPC sum_blob = %d\n", n); + + data.blob.n = ARRAY_SIZE(c); + data.blob.ca = c; + n = sum_data(&data); + ok(n == 45, "RPC sum_data = %d\n", n); + + container.data.blob.n = ARRAY_SIZE(c); + container.data.blob.ca = c; + n = sum_container(&container); + ok(n == 45, "RPC sum_container = %d\n", n); } void __cdecl s_authinfo_test(unsigned int protseq, int secure) diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl index afda2eddd04..4d945dcca3e 100644 --- a/dlls/rpcrt4/tests/server.idl +++ b/dlls/rpcrt4/tests/server.idl @@ -169,6 +169,30 @@ cpp_quote("#ifndef SKIP_TYPE_DECLS") [size_is(n)] int ca[]; } cs_t; + typedef struct + { + int n; + [size_is(n)] int *ca; + } cs_blob_t; + + typedef struct + { +/* FIXME: widl generates incorrect correlation descriptor and the tests crash */ +#if 0 + int dummy[1]; /* to make offset to conformant array unique */ +#endif + cs_blob_t blob; + } cs_data_t; + + typedef struct + { +/* FIXME: widl generates incorrect correlation descriptor and the tests crash */ +#if 0 + int dummy[2]; /* to make offset to conformant array unique */ +#endif + cs_data_t data; + } cs_container_t; + typedef struct { int *pn; @@ -191,6 +215,9 @@ cpp_quote("#endif") int sum_cpsc(cpsc_t *cpsc); int get_cpsc(int n, [out] cpsc_t *cpsc ); int sum_complex_array(int n, [size_is(n)] refpint_t pi[]); + int sum_blob([in] cs_blob_t *blob); + int sum_data([in] cs_data_t *data); + int sum_container([in] cs_container_t *container); cpp_quote("#ifndef SKIP_TYPE_DECLS") typedef [wire_marshal(int)] void *puint_t;