https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d2540090d30effc6961bf7...
commit d2540090d30effc6961bf713625baf521c6123f0 Author: Eric Kohl eric.kohl@reactos.org AuthorDate: Sun Dec 15 18:21:11 2019 +0100 Commit: Eric Kohl eric.kohl@reactos.org CommitDate: Sun Dec 15 18:21:11 2019 +0100
[WIDL] Fix type offset calculation for toplevel pointers to non-basetypes.
WIDL used the wrong type information when a pointer to a non-basetype is used as a functions parameter. For example, a 'wchar_t**' would be treated as a 'wchar_t*'.
This patch will be sent upstream. --- sdk/tools/widl/typegen.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sdk/tools/widl/typegen.c b/sdk/tools/widl/typegen.c index 0bca062ab4b..4a791465821 100644 --- a/sdk/tools/widl/typegen.c +++ b/sdk/tools/widl/typegen.c @@ -3639,6 +3639,7 @@ static unsigned int write_type_tfs(FILE *file, int indent, case TGT_POINTER: { enum type_context ref_context; + unsigned int toplevel_offset = *typeformat_offset; type_t *ref = type_pointer_get_ref(type);
if (context == TYPE_CONTEXT_TOPLEVELPARAM) @@ -3656,7 +3657,7 @@ static unsigned int write_type_tfs(FILE *file, int indent, offset = write_type_tfs(file, indent, attrs, ref, name, ref_context, typeformat_offset); if (context == TYPE_CONTEXT_CONTAINER_NO_POINTERS) return 0; - return offset; + return (context == TYPE_CONTEXT_TOPLEVELPARAM) ? toplevel_offset : offset; }
offset = write_type_tfs( file, indent, attrs, type_pointer_get_ref(type), name,