From 9ca1382eaeb8f7defe203d97f199e22d93ccb54b Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 26 Dec 2008 17:20:53 +0100 Subject: [PATCH] widl: Store the size of a pointer in a variable instead of hardcoding the value of the host compiler. --- tools/widl/client.c | 2 ++ tools/widl/proxy.c | 6 ++++-- tools/widl/server.c | 2 ++ tools/widl/typegen.c | 3 ++- tools/widl/widl.c | 2 ++ tools/widl/widl.h | 1 + 6 files changed, 13 insertions(+), 3 deletions(-) diff --git a/tools/widl/client.c b/tools/widl/client.c index 5221e26a62..93bf1fc2c5 100644 --- a/tools/widl/client.c +++ b/tools/widl/client.c @@ -510,6 +510,8 @@ void write_client(const statement_list_t *stmts) if (!client) return; + pointer_size = sizeof(void*); + write_formatstringsdecl(client, indent, stmts, need_stub); expr_eval_routines = write_expr_eval_routines(client, client_token); if (expr_eval_routines) diff --git a/tools/widl/proxy.c b/tools/widl/proxy.c index dc3c1ae201..fdc6cd6f01 100644 --- a/tools/widl/proxy.c +++ b/tools/widl/proxy.c @@ -127,8 +127,6 @@ static void init_proxy(const statement_list_t *stmts) print_proxy( " return (__frame->_StubMsg.dwStubPhase != PROXY_SENDRECEIVE);\n"); print_proxy( "}\n"); print_proxy( "\n"); - write_formatstringsdecl(proxy, indent, stmts, need_proxy); - write_stubdescproto(); } static void clear_output_vars( const var_list_t *args ) @@ -757,6 +755,10 @@ void write_proxies(const statement_list_t *stmts) init_proxy(stmts); if(!proxy) return; + pointer_size = sizeof(void*); + + write_formatstringsdecl(proxy, indent, stmts, need_proxy); + write_stubdescproto(); write_proxy_stmts(stmts, &proc_offset); expr_eval_routines = write_expr_eval_routines(proxy, proxy_token); diff --git a/tools/widl/server.c b/tools/widl/server.c index 9b8edb7bcd..0edee90123 100644 --- a/tools/widl/server.c +++ b/tools/widl/server.c @@ -450,6 +450,8 @@ void write_server(const statement_list_t *stmts) if (!server) return; + pointer_size = sizeof(void*); + write_formatstringsdecl(server, indent, stmts, need_stub); expr_eval_routines = write_expr_eval_routines(server, server_token); if (expr_eval_routines) diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c index 123715c999..a452bdfc51 100644 --- a/tools/widl/typegen.c +++ b/tools/widl/typegen.c @@ -1018,7 +1018,8 @@ size_t type_memsize(const type_t *t, unsigned int *align) } else if (is_ptr(t) || is_conformant_array(t)) { - size = sizeof(void *); + assert( pointer_size ); + size = pointer_size; if (size > *align) *align = size; } else switch (t->type) diff --git a/tools/widl/widl.c b/tools/widl/widl.c index 9b14de20fe..c10f4a133c 100644 --- a/tools/widl/widl.c +++ b/tools/widl/widl.c @@ -132,6 +132,8 @@ FILE *local_stubs; FILE *proxy; FILE *idfile; +size_t pointer_size = 0; + time_t now; enum { diff --git a/tools/widl/widl.h b/tools/widl/widl.h index f08a9ae326..07d886a30a 100644 --- a/tools/widl/widl.h +++ b/tools/widl/widl.h @@ -59,6 +59,7 @@ extern char *server_name; extern char *server_token; extern const char *prefix_client; extern const char *prefix_server; +extern size_t pointer_size; extern time_t now; extern int line_number; -- 2.32.0.93.g670b81a890