From a9bf69097e60e7b57ec9f2147960324499b31410 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Wed, 24 Apr 2024 07:57:47 +1000 Subject: [PATCH] Rebase against d07019e4d174fd1b5d8b74ff2a36e900c07d96d7. --- ...d-implicit-cast-of-interface-pointer.patch | 8 +- ...tic-dispid-generation-scheme-better-.patch | 92 ----------- ...ary-block-index-right-after-the-Comp.patch | 105 ------------- ...est-bit-in-the-param-name-to-indicat.patch | 45 ------ ...-for-function-parameter-flags-to-SLT.patch | 146 ------------------ staging/upstream-commit | 2 +- 6 files changed, 5 insertions(+), 393 deletions(-) delete mode 100644 patches/widl-SLTG_Typelib_Support/0015-widl-Make-automatic-dispid-generation-scheme-better-.patch delete mode 100644 patches/widl-SLTG_Typelib_Support/0016-widl-Create-library-block-index-right-after-the-Comp.patch delete mode 100644 patches/widl-SLTG_Typelib_Support/0020-widl-Set-the-lowest-bit-in-the-param-name-to-indicat.patch delete mode 100644 patches/widl-SLTG_Typelib_Support/0022-widl-Add-support-for-function-parameter-flags-to-SLT.patch diff --git a/patches/Compiler_Warnings/0003-d2d1-Avoid-implicit-cast-of-interface-pointer.patch b/patches/Compiler_Warnings/0003-d2d1-Avoid-implicit-cast-of-interface-pointer.patch index cf69dc9f..4474420f 100644 --- a/patches/Compiler_Warnings/0003-d2d1-Avoid-implicit-cast-of-interface-pointer.patch +++ b/patches/Compiler_Warnings/0003-d2d1-Avoid-implicit-cast-of-interface-pointer.patch @@ -1,4 +1,4 @@ -From 683fab1d88342c11a52ac3b919964837e6f36823 Mon Sep 17 00:00:00 2001 +From ef7171d2eb01b4b8aaf8c4c608ceebd698d96e3c Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Tue, 22 Mar 2016 21:54:26 +0100 Subject: [PATCH] d2d1: Avoid implicit cast of interface pointer. @@ -66,15 +66,15 @@ index 75cd72b5b9f..314123373b7 100644 static HRESULT STDMETHODCALLTYPE d2d_bitmap_brush_QueryInterface(ID2D1BitmapBrush1 *iface, diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h -index dced9847390..e86e1945bdd 100644 +index c0ac5ba9a44..e171c1c6bd8 100644 --- a/dlls/d2d1/d2d1_private.h +++ b/dlls/d2d1/d2d1_private.h @@ -697,7 +697,7 @@ struct d2d_factory static inline struct d2d_factory *unsafe_impl_from_ID2D1Factory(ID2D1Factory *iface) { -- return CONTAINING_RECORD(iface, struct d2d_factory, ID2D1Factory3_iface); -+ return CONTAINING_RECORD((ID2D1Factory3*)iface, struct d2d_factory, ID2D1Factory3_iface); +- return CONTAINING_RECORD(iface, struct d2d_factory, ID2D1Factory7_iface); ++ return CONTAINING_RECORD((ID2D1Factory7*)iface, struct d2d_factory, ID2D1Factory7_iface); } void d2d_effects_init_builtins(struct d2d_factory *factory); diff --git a/patches/widl-SLTG_Typelib_Support/0015-widl-Make-automatic-dispid-generation-scheme-better-.patch b/patches/widl-SLTG_Typelib_Support/0015-widl-Make-automatic-dispid-generation-scheme-better-.patch deleted file mode 100644 index c0b88474..00000000 --- a/patches/widl-SLTG_Typelib_Support/0015-widl-Make-automatic-dispid-generation-scheme-better-.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 547416b9ea25c0aa2841b36ed0332304ac70d568 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Wed, 20 Jan 2016 11:04:00 +0800 -Subject: widl: Make automatic dispid generation scheme better match what midl - does. - ---- - tools/widl/write_sltg.c | 16 +++++++++------- - 1 file changed, 9 insertions(+), 7 deletions(-) - -diff --git a/tools/widl/write_sltg.c b/tools/widl/write_sltg.c -index c8a8cfb..ffecb59 100644 ---- a/tools/widl/write_sltg.c -+++ b/tools/widl/write_sltg.c -@@ -1087,11 +1087,9 @@ static importinfo_t *find_importinfo(typelib_t *typelib, const char *name) - - static int get_func_flags(const var_t *func, int *dispid, int *invokekind, int *helpcontext, const char **helpstring) - { -- static int dispid_base = 0x60000000; - const attr_t *attr; - int flags; - -- *dispid = dispid_base++; - *invokekind = 1 /* INVOKE_FUNC */; - *helpcontext = -2; - *helpstring = NULL; -@@ -1169,17 +1167,17 @@ static int get_func_flags(const var_t *func, int *dispid, int *invokekind, int * - } - - static int add_func_desc(struct sltg_typelib *typelib, struct sltg_data *data, var_t *func, -- int idx, short base_offset, struct sltg_hrefmap *hrefmap) -+ int idx, int dispid, short base_offset, struct sltg_hrefmap *hrefmap) - { - struct sltg_data ret_data, *arg_data; - int arg_count = 0, arg_data_size, optional = 0, defaults = 0, old_size; -- int funcflags = 0, dispid, invokekind = 1 /* INVOKE_FUNC */, helpcontext; -+ int funcflags = 0, invokekind = 1 /* INVOKE_FUNC */, helpcontext; - const char *helpstring; - const var_t *arg; - short ret_desc_offset, *arg_desc_offset, arg_offset; - struct sltg_function func_desc; - -- chat("add_func_desc: %s, idx %#x\n", func->name, idx); -+ chat("add_func_desc: %s, idx %#x, dispid %#x\n", func->name, idx, dispid); - - old_size = data->size; - -@@ -1360,6 +1358,7 @@ static void add_interface_typeinfo(struct sltg_typelib *typelib, type_t *iface) - struct sltg_tail tail; - int member_offset, base_offset, func_data_size, i; - int func_count, inherited_func_count = 0; -+ int dispid, inherit_level = 0; - - if (iface->typelib_idx != -1) return; - -@@ -1400,6 +1399,7 @@ static void add_interface_typeinfo(struct sltg_typelib *typelib, type_t *iface) - - while (inherit) - { -+ inherit_level++; - inherited_func_count += list_count(type_iface_get_stmts(inherit)); - inherit = type_iface_get_inherit(inherit); - } -@@ -1415,7 +1415,7 @@ static void add_interface_typeinfo(struct sltg_typelib *typelib, type_t *iface) - - STATEMENTS_FOR_EACH_FUNC(stmt_func, type_iface_get_stmts(iface)) - { -- add_func_desc(typelib, &data, stmt_func->u.var, -1, -1, &hrefmap); -+ add_func_desc(typelib, &data, stmt_func->u.var, -1, -1, -1, &hrefmap); - } - - func_data_size = data.size; -@@ -1450,13 +1450,15 @@ static void add_interface_typeinfo(struct sltg_typelib *typelib, type_t *iface) - write_impl_href(&data, inherit_href); - - i = 0; -+ dispid = 0x60000000 | (inherit_level << 16); - - STATEMENTS_FOR_EACH_FUNC(stmt_func, type_iface_get_stmts(iface)) - { - if (i == func_count - 1) i |= 0x80000000; - - base_offset += add_func_desc(typelib, &data, stmt_func->u.var, -- inherited_func_count + i, base_offset, &hrefmap); -+ inherited_func_count + i, -+ dispid++, base_offset, &hrefmap); - i++; - } - --- -2.6.4 - diff --git a/patches/widl-SLTG_Typelib_Support/0016-widl-Create-library-block-index-right-after-the-Comp.patch b/patches/widl-SLTG_Typelib_Support/0016-widl-Create-library-block-index-right-after-the-Comp.patch deleted file mode 100644 index 950a0999..00000000 --- a/patches/widl-SLTG_Typelib_Support/0016-widl-Create-library-block-index-right-after-the-Comp.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 0a528bf3c1c5b19f497e1a9f0848b6e191394a88 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Wed, 20 Jan 2016 13:26:49 +0800 -Subject: widl: Create library block index right after the CompObj one. - -Otherwise Wine's oleaut32 refuses to load a typelib. ---- - tools/widl/write_sltg.c | 39 +++++++++++++++++++++++++++------------ - 1 file changed, 27 insertions(+), 12 deletions(-) - -diff --git a/tools/widl/write_sltg.c b/tools/widl/write_sltg.c -index 79c0f0ee..650fdfa7 100644 ---- a/tools/widl/write_sltg.c -+++ b/tools/widl/write_sltg.c -@@ -374,15 +374,13 @@ static void init_library(struct sltg_typelib *sltg) - } - } - --static void add_block(struct sltg_typelib *sltg, void *data, int size, const char *name) -+static void add_block_index(struct sltg_typelib *sltg, void *data, int size, int index) - { - struct sltg_block *block = xmalloc(sizeof(*block)); - -- chat("add_block: %p,%d,\"%s\"\n", data, size, name); -- - block->length = size; - block->data = data; -- block->index_string = add_index(&sltg->index, name); -+ block->index_string = index; - block->next = NULL; - - if (sltg->blocks) -@@ -400,17 +398,28 @@ static void add_block(struct sltg_typelib *sltg, void *data, int size, const cha - sltg->n_file_blocks++; - } - --static void add_library_block(struct sltg_typelib *typelib) -+static void add_block(struct sltg_typelib *sltg, void *data, int size, const char *name) -+{ -+ struct sltg_block *block = xmalloc(sizeof(*block)); -+ int index; -+ -+ chat("add_block: %p,%d,\"%s\"\n", data, size, name); -+ -+ index = add_index(&sltg->index, name); -+ -+ add_block_index(sltg, data, size, index); -+} -+ -+static void *create_library_block(struct sltg_typelib *typelib, int *size, int *index) - { - void *block; - short *p; -- int size; - -- size = sizeof(short) * 9 + sizeof(int) * 3 + sizeof(GUID); -- if (typelib->library.helpstring) size += strlen(typelib->library.helpstring); -- if (typelib->library.helpfile) size += strlen(typelib->library.helpfile); -+ *size = sizeof(short) * 9 + sizeof(int) * 3 + sizeof(GUID); -+ if (typelib->library.helpstring) *size += strlen(typelib->library.helpstring); -+ if (typelib->library.helpfile) *size += strlen(typelib->library.helpfile); - -- block = xmalloc(size); -+ block = xmalloc(*size); - p = block; - *p++ = 0x51cc; /* magic */ - *p++ = 3; /* res02 */ -@@ -443,7 +452,9 @@ static void add_library_block(struct sltg_typelib *typelib) - p += 2; - *(GUID *)p = typelib->library.uuid; - -- add_block(typelib, block, size, "dir"); -+ *index = add_index(&typelib->index, "dir"); -+ -+ return block; - } - - static const char *new_index_name(void) -@@ -1763,6 +1774,8 @@ int create_sltg_typelib(typelib_t *typelib) - { - struct sltg_typelib sltg; - const statement_t *stmt; -+ void *library_block; -+ int library_block_size, library_block_index; - - sltg.typelib = typelib; - sltg.typeinfo_count = 0; -@@ -1776,11 +1789,13 @@ int create_sltg_typelib(typelib_t *typelib) - init_name_table(&sltg); - init_library(&sltg); - -+ library_block = create_library_block(&sltg, &library_block_size, &library_block_index); -+ - if (typelib->stmts) - LIST_FOR_EACH_ENTRY(stmt, typelib->stmts, const statement_t, entry) - add_statement(&sltg, stmt); - -- add_library_block(&sltg); -+ add_block_index(&sltg, library_block, library_block_size, library_block_index); - - save_all_changes(&sltg); - --- -2.19.1 - diff --git a/patches/widl-SLTG_Typelib_Support/0020-widl-Set-the-lowest-bit-in-the-param-name-to-indicat.patch b/patches/widl-SLTG_Typelib_Support/0020-widl-Set-the-lowest-bit-in-the-param-name-to-indicat.patch deleted file mode 100644 index 5f928472..00000000 --- a/patches/widl-SLTG_Typelib_Support/0020-widl-Set-the-lowest-bit-in-the-param-name-to-indicat.patch +++ /dev/null @@ -1,45 +0,0 @@ -From f52df44c1930e62fa9096f24ba8b1b84765c0e34 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Mon, 25 Jan 2016 15:05:03 +0800 -Subject: widl: Set the lowest bit in the param name to indicate whether type - description follows the name. - -It looks like the lowest bit in the param name offset actually indicates -whether type description follows the name, and since the name offsets are -always aligned that makes sense. - -This makes oleview.exe from PSDK running under Windows7 correctly show mix -of different very complex and relatively simple type descriptions generated -by widl's SLTG generator. ---- - tools/widl/write_sltg.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/tools/widl/write_sltg.c b/tools/widl/write_sltg.c -index acfc039..2ec1770 100644 ---- a/tools/widl/write_sltg.c -+++ b/tools/widl/write_sltg.c -@@ -1307,7 +1307,6 @@ static int add_func_desc(struct sltg_typelib *typelib, struct sltg_data *data, v - short name, type_offset; - - name = base_offset != -1 ? add_name(typelib, arg->name) : -1; -- append_data(data, &name, sizeof(name)); - - if (arg_data[i].size > sizeof(short)) - { -@@ -1315,8 +1314,12 @@ static int add_func_desc(struct sltg_typelib *typelib, struct sltg_data *data, v - arg_offset += arg_data[i].size; - } - else -+ { -+ name |= 1; - type_offset = *(short *)arg_data[i].data; -+ } - -+ append_data(data, &name, sizeof(name)); - append_data(data, &type_offset, sizeof(type_offset)); - - if (base_offset != -1) --- -2.6.4 - diff --git a/patches/widl-SLTG_Typelib_Support/0022-widl-Add-support-for-function-parameter-flags-to-SLT.patch b/patches/widl-SLTG_Typelib_Support/0022-widl-Add-support-for-function-parameter-flags-to-SLT.patch deleted file mode 100644 index ec3d14ef..00000000 --- a/patches/widl-SLTG_Typelib_Support/0022-widl-Add-support-for-function-parameter-flags-to-SLT.patch +++ /dev/null @@ -1,146 +0,0 @@ -From b8438563c713d08601c86895f12e8a40e3f2f54d Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Mon, 25 Jan 2016 15:26:12 +0800 -Subject: [PATCH] widl: Add support for function parameter flags to SLTG - typelib generator. - -This makes stdole32.tlb generated by widl have proper [in,out,retval] -parameter flags. ---- - tools/widl/write_sltg.c | 71 +++++++++++++++++++++++++++++++++++------ - 1 file changed, 61 insertions(+), 10 deletions(-) - -diff --git a/tools/widl/write_sltg.c b/tools/widl/write_sltg.c -index 68d1241d61c..b122e0dc389 100644 ---- a/tools/widl/write_sltg.c -+++ b/tools/widl/write_sltg.c -@@ -794,8 +794,8 @@ static int local_href(struct sltg_hrefmap *hrefmap, int typelib_href) - return href << 2; - } - --static short write_var_desc(struct sltg_typelib *typelib, struct sltg_data *data, type_t *type, short flags, -- short base_offset, int *size_instance, struct sltg_hrefmap *hrefmap) -+static short write_var_desc(struct sltg_typelib *typelib, struct sltg_data *data, type_t *type, short param_flags, -+ short flags, short base_offset, int *size_instance, struct sltg_hrefmap *hrefmap) - { - short vt, vt_flags, desc_offset; - -@@ -887,19 +887,20 @@ static short write_var_desc(struct sltg_typelib *typelib, struct sltg_data *data - - if (is_ptr(ref)) - { -- chat("write_var_desc: vt VT_PTR | 0x0400\n"); -- vt = VT_PTR | 0x0400; -+ chat("write_var_desc: vt VT_PTR | 0x0400 | %04x\n", param_flags); -+ vt = VT_PTR | 0x0400 | param_flags; -+ param_flags = 0; - append_data(data, &vt, sizeof(vt)); -- write_var_desc(typelib, data, ref, 0, base_offset, size_instance, hrefmap); -+ write_var_desc(typelib, data, ref, param_flags, 0, base_offset, size_instance, hrefmap); - } - else -- write_var_desc(typelib, data, ref, 0x0e00, base_offset, size_instance, hrefmap); -+ write_var_desc(typelib, data, ref, param_flags, 0x0e00, base_offset, size_instance, hrefmap); - return desc_offset; - } - - chat("write_var_desc: vt %d, flags %04x\n", vt, flags); - -- vt_flags = vt | flags; -+ vt_flags = vt | flags | param_flags; - append_data(data, &vt_flags, sizeof(vt_flags)); - - if (vt == VT_USERDEFINED) -@@ -994,7 +995,8 @@ static void add_structure_typeinfo(struct sltg_typelib *typelib, type_t *type) - init_sltg_data(&var_data[i]); - - base_offset = var_data_size + (i + 1) * sizeof(struct sltg_variable); -- type_desc_offset[i] = write_var_desc(typelib, &var_data[i], var->declspec.type, 0, base_offset, &size_instance, &hrefmap); -+ type_desc_offset[i] = write_var_desc(typelib, &var_data[i], var->declspec.type, 0, 0, -+ base_offset, &size_instance, &hrefmap); - dump_var_desc(var_data[i].data, var_data[i].size); - - if (var_data[i].size > sizeof(short)) -@@ -1177,6 +1179,52 @@ static int get_func_flags(const var_t *func, int *dispid, int *invokekind, int * - return flags; - } - -+static int get_param_flags(const var_t *param) -+{ -+ const attr_t *attr; -+ int flags, in, out; -+ -+ if (!param->attrs) return 0; -+ -+ flags = 0; -+ in = out = 0; -+ -+ LIST_FOR_EACH_ENTRY(attr, param->attrs, const attr_t, entry) -+ { -+ switch(attr->type) -+ { -+ case ATTR_IN: -+ in++; -+ break; -+ case ATTR_OUT: -+ out++; -+ break; -+ case ATTR_PARAMLCID: -+ flags |= 0x2000; -+ break; -+ case ATTR_RETVAL: -+ flags |= 0x80; -+ break; -+ default: -+ chat("unhandled param attr %d\n", attr->type); -+ break; -+ } -+ } -+ -+ if (out) -+ { -+ if (in) -+ flags |= 0x8000; -+ else -+ flags |= 0x4000; -+ } -+ else if (!in) -+ flags |= 0xc000; -+ -+ return flags; -+} -+ -+ - static int add_func_desc(struct sltg_typelib *typelib, struct sltg_data *data, var_t *func, - int idx, int dispid, short base_offset, struct sltg_hrefmap *hrefmap) - { -@@ -1194,7 +1242,7 @@ static int add_func_desc(struct sltg_typelib *typelib, struct sltg_data *data, v - - init_sltg_data(&ret_data); - ret_desc_offset = write_var_desc(typelib, &ret_data, type_function_get_rettype(func->declspec.type), -- 0, base_offset, NULL, hrefmap); -+ 0, 0, base_offset, NULL, hrefmap); - dump_var_desc(ret_data.data, ret_data.size); - - arg_data_size = 0; -@@ -1220,13 +1268,16 @@ static int add_func_desc(struct sltg_typelib *typelib, struct sltg_data *data, v - LIST_FOR_EACH_ENTRY(arg, type_function_get_args(func->declspec.type), const var_t, entry) - { - const attr_t *attr; -+ short param_flags = get_param_flags(arg); - - chat("add_func_desc: arg[%d] %p (%s), type %p (%s)\n", - i, arg, arg->name, arg->declspec.type, arg->declspec.type->name); - - init_sltg_data(&arg_data[i]); - -- arg_desc_offset[i] = write_var_desc(typelib, &arg_data[i], arg->declspec.type, 0, arg_offset, NULL, hrefmap); -+ -+ arg_desc_offset[i] = write_var_desc(typelib, &arg_data[i], arg->declspec.type, param_flags, 0, -+ arg_offset, NULL, hrefmap); - dump_var_desc(arg_data[i].data, arg_data[i].size); - - if (arg_data[i].size > sizeof(short)) --- -2.17.1 - diff --git a/staging/upstream-commit b/staging/upstream-commit index 2c02bcc7..29c81ceb 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -166895ae3ad3890ad946a309d0fd85e89ea3630e +d07019e4d174fd1b5d8b74ff2a36e900c07d96d7