Module: wine Branch: master Commit: 04484a4013b87574a9f5ac577f57cab28d2fa84b URL: http://source.winehq.org/git/wine.git/?a=commit;h=04484a4013b87574a9f5ac577f...
Author: Rob Shearman robertshearman@gmail.com Date: Sat Feb 14 18:11:35 2009 +0000
widl: Call Pointer function for freeing non-conformant strings and for all phases for returned non-conformant strings, as is done for conformant strings.
Also call Pointer functions for any string that isn't a reference pointer.
---
tools/widl/typegen.c | 17 +++++++++++------ 1 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c index 5dd2cbe..f1a00e6 100644 --- a/tools/widl/typegen.c +++ b/tools/widl/typegen.c @@ -3146,14 +3146,19 @@ static void write_remoting_arg(FILE *file, int indent, const var_t *func, const } else if (is_string_type(var->attrs, var->type)) { - if (is_array(type) && !is_conformant_array(type)) - print_phase_function(file, indent, "NonConformantString", local_var_prefix, - phase, var, start_offset); + if (phase == PHASE_FREE || pass == PASS_RETURN || + pointer_type != RPC_FC_RP) + { + unsigned int ptr_start_offset = (start_offset - (is_conformant_array(type) ? 4 : 2)); + print_phase_function(file, indent, "Pointer", local_var_prefix, + phase, var, ptr_start_offset); + } else { - if (phase == PHASE_FREE || pass == PASS_RETURN || pointer_type == RPC_FC_UP) - print_phase_function(file, indent, "Pointer", local_var_prefix, phase, var, - start_offset - (is_conformant_array(type) ? 4 : 2)); + if (is_array(type) && !is_conformant_array(type)) + print_phase_function(file, indent, "NonConformantString", + local_var_prefix, phase, var, + start_offset); else print_phase_function(file, indent, "ConformantString", local_var_prefix, phase, var, start_offset);