Dan Hipschman : widl: Handle all buffer sizes.

Alexandre Julliard julliard at winehq.org
Wed Sep 19 08:16:14 CDT 2007


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

Author: Dan Hipschman <dsh at linux.ucla.edu>
Date:   Tue Sep 18 15:29:26 2007 -0700

widl: Handle all buffer sizes.

---

 tools/widl/typegen.c |   41 +++++++++++++----------------------------
 1 files changed, 13 insertions(+), 28 deletions(-)

diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 573d88b..d821065 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -2176,16 +2176,14 @@ void write_typeformatstring(FILE *file, const ifref_list_t *ifaces, int for_obje
 static unsigned int get_required_buffer_size_type(
     const type_t *type, const char *name, unsigned int *alignment)
 {
-    size_t size = 0;
-
     *alignment = 0;
     if (is_user_type(type))
     {
         const char *uname;
         const type_t *utype = get_user_type(type, &uname);
-        size = get_required_buffer_size_type(utype, uname, alignment);
+        return get_required_buffer_size_type(utype, uname, alignment);
     }
-    else if (!is_ptr(type))
+    else
     {
         switch (type->type)
         {
@@ -2194,16 +2192,14 @@ static unsigned int get_required_buffer_size_type(
         case RPC_FC_USMALL:
         case RPC_FC_SMALL:
             *alignment = 4;
-            size = 1;
-            break;
+            return 1;
 
         case RPC_FC_WCHAR:
         case RPC_FC_USHORT:
         case RPC_FC_SHORT:
         case RPC_FC_ENUM16:
             *alignment = 4;
-            size = 2;
-            break;
+            return 2;
 
         case RPC_FC_ULONG:
         case RPC_FC_LONG:
@@ -2211,14 +2207,12 @@ static unsigned int get_required_buffer_size_type(
         case RPC_FC_FLOAT:
         case RPC_FC_ERROR_STATUS_T:
             *alignment = 4;
-            size = 4;
-            break;
+            return 4;
 
         case RPC_FC_HYPER:
         case RPC_FC_DOUBLE:
             *alignment = 8;
-            size = 8;
-            break;
+            return 8;
 
         case RPC_FC_IGNORE:
         case RPC_FC_BIND_PRIMITIVE:
@@ -2227,6 +2221,7 @@ static unsigned int get_required_buffer_size_type(
         case RPC_FC_STRUCT:
         case RPC_FC_PSTRUCT:
         {
+            size_t size = 0;
             const var_t *field;
             if (!type->fields) return 0;
             LIST_FOR_EACH_ENTRY( field, type->fields, const var_t, entry )
@@ -2235,33 +2230,23 @@ static unsigned int get_required_buffer_size_type(
                 size += get_required_buffer_size_type(field->type, field->name,
                                                       &alignment);
             }
-            break;
+            return size;
         }
 
         case RPC_FC_RP:
-            if (is_base_type( type->ref->type ) || type->ref->type == RPC_FC_STRUCT)
-                size = get_required_buffer_size_type( type->ref, name, alignment );
-            break;
+            return
+                is_base_type( type->ref->type ) || type->ref->type == RPC_FC_STRUCT
+                ? get_required_buffer_size_type( type->ref, name, alignment )
+                : 0;
 
         case RPC_FC_SMFARRAY:
         case RPC_FC_LGFARRAY:
-            size = type->dim * get_required_buffer_size_type(type->ref, name, alignment);
-            break;
-
-        case RPC_FC_SMVARRAY:
-        case RPC_FC_LGVARRAY:
-        case RPC_FC_CARRAY:
-        case RPC_FC_CVARRAY:
-        case RPC_FC_BOGUS_ARRAY:
-            size = 0;
-            break;
+            return type->dim * get_required_buffer_size_type(type->ref, name, alignment);
 
         default:
-            error("get_required_buffer_size: Unknown/unsupported type: %s (0x%02x)\n", name, type->type);
             return 0;
         }
     }
-    return size;
 }
 
 static unsigned int get_required_buffer_size(const var_t *var, unsigned int *alignment, enum pass pass)




More information about the wine-cvs mailing list