Alexandre Julliard : widl: Struct alignment should be the largest alignment of all the struct members .

Alexandre Julliard julliard at winehq.org
Fri Jul 3 09:31:09 CDT 2009


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Jul  3 12:02:07 2009 +0200

widl: Struct alignment should be the largest alignment of all the struct members.

---

 tools/widl/typegen.c |   17 +++++------------
 1 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 861dada..5abf575 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -1083,7 +1083,6 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *structure,
 
 static unsigned int fields_memsize(const var_list_t *fields, unsigned int *align)
 {
-    int have_align = FALSE;
     unsigned int size = 0;
     const var_t *v;
 
@@ -1092,11 +1091,7 @@ static unsigned int fields_memsize(const var_list_t *fields, unsigned int *align
     {
         unsigned int falign = 0;
         unsigned int fsize = type_memsize(v->type, &falign);
-        if (!have_align)
-        {
-            *align = falign;
-            have_align = TRUE;
-        }
+        if (*align < falign) *align = falign;
         size = ROUND_SIZE(size, falign);
         size += fsize;
     }
@@ -1128,7 +1123,7 @@ static unsigned int union_memsize(const var_list_t *fields, unsigned int *pmaxa)
 int get_padding(const var_list_t *fields)
 {
     unsigned short offset = 0;
-    int salign = -1;
+    unsigned int salign = 1;
     const var_t *f;
 
     if (!fields)
@@ -1139,8 +1134,7 @@ int get_padding(const var_list_t *fields)
         type_t *ft = f->type;
         unsigned int align = 0;
         unsigned int size = type_memsize(ft, &align);
-        if (salign == -1)
-            salign = align;
+        if (align > salign) salign = align;
         offset = ROUND_SIZE(offset, align);
         offset += size;
     }
@@ -2202,7 +2196,7 @@ static void write_struct_members(FILE *file, const type_t *type,
 {
     const var_t *field;
     unsigned short offset = 0;
-    int salign = -1;
+    unsigned int salign = 1;
     int padding;
     var_list_t *fields = type_struct_get_fields(type);
 
@@ -2213,8 +2207,7 @@ static void write_struct_members(FILE *file, const type_t *type,
         {
             unsigned int align = 0;
             unsigned int size = type_memsize(ft, &align);
-            if (salign == -1)
-                salign = align;
+            if (salign < align) salign = align;
             if ((align - 1) & offset)
             {
                 unsigned char fc = 0;




More information about the wine-cvs mailing list