widl: Write pointer calls for all non-basetype pointer parameters to functions.
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c index 673eca2..e58bc17 100644 --- a/tools/widl/typegen.c +++ b/tools/widl/typegen.c
@@ -1163,8 +1163,12 @@ const type_t *type = var->type; int ptr_level = var->ptr_level; + chat("write_typeformatstring_var: %s\n", var->name); + while (TRUE) { + chat("write_typeformatstring: type->type = 0x%x, type->name = %s, ptr_level = %d\n", type->type, type->name, ptr_level); + if (is_string_type(var->attrs, ptr_level, var->array)) return write_string_tfs(file, var->attrs, type, var->array, var->name, typeformat_offset); @@ -1646,7 +1650,7 @@ } else { - if (pointer_type == RPC_FC_RP) + if ((var->ptr_level == 1) && (pointer_type == RPC_FC_RP) && is_base_type(var->type->type)) { unsigned int size; switch (var->type->type) @@ -1711,7 +1715,7 @@ write_type(file, var->type, NULL, var->tname); fprintf(file, ");\n"); } - else if (pointer_type == RPC_FC_UP) + else { print_file(file, indent, "NdrPointer%s(\n", function_from_phase(phase)); indent++; @@ -1723,10 +1727,6 @@ print_file(file, indent, "(unsigned char *)0);\n"); indent--; } - else if (pointer_type == RPC_FC_FP) - { - error("write_remoting_arguments: Unimplemented for full pointers to base types\n"); - } } fprintf(file, "\n"); }