widl: Don't rely on type_memsize to return 0 for all conformant arrays.
Dan Hipschman
dsh at linux.ucla.edu
Mon Nov 5 19:23:26 CST 2007
This fixes a bug needed to get dcom_p.c working.
---
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);
More information about the wine-patches
mailing list