[WIDL 1/2] Fix format string size calculation (resend)
Eric Kohl
eric.kohl at t-online.de
Wed Mar 22 08:21:19 CST 2006
ChangeLog:
Eric Kohl <eric.kohl at t-online.de>
- Move proc format string size calculation from client.c and server.c to
typegen.c.
- Implement type format string size calculation.
-------------- next part --------------
Index: tools/widl/client.c
===================================================================
RCS file: /home/wine/wine/tools/widl/client.c,v
retrieving revision 1.25
diff -u -r1.25 client.c
--- tools/widl/client.c 18 Mar 2006 18:52:37 -0000 1.25
+++ tools/widl/client.c 19 Mar 2006 02:17:50 -0000
@@ -1,7 +1,7 @@
/*
* IDL Compiler
*
- * Copyright 2005 Eric Kohl
+ * Copyright 2005-2006 Eric Kohl
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -384,35 +384,11 @@
static void write_formatstringsdecl(type_t *iface)
{
- int byte_count = 1;
+ print_client("#define TYPE_FORMAT_STRING_SIZE %d\n",
+ get_size_typeformatstring(iface));
- print_client("#define TYPE_FORMAT_STRING_SIZE %d\n", 3); /* FIXME */
-
- /* determine the proc format string size */
- if (iface->funcs)
- {
- func_t *func = iface->funcs;
- while (NEXT_LINK(func)) func = NEXT_LINK(func);
- while (func)
- {
- /* argument list size */
- if (func->args)
- {
- var_t *var = func->args;
- while (NEXT_LINK(var)) var = NEXT_LINK(var);
- while (var)
- {
- byte_count += 2; /* FIXME: determine real size */
- var = PREV_LINK(var);
- }
- }
-
- /* return value size */
- byte_count += 2; /* FIXME: determine real size */
- func = PREV_LINK(func);
- }
- }
- print_client("#define PROC_FORMAT_STRING_SIZE %d\n", byte_count);
+ print_client("#define PROC_FORMAT_STRING_SIZE %d\n",
+ get_size_procformatstring(iface));
fprintf(client, "\n");
write_formatdesc("TYPE");
Index: tools/widl/server.c
===================================================================
RCS file: /home/wine/wine/tools/widl/server.c,v
retrieving revision 1.28
diff -u -r1.28 server.c
--- tools/widl/server.c 18 Mar 2006 18:52:38 -0000 1.28
+++ tools/widl/server.c 19 Mar 2006 02:17:54 -0000
@@ -1,7 +1,7 @@
/*
* IDL Compiler
*
- * Copyright 2005 Eric Kohl
+ * Copyright 2005-2006 Eric Kohl
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -472,35 +472,11 @@
static void write_formatstringsdecl(type_t *iface)
{
- int byte_count = 1;
-
- print_server("#define TYPE_FORMAT_STRING_SIZE %d\n", 3); /* FIXME */
+ print_server("#define TYPE_FORMAT_STRING_SIZE %d\n",
+ get_size_typeformatstring(iface));
- /* determine the proc format string size */
- if (iface->funcs)
- {
- func_t *func = iface->funcs;
- while (NEXT_LINK(func)) func = NEXT_LINK(func);
- while (func)
- {
- /* argument list size */
- if (func->args)
- {
- var_t *var = func->args;
- while (NEXT_LINK(var)) var = NEXT_LINK(var);
- while (var)
- {
- byte_count += 2; /* FIXME: determine real size */
- var = PREV_LINK(var);
- }
- }
-
- /* return value size */
- byte_count += 2; /* FIXME: determine real size */
- func = PREV_LINK(func);
- }
- }
- print_server("#define PROC_FORMAT_STRING_SIZE %d\n", byte_count);
+ print_server("#define PROC_FORMAT_STRING_SIZE %d\n",
+ get_size_procformatstring(iface));
fprintf(server, "\n");
write_formatdesc("TYPE");
Index: tools/widl/typegen.c
===================================================================
RCS file: /home/wine/wine/tools/widl/typegen.c,v
retrieving revision 1.63
diff -u -r1.63 typegen.c
--- tools/widl/typegen.c 22 Feb 2006 21:31:54 -0000 1.63
+++ tools/widl/typegen.c 19 Mar 2006 02:17:57 -0000
@@ -1,7 +1,7 @@
/*
* Format String Generator for IDL Compiler
*
- * Copyright 2005 Eric Kohl
+ * Copyright 2005-2006 Eric Kohl
* Copyright 2005-2006 Robert Shearman
*
* This library is free software; you can redistribute it and/or
@@ -1580,6 +1580,68 @@
return type_offset;
}
+size_t get_size_procformatstring(const type_t *iface)
+{
+ size_t size = 1;
+ func_t *func;
+ var_t *var;
+
+ if (iface->funcs)
+ {
+ func = iface->funcs;
+ while (NEXT_LINK(func)) func = NEXT_LINK(func);
+ while (func)
+ {
+ /* argument list size */
+ if (func->args)
+ {
+ var = func->args;
+ while (NEXT_LINK(var)) var = NEXT_LINK(var);
+ while (var)
+ {
+ size += get_size_procformatstring_var(var);
+ var = PREV_LINK(var);
+ }
+ }
+
+ /* return value size */
+ size += 2; /* FIXME: determine real size */
+ func = PREV_LINK(func);
+ }
+ }
+ return size;
+}
+
+size_t get_size_typeformatstring(const type_t *iface)
+{
+ size_t size = 3;
+ func_t *func;
+ var_t *var;
+
+ if (iface->funcs)
+ {
+ func = iface->funcs;
+ while (NEXT_LINK(func)) func = NEXT_LINK(func);
+ while (func)
+ {
+ /* argument list size */
+ if (func->args)
+ {
+ var = func->args;
+ while (NEXT_LINK(var)) var = NEXT_LINK(var);
+ while (var)
+ {
+ size += get_size_typeformatstring_var(var);
+ var = PREV_LINK(var);
+ }
+ }
+
+ func = PREV_LINK(func);
+ }
+ }
+ return size;
+}
+
static void write_struct_expr(FILE *h, const expr_t *e, int brackets,
const var_t *fields, const char *structvar)
{
Index: tools/widl/typegen.h
===================================================================
RCS file: /home/wine/wine/tools/widl/typegen.h,v
retrieving revision 1.10
diff -u -r1.10 typegen.h
--- tools/widl/typegen.h 7 Feb 2006 12:09:51 -0000 1.10
+++ tools/widl/typegen.h 19 Mar 2006 02:17:57 -0000
@@ -1,7 +1,7 @@
/*
* Format String Generator for IDL Compiler
*
- * Copyright 2005 Eric Kohl
+ * Copyright 2005-2006 Eric Kohl
* Copyright 2005 Robert Shearman
*
* This library is free software; you can redistribute it and/or
@@ -41,5 +41,7 @@
void write_remoting_arguments(FILE *file, int indent, const func_t *func, unsigned int *type_offset, enum pass pass, enum remoting_phase phase);
size_t get_size_procformatstring_var(const var_t *var);
size_t get_size_typeformatstring_var(const var_t *var);
+size_t get_size_procformatstring(const type_t *iface);
+size_t get_size_typeformatstring(const type_t *iface);
int write_expr_eval_routines(FILE *file, const char *iface);
void write_expr_eval_routine_list(FILE *file, const char *iface);
More information about the wine-patches
mailing list