Alexandre Julliard : widl: Use write_pointer_description_offsets() to output no_repeat descriptors for consistency.
Alexandre Julliard
julliard at winehq.org
Fri Oct 16 11:26:10 CDT 2009
Module: wine
Branch: master
Commit: 942ec30a4d8e2880b351f2396562e4b3da4bebe8
URL: http://source.winehq.org/git/wine.git/?a=commit;h=942ec30a4d8e2880b351f2396562e4b3da4bebe8
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri Oct 16 15:00:27 2009 +0200
widl: Use write_pointer_description_offsets() to output no_repeat descriptors for consistency.
---
tools/widl/typegen.c | 133 +++++++++++++++++++------------------------------
1 files changed, 52 insertions(+), 81 deletions(-)
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index b868651..bcf2bf5 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -1614,87 +1614,6 @@ static void write_descriptors(FILE *file, type_t *type, unsigned int *tfsoff)
}
}
-static int write_no_repeat_pointer_descriptions(
- FILE *file, const attr_list_t *attrs, type_t *type,
- unsigned int *offset_in_memory, unsigned int *offset_in_buffer,
- unsigned int *typestring_offset)
-{
- int written = 0;
- unsigned int align;
-
- if (is_ptr(type) ||
- (is_conformant_array(type) && type_array_is_decl_as_ptr(type)))
- {
- unsigned int memsize;
-
- print_file(file, 2, "0x%02x, /* FC_NO_REPEAT */\n", RPC_FC_NO_REPEAT);
- print_file(file, 2, "0x%02x, /* FC_PAD */\n", RPC_FC_PAD);
-
- /* pointer instance */
- print_file(file, 2, "NdrFcShort(0x%hx),\t/* Memory offset = %d */\n", *offset_in_memory, *offset_in_memory);
- print_file(file, 2, "NdrFcShort(0x%hx),\t/* Buffer offset = %d */\n", *offset_in_buffer, *offset_in_buffer);
- *typestring_offset += 6;
-
- if (is_ptr(type))
- {
- if (is_string_type(attrs, type))
- write_string_tfs(file, attrs, type, FALSE, NULL, typestring_offset);
- else
- write_pointer_tfs(file, attrs, type, FALSE, typestring_offset);
- }
- else
- {
- unsigned int offset = type->typestring_offset;
- /* skip over the pointer that is written for strings, since a
- * pointer has to be written in-place here */
- if (is_string_type(attrs, type))
- offset += 4;
- write_nonsimple_pointer(file, attrs, type, FALSE, offset, typestring_offset);
- }
-
- align = 0;
- memsize = type_memsize(type, &align);
- *offset_in_memory += memsize;
- /* increment these separately as in the case of conformant (varying)
- * structures these start at different values */
- *offset_in_buffer += memsize;
-
- return 1;
- }
-
- if (is_non_complex_struct(type))
- {
- const var_t *v;
- LIST_FOR_EACH_ENTRY( v, type_struct_get_fields(type), const var_t, entry )
- {
- if (offset_in_memory && offset_in_buffer)
- {
- unsigned int padding;
- align = 0;
- type_memsize(v->type, &align);
- padding = ROUNDING(*offset_in_memory, align);
- *offset_in_memory += padding;
- *offset_in_buffer += padding;
- }
- written += write_no_repeat_pointer_descriptions(
- file, v->attrs, v->type,
- offset_in_memory, offset_in_buffer, typestring_offset);
- }
- }
- else
- {
- unsigned int memsize;
- align = 0;
- memsize = type_memsize(type, &align);
- *offset_in_memory += memsize;
- /* increment these separately as in the case of conformant (varying)
- * structures these start at different values */
- *offset_in_buffer += memsize;
- }
-
- return written;
-}
-
static int write_pointer_description_offsets(
FILE *file, const attr_list_t *attrs, type_t *type,
unsigned int *offset_in_memory, unsigned int *offset_in_buffer,
@@ -1793,6 +1712,58 @@ static int write_pointer_description_offsets(
return written;
}
+static int write_no_repeat_pointer_descriptions(
+ FILE *file, const attr_list_t *attrs, type_t *type,
+ unsigned int *offset_in_memory, unsigned int *offset_in_buffer,
+ unsigned int *typestring_offset)
+{
+ int written = 0;
+ unsigned int align;
+
+ if (is_ptr(type) ||
+ (is_conformant_array(type) && type_array_is_decl_as_ptr(type)))
+ {
+ print_file(file, 2, "0x%02x, /* FC_NO_REPEAT */\n", RPC_FC_NO_REPEAT);
+ print_file(file, 2, "0x%02x, /* FC_PAD */\n", RPC_FC_PAD);
+ *typestring_offset += 2;
+
+ return write_pointer_description_offsets(file, attrs, type,
+ offset_in_memory, offset_in_buffer, typestring_offset);
+ }
+
+ if (is_non_complex_struct(type))
+ {
+ const var_t *v;
+ LIST_FOR_EACH_ENTRY( v, type_struct_get_fields(type), const var_t, entry )
+ {
+ if (offset_in_memory && offset_in_buffer)
+ {
+ unsigned int padding;
+ align = 0;
+ type_memsize(v->type, &align);
+ padding = ROUNDING(*offset_in_memory, align);
+ *offset_in_memory += padding;
+ *offset_in_buffer += padding;
+ }
+ written += write_no_repeat_pointer_descriptions(
+ file, v->attrs, v->type,
+ offset_in_memory, offset_in_buffer, typestring_offset);
+ }
+ }
+ else
+ {
+ unsigned int memsize;
+ align = 0;
+ memsize = type_memsize(type, &align);
+ *offset_in_memory += memsize;
+ /* increment these separately as in the case of conformant (varying)
+ * structures these start at different values */
+ *offset_in_buffer += memsize;
+ }
+
+ return written;
+}
+
/* Note: if file is NULL return value is number of pointers to write, else
* it is the number of type format characters written */
static int write_fixed_array_pointer_descriptions(
More information about the wine-cvs
mailing list