Module: wine Branch: master Commit: a0ac63961d4b43e67a5aa2b58092f717d2c90ec7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a0ac63961d4b43e67a5aa2b580...
Author: Dan Hipschman dsh@linux.ucla.edu Date: Mon Nov 5 17:23:26 2007 -0800
widl: Don't rely on type_memsize to return 0 for all conformant arrays.
---
dlls/rpcrt4/tests/server.c | 12 ++++++++++++ dlls/rpcrt4/tests/server.idl | 1 + tools/widl/typegen.c | 4 +--- 3 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c index b01967d..ad0dd73 100644 --- a/dlls/rpcrt4/tests/server.c +++ b/dlls/rpcrt4/tests/server.c @@ -487,6 +487,16 @@ s_sum_pcarr2(int n, int **pa) return s_sum_conf_array(*pa, n); }
+int +s_sum_L1_norms(int n, vector_t *vs) +{ + int i; + int sum = 0; + for (i = 0; i < n; ++i) + sum += abs(vs[i].x) + abs(vs[i].y) + abs(vs[i].z); + return sum; +} + void s_stop(void) { @@ -983,6 +993,8 @@ array_tests(void) make_pyramid_doub_carr(4, &dc); ok(check_pyramid_doub_carr(dc), "RPC make_pyramid_doub_carr\n"); free_pyramid_doub_carr(dc); + + ok(sum_L1_norms(2, vs) == 21, "RPC sum_L1_norms\n"); }
static void diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl index c566b8f..c054196 100644 --- a/dlls/rpcrt4/tests/server.idl +++ b/dlls/rpcrt4/tests/server.idl @@ -298,6 +298,7 @@ cpp_quote("#endif") void get_name([in,out] name_t *name);
int sum_pcarr2(int n, [size_is(, n)] int **pa); + int sum_L1_norms(int n, [size_is(n)] vector_t *vs);
void stop(void); } diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c index 2cb8dc9..bb75a0a 100644 --- a/tools/widl/typegen.c +++ b/tools/widl/typegen.c @@ -1535,9 +1535,7 @@ static size_t write_array_tfs(FILE *file, const attr_list_t *attrs, type_t *type has_pointer = TRUE;
align = 0; - size = type_memsize(type, &align); - if (size == 0) /* conformant array */ - size = type_memsize(type->ref, &align); + size = type_memsize((is_conformant_array(type) ? type->ref : type), &align);
start_offset = *typestring_offset; update_tfsoff(type, start_offset, file);