Alexandre Julliard : widl: Export a function to compute the proc format string size for a function.

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


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

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

widl: Export a function to compute the proc format string size for a function.

---

 tools/widl/server.c  |   10 +---------
 tools/widl/typegen.c |   37 +++++++++++++++++++++----------------
 tools/widl/typegen.h |    1 +
 3 files changed, 23 insertions(+), 25 deletions(-)

diff --git a/tools/widl/server.c b/tools/widl/server.c
index 56c2761..75b9647 100644
--- a/tools/widl/server.c
+++ b/tools/widl/server.c
@@ -270,15 +270,7 @@ static void write_function_stubs(type_t
         fprintf(server, "\n");
 
         /* update proc_offset */
-        if (func->args)
-        {
-            LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
-                *proc_offset += get_size_procformatstring_var(var);
-        }
-        if (!is_void(def->type, NULL))
-            *proc_offset += get_size_procformatstring_var(def);
-        else
-            *proc_offset += 2; /* FC_END and FC_PAD */
+        *proc_offset += get_size_procformatstring_func( func );
     }
 }
 
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 1e6c2da..ac3ab94 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -1971,6 +1971,25 @@ size_t get_size_procformatstring_var(con
 }
 
 
+size_t get_size_procformatstring_func(const func_t *func)
+{
+    const var_t *var;
+    size_t size = 0;
+
+    /* argument list size */
+    if (func->args)
+        LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
+            size += get_size_procformatstring_var(var);
+
+    /* return value size */
+    if (is_void(func->def->type, NULL))
+        size += 2; /* FC_END and FC_PAD */
+    else
+        size += get_size_procformatstring_var(func->def);
+
+    return size;
+}
+
 size_t get_size_typeformatstring_var(const var_t *var)
 {
     unsigned int type_offset = 0;
@@ -1983,7 +2002,6 @@ size_t get_size_procformatstring(const i
     const ifref_t *iface;
     size_t size = 1;
     const func_t *func;
-    const var_t *var;
 
     if (ifaces) LIST_FOR_EACH_ENTRY( iface, ifaces, const ifref_t, entry )
     {
@@ -1991,22 +2009,9 @@ size_t get_size_procformatstring(const i
             continue;
 
         if (iface->iface->funcs)
-        {
             LIST_FOR_EACH_ENTRY( func, iface->iface->funcs, const func_t, entry )
-            {
-                /* argument list size */
-                if (func->args)
-                    LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry )
-                        size += get_size_procformatstring_var(var);
-
-                var = func->def;
-                /* return value size */
-                if (is_void(var->type, NULL))
-                    size += 2;
-                else
-                    size += get_size_procformatstring_var(var);
-            }
-        }
+                if (!is_local(func->def->attrs))
+                    size += get_size_procformatstring_func( func );
     }
     return size;
 }
diff --git a/tools/widl/typegen.h b/tools/widl/typegen.h
index dcbe4d3..7ebf6d9 100644
--- a/tools/widl/typegen.h
+++ b/tools/widl/typegen.h
@@ -42,6 +42,7 @@ size_t get_type_memsize(const type_t *ty
 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);
+size_t get_size_procformatstring_func(const func_t *func);
 size_t get_size_typeformatstring_var(const var_t *var);
 size_t get_size_procformatstring(const ifref_list_t *ifaces, int for_objects);
 size_t get_size_typeformatstring(const ifref_list_t *ifaces, int for_objects);




More information about the wine-cvs mailing list