Nikolay Sivov : ntdll: Use single field for misc flags in ComClass redirection section.
Alexandre Julliard
julliard at winehq.org
Thu Jun 11 15:26:47 CDT 2020
Module: wine
Branch: master
Commit: 72d055854b59db9059a3465f1e65247c0cc5e94e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=72d055854b59db9059a3465f1e65247c0cc5e94e
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Jun 11 19:40:25 2020 +0300
ntdll: Use single field for misc flags in ComClass redirection section.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/tests/actctx.c | 23 ++++++++++-------------
dlls/mscoree/corruntimehost.c | 4 +---
dlls/ntdll/actctx.c | 22 +++++++++-------------
dlls/ole32/compobj.c | 9 ++++-----
dlls/sxs/sxs.c | 4 +---
5 files changed, 25 insertions(+), 37 deletions(-)
diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c
index 2d942cdc98..2093959d98 100644
--- a/dlls/kernel32/tests/actctx.c
+++ b/dlls/kernel32/tests/actctx.c
@@ -1422,9 +1422,7 @@ enum comclass_miscfields {
struct comclassredirect_data {
ULONG size;
- BYTE res;
- BYTE miscmask;
- BYTE res1[2];
+ ULONG flags;
DWORD model;
GUID clsid;
GUID alias;
@@ -1481,12 +1479,9 @@ static void test_find_com_redirection(HANDLE handle, const GUID *clsid, const GU
ok_(__FILE__, line)(comclass->size == sizeof(*comclass), "got %d for header size\n", comclass->size);
if (data.lpData && comclass->size == sizeof(*comclass))
{
+ ULONG len, miscmask;
WCHAR *ptr;
- ULONG len;
- ok_(__FILE__, line)(comclass->res == 0, "got res as %d\n", comclass->res);
- ok_(__FILE__, line)(comclass->res1[0] == 0, "got res1[0] as %02x\n", comclass->res1[0]);
- ok_(__FILE__, line)(comclass->res1[1] == 0, "got res1[1] as %02x\n", comclass->res1[1]);
ok_(__FILE__, line)(comclass->model == ThreadingModel_Neutral, "got model %d\n", comclass->model);
ok_(__FILE__, line)(IsEqualGUID(&comclass->clsid, clsid), "got wrong clsid %s\n", wine_dbgstr_guid(&comclass->clsid));
ok_(__FILE__, line)(IsEqualGUID(&comclass->clsid2, clsid), "got wrong clsid2 %s\n", wine_dbgstr_guid(&comclass->clsid2));
@@ -1519,19 +1514,21 @@ static void test_find_com_redirection(HANDLE handle, const GUID *clsid, const GU
ok_(__FILE__, line)(data.ulSectionTotalLength > comclass->name_offset, "got wrong offset %d\n", comclass->name_offset);
/* check misc fields are set */
- if (comclass->miscmask)
+ miscmask = (comclass->flags >> 8) & 0xff;
+ if (miscmask)
{
- if (comclass->miscmask & MiscStatus)
+ if (miscmask & MiscStatus)
ok_(__FILE__, line)(comclass->miscstatus != 0, "got miscstatus 0x%08x\n", comclass->miscstatus);
- if (comclass->miscmask & MiscStatusIcon)
+ if (miscmask & MiscStatusIcon)
ok_(__FILE__, line)(comclass->miscstatusicon != 0, "got miscstatusicon 0x%08x\n", comclass->miscstatusicon);
- if (comclass->miscmask & MiscStatusContent)
+ if (miscmask & MiscStatusContent)
ok_(__FILE__, line)(comclass->miscstatuscontent != 0, "got miscstatuscontent 0x%08x\n", comclass->miscstatuscontent);
- if (comclass->miscmask & MiscStatusThumbnail)
+ if (miscmask & MiscStatusThumbnail)
ok_(__FILE__, line)(comclass->miscstatusthumbnail != 0, "got miscstatusthumbnail 0x%08x\n", comclass->miscstatusthumbnail);
- if (comclass->miscmask & MiscStatusDocPrint)
+ if (miscmask & MiscStatusDocPrint)
ok_(__FILE__, line)(comclass->miscstatusdocprint != 0, "got miscstatusdocprint 0x%08x\n", comclass->miscstatusdocprint);
}
+ ok_(__FILE__, line)(!(comclass->flags & 0xffff00ff), "Unexpected flags %#x.\n", comclass->flags);
/* part used for clrClass only */
if (comclass->clrdata_len)
diff --git a/dlls/mscoree/corruntimehost.c b/dlls/mscoree/corruntimehost.c
index 9f53555ee9..a5b378b925 100644
--- a/dlls/mscoree/corruntimehost.c
+++ b/dlls/mscoree/corruntimehost.c
@@ -74,9 +74,7 @@ struct dll_fixup
struct comclassredirect_data
{
ULONG size;
- BYTE res;
- BYTE miscmask;
- BYTE res1[2];
+ ULONG flags;
DWORD model;
GUID clsid;
GUID alias;
diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c
index af9499c404..1fb337ea33 100644
--- a/dlls/ntdll/actctx.c
+++ b/dlls/ntdll/actctx.c
@@ -242,9 +242,7 @@ enum comclass_miscfields
struct comclassredirect_data
{
ULONG size;
- BYTE res;
- BYTE miscmask;
- BYTE res1[2];
+ ULONG flags;
DWORD model;
GUID clsid;
GUID alias;
@@ -4030,7 +4028,7 @@ static void add_comserver_record(const struct guidsection_header *section, const
struct entity *entity = &entities->base[i];
if (entity->kind == ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION)
{
- ULONG module_len, progid_len, str_len = 0;
+ ULONG module_len, progid_len, str_len = 0, miscmask;
struct comclassredirect_data *data;
struct guid_index *alias_index;
struct clrclass_data *clrdata;
@@ -4064,9 +4062,6 @@ static void add_comserver_record(const struct guidsection_header *section, const
/* setup data */
data = (struct comclassredirect_data*)((BYTE*)section + (*index)->data_offset);
data->size = sizeof(*data);
- data->res = 0;
- data->res1[0] = 0;
- data->res1[1] = 0;
data->model = entity->u.comclass.model;
data->clsid = (*index)->guid;
data->alias = alias_index->guid;
@@ -4091,17 +4086,18 @@ static void add_comserver_record(const struct guidsection_header *section, const
data->miscstatusdocprint = entity->u.comclass.miscstatusdocprint;
/* mask describes which misc* data is available */
- data->miscmask = 0;
+ miscmask = 0;
if (data->miscstatus)
- data->miscmask |= MiscStatus;
+ miscmask |= MiscStatus;
if (data->miscstatuscontent)
- data->miscmask |= MiscStatusContent;
+ miscmask |= MiscStatusContent;
if (data->miscstatusthumbnail)
- data->miscmask |= MiscStatusThumbnail;
+ miscmask |= MiscStatusThumbnail;
if (data->miscstatusicon)
- data->miscmask |= MiscStatusIcon;
+ miscmask |= MiscStatusIcon;
if (data->miscstatusdocprint)
- data->miscmask |= MiscStatusDocPrint;
+ miscmask |= MiscStatusDocPrint;
+ data->flags = miscmask << 8;
if (data->clrdata_offset)
{
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index bd28f42b33..df234498e6 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -105,9 +105,7 @@ enum comclass_miscfields
struct comclassredirect_data
{
ULONG size;
- BYTE res;
- BYTE miscmask;
- BYTE res1[2];
+ ULONG flags;
DWORD model;
GUID clsid;
GUID alias;
@@ -265,10 +263,11 @@ BOOL actctx_get_miscstatus(const CLSID *clsid, DWORD aspect, DWORD *status)
{
struct comclassredirect_data *comclass = (struct comclassredirect_data*)data.lpData;
enum comclass_miscfields misc = dvaspect_to_miscfields(aspect);
+ ULONG miscmask = (comclass->flags >> 8) & 0xff;
- if (!(comclass->miscmask & misc))
+ if (!(miscmask & misc))
{
- if (!(comclass->miscmask & MiscStatus))
+ if (!(miscmask & MiscStatus))
{
*status = 0;
return TRUE;
diff --git a/dlls/sxs/sxs.c b/dlls/sxs/sxs.c
index 5b2db1d997..0b59eb5d2e 100644
--- a/dlls/sxs/sxs.c
+++ b/dlls/sxs/sxs.c
@@ -64,9 +64,7 @@ typedef struct _SXS_GUID_INFORMATION_CLR
struct comclassredirect_data
{
ULONG size;
- BYTE res;
- BYTE miscmask;
- BYTE res1[2];
+ ULONG flags;
DWORD model;
GUID clsid;
GUID alias;
More information about the wine-cvs
mailing list