widl: Write struct fields as signed fields.
authorMichael Karcher <wine@mkarcher.dialup.fu-berlin.de>
Wed, 7 Jan 2009 23:21:42 +0000 (00:21 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Thu, 8 Jan 2009 13:11:35 +0000 (14:11 +0100)
tools/widl/typegen.c

index d3d5cb302d76fcbb5769ddc4e38274945917d1e2..7d2b751d45b383b2fbccb820e418178bdcf0d50a 100644 (file)
@@ -1271,6 +1271,21 @@ static void write_user_tfs(FILE *file, type_t *type, unsigned int *tfsoff)
     *tfsoff += 2;
 }
 
+static unsigned char inline make_signed(unsigned char fc)
+{
+    switch(fc)
+    {
+        case RPC_FC_USMALL:
+            return RPC_FC_SMALL;
+        case RPC_FC_USHORT:
+            return RPC_FC_SHORT;
+        case RPC_FC_ULONG:
+            return RPC_FC_LONG;
+        default:
+            return fc;
+    }
+}
+
 static void write_member_type(FILE *file, const type_t *cont,
                               const attr_list_t *attrs, const type_t *type,
                               unsigned int *corroff, unsigned int *tfsoff)
@@ -1306,7 +1321,7 @@ static void write_member_type(FILE *file, const type_t *cont,
         print_file(file, 2, "0x%x,\t/* %s */\n", fc, string_of_type(fc));
         *tfsoff += 1;
     }
-    else if (!write_base_type(file, type->type, tfsoff))
+    else if (!write_base_type(file, make_signed(type->type), tfsoff))
         error("Unsupported member type 0x%x\n", type->type);
 }