Alexandre Julliard : widl: Move initialization of the stub buffer size into write_remoting_arguments( ).

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jan 25 06:12:07 CST 2007


Module: wine
Branch: master
Commit: 6655071a3feca80835eaf2b8274d1765915471c9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6655071a3feca80835eaf2b8274d1765915471c9

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Jan 24 20:02:05 2007 +0100

widl: Move initialization of the stub buffer size into write_remoting_arguments().

---

 tools/widl/client.c  |   23 -----------------------
 tools/widl/server.c  |   24 ------------------------
 tools/widl/typegen.c |   30 +++++++++++++++++++++++++++++-
 tools/widl/typegen.h |    1 -
 4 files changed, 29 insertions(+), 49 deletions(-)

diff --git a/tools/widl/client.c b/tools/widl/client.c
index 60eb27d..5fcffeb 100644
--- a/tools/widl/client.c
+++ b/tools/widl/client.c
@@ -59,24 +59,6 @@ static int print_client( const char *for
 }
 
 
-static void print_message_buffer_size(const func_t *func)
-{
-    unsigned int total_size = 0;
-
-    if (func->args)
-    {
-        const var_t *var;
-        LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
-        {
-            unsigned int alignment;
-
-            total_size += get_required_buffer_size(var, &alignment, PASS_IN);
-            total_size += alignment;
-        }
-    }
-    fprintf(client, " %u", total_size);
-}
-
 static void check_pointers(const func_t *func)
 {
     const var_t *var;
@@ -189,11 +171,6 @@ static void write_function_stubs(type_t
             fprintf(client, "\n");
         }
 
-        /* emit the message buffer size */
-        print_client("_StubMsg.BufferLength =");
-        print_message_buffer_size(func);
-        fprintf(client, ";\n");
-
         type_offset_func = *type_offset;
         write_remoting_arguments(client, indent, func, &type_offset_func, PASS_IN, PHASE_BUFFERSIZE);
 
diff --git a/tools/widl/server.c b/tools/widl/server.c
index 3719aae..56c2761 100644
--- a/tools/widl/server.c
+++ b/tools/widl/server.c
@@ -88,7 +88,6 @@ static void write_function_stubs(type_t
     LIST_FOR_EACH_ENTRY( func, iface->funcs, const func_t, entry )
     {
         const var_t *def = func->def;
-        unsigned long buffer_size = 0;
         unsigned int type_offset_func;
 
         /* check for a defined binding handle */
@@ -222,31 +221,8 @@ static void write_function_stubs(type_t
             fprintf(server, "();\n");
         }
 
-        if (func->args)
-        {
-            LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
-            {
-                if (is_attr(var->attrs, ATTR_OUT))
-                {
-                    unsigned int alignment;
-                    buffer_size += get_required_buffer_size(var, &alignment, PASS_OUT);
-                    buffer_size += alignment;
-                }
-            }
-        }
-
-        if (!is_void(def->type, NULL))
-        {
-            unsigned int alignment;
-            buffer_size += get_required_buffer_size(def, &alignment, PASS_RETURN);
-            buffer_size += alignment;
-        }
-
         if (has_out_arg_or_return(func))
         {
-            fprintf(server, "\n");
-            print_server("_StubMsg.BufferLength = %u;\n", buffer_size);
-
             type_offset_func = *type_offset;
             write_remoting_arguments(server, indent, func, &type_offset_func, PASS_OUT, PHASE_BUFFERSIZE);
 
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index def9d4b..1e6c2da 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -1551,7 +1551,7 @@ static unsigned int get_required_buffer_
     return 0;
 }
 
-unsigned int get_required_buffer_size(const var_t *var, unsigned int *alignment, enum pass pass)
+static unsigned int get_required_buffer_size(const var_t *var, unsigned int *alignment, enum pass pass)
 {
     expr_t *size_is = get_attrp(var->attrs, ATTR_SIZEIS);
     int has_size = (size_is && (size_is->type != EXPR_VOID));
@@ -1621,6 +1621,28 @@ unsigned int get_required_buffer_size(co
     }
 }
 
+static unsigned int get_function_buffer_size( const func_t *func, enum pass pass )
+{
+    const var_t *var;
+    unsigned int total_size = 0, alignment;
+
+    if (func->args)
+    {
+        LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
+        {
+            total_size += get_required_buffer_size(var, &alignment, pass);
+            total_size += alignment;
+        }
+    }
+
+    if (pass == PASS_OUT && !is_void(func->def->type, NULL))
+    {
+        total_size += get_required_buffer_size(func->def, &alignment, PASS_RETURN);
+        total_size += alignment;
+    }
+    return total_size;
+}
+
 static void print_phase_function(FILE *file, int indent, const char *type,
                                  enum remoting_phase phase,
                                  const char *varname, unsigned int type_offset)
@@ -1767,6 +1789,12 @@ void write_remoting_arguments(FILE *file
     if (!func->args)
         return;
 
+    if (phase == PHASE_BUFFERSIZE)
+    {
+        unsigned int size = get_function_buffer_size( func, pass );
+        print_file(file, indent, "_StubMsg.BufferLength = %u;\n", size);
+    }
+
     LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
     {
         const type_t *type = var->type;
diff --git a/tools/widl/typegen.h b/tools/widl/typegen.h
index 63d2626..dcbe4d3 100644
--- a/tools/widl/typegen.h
+++ b/tools/widl/typegen.h
@@ -39,7 +39,6 @@ void write_formatstringsdecl(FILE *f, in
 void write_procformatstring(FILE *file, const ifref_list_t *ifaces, int for_objects);
 void write_typeformatstring(FILE *file, const ifref_list_t *ifaces, int for_objects);
 size_t get_type_memsize(const type_t *type);
-unsigned int get_required_buffer_size(const var_t *var, unsigned int *alignment, enum pass pass);
 void print_phase_basetype(FILE *file, int indent, enum remoting_phase phase, enum pass pass, const var_t *var, const char *varname);
 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);




More information about the wine-cvs mailing list