You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a701f0ed4c | ||
|
c58c70e961 | ||
|
93e4c328d7 | ||
|
06c1bde586 | ||
|
ec47c04ab3 | ||
|
e7bff1bb4f | ||
|
39cafb1db1 | ||
|
49f93040fe | ||
|
af0347a0f2 | ||
|
0e828a225e | ||
|
eb5196c132 | ||
|
f45bfd8af7 | ||
|
d9dc36f879 | ||
|
2c7a662655 | ||
|
ec218012c3 | ||
|
c2d58dc59a | ||
|
2f3ba1fb46 |
@@ -1,2 +0,0 @@
|
||||
Depends: ml-array_size
|
||||
Depends: ml-patches
|
@@ -1,7 +1,7 @@
|
||||
From 31a5f689a12c1db6edcc86dcd8e81f38a5f19fc5 Mon Sep 17 00:00:00 2001
|
||||
From baff5c160cf7f1ac0011bf8f55d506bf0346e1fd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 7 Aug 2017 02:53:06 +0200
|
||||
Subject: user32: Start explorer.exe using limited rights.
|
||||
Subject: [PATCH] user32: Start explorer.exe using limited rights.
|
||||
|
||||
---
|
||||
dlls/advapi32/tests/security.c | 4 ++--
|
||||
@@ -9,10 +9,10 @@ Subject: user32: Start explorer.exe using limited rights.
|
||||
2 files changed, 12 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index f1a64e29dea..52524ee6fe2 100644
|
||||
index f27642e7a7..0271cd72e0 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -7387,7 +7387,7 @@ static void test_token_security_descriptor(void)
|
||||
@@ -7313,7 +7313,7 @@ static void test_token_security_descriptor(void)
|
||||
ret = GetTokenInformation(token4, TokenIntegrityLevel, buffer_integrity, sizeof(buffer_integrity), &size);
|
||||
ok(ret, "GetTokenInformation failed with error %u\n", GetLastError());
|
||||
tml = (TOKEN_MANDATORY_LABEL *)buffer_integrity;
|
||||
@@ -21,7 +21,7 @@ index f1a64e29dea..52524ee6fe2 100644
|
||||
|
||||
size = 0;
|
||||
ret = GetKernelObjectSecurity(token4, LABEL_SECURITY_INFORMATION, NULL, 0, &size);
|
||||
@@ -7841,7 +7841,7 @@ static void test_child_token_sd_medium(void)
|
||||
@@ -7768,7 +7768,7 @@ static void test_child_token_sd_medium(void)
|
||||
ret = GetTokenInformation(token, TokenIntegrityLevel, buffer_integrity, sizeof(buffer_integrity), &size);
|
||||
ok(ret, "GetTokenInformation failed with error %u\n", GetLastError());
|
||||
tml = (TOKEN_MANDATORY_LABEL *)buffer_integrity;
|
||||
@@ -31,7 +31,7 @@ index f1a64e29dea..52524ee6fe2 100644
|
||||
HeapFree(GetProcessHeap(), 0, sd);
|
||||
}
|
||||
diff --git a/dlls/user32/win.c b/dlls/user32/win.c
|
||||
index cbf22374374..ea116b9d139 100644
|
||||
index cbfd8bb14a..8039f54fb0 100644
|
||||
--- a/dlls/user32/win.c
|
||||
+++ b/dlls/user32/win.c
|
||||
@@ -43,6 +43,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(win);
|
||||
@@ -43,15 +43,15 @@ index cbf22374374..ea116b9d139 100644
|
||||
static DWORD process_layout = ~0u;
|
||||
|
||||
static struct list window_surfaces = LIST_INIT( window_surfaces );
|
||||
@@ -2067,6 +2069,7 @@ HWND WINAPI GetDesktopWindow(void)
|
||||
WCHAR app[MAX_PATH + sizeof(explorer)/sizeof(WCHAR)];
|
||||
WCHAR cmdline[MAX_PATH + (sizeof(explorer) + sizeof(args))/sizeof(WCHAR)];
|
||||
@@ -2052,6 +2054,7 @@ HWND WINAPI GetDesktopWindow(void)
|
||||
WCHAR app[MAX_PATH + ARRAY_SIZE( explorer )];
|
||||
WCHAR cmdline[MAX_PATH + ARRAY_SIZE( explorer ) + ARRAY_SIZE( args )];
|
||||
WCHAR desktop[MAX_PATH];
|
||||
+ HANDLE token;
|
||||
void *redir;
|
||||
|
||||
SERVER_START_REQ( set_user_object_info )
|
||||
@@ -2099,9 +2102,12 @@ HWND WINAPI GetDesktopWindow(void)
|
||||
@@ -2084,9 +2087,12 @@ HWND WINAPI GetDesktopWindow(void)
|
||||
strcpyW( cmdline, app );
|
||||
strcatW( cmdline, args );
|
||||
|
||||
@@ -66,7 +66,7 @@ index cbf22374374..ea116b9d139 100644
|
||||
{
|
||||
TRACE( "started explorer pid %04x tid %04x\n", pi.dwProcessId, pi.dwThreadId );
|
||||
WaitForInputIdle( pi.hProcess, 10000 );
|
||||
@@ -2111,6 +2117,8 @@ HWND WINAPI GetDesktopWindow(void)
|
||||
@@ -2096,6 +2102,8 @@ HWND WINAPI GetDesktopWindow(void)
|
||||
else WARN( "failed to start explorer, err %d\n", GetLastError() );
|
||||
Wow64RevertWow64FsRedirection( redir );
|
||||
|
||||
@@ -76,5 +76,5 @@ index cbf22374374..ea116b9d139 100644
|
||||
{
|
||||
req->force = 1;
|
||||
--
|
||||
2.13.1
|
||||
2.18.0
|
||||
|
||||
|
@@ -1,20 +1,20 @@
|
||||
From 71366dad7ac934b2e24cfcf19104b4589b91652a Mon Sep 17 00:00:00 2001
|
||||
From b14282d138ff6a5ad1d5c152d0a556c9ca648c36 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 7 Aug 2017 03:33:26 +0200
|
||||
Subject: server: Correctly assign security labels for tokens.
|
||||
Subject: [PATCH] server: Correctly assign security labels for tokens.
|
||||
|
||||
---
|
||||
dlls/advapi32/tests/security.c | 21 ++++++++++-----------
|
||||
server/process.c | 8 +-------
|
||||
dlls/advapi32/tests/security.c | 21 +++++++++--------
|
||||
server/process.c | 8 +------
|
||||
server/security.h | 2 +-
|
||||
server/token.c | 41 ++++++++++++++++++++++++-----------------
|
||||
server/token.c | 41 ++++++++++++++++++++--------------
|
||||
4 files changed, 36 insertions(+), 36 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index 52524ee6fe2..a35baab0e25 100644
|
||||
index 0271cd72e0..3b07e7cd2f 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -7289,7 +7289,6 @@ static void test_token_security_descriptor(void)
|
||||
@@ -7215,7 +7215,6 @@ static void test_token_security_descriptor(void)
|
||||
defaulted = TRUE;
|
||||
ret = GetSecurityDescriptorDacl(sd2, &present, &acl2, &defaulted);
|
||||
ok(ret, "GetSecurityDescriptorDacl failed with error %u\n", GetLastError());
|
||||
@@ -22,7 +22,7 @@ index 52524ee6fe2..a35baab0e25 100644
|
||||
ok(present, "DACL not present\n");
|
||||
|
||||
if (present)
|
||||
@@ -7410,7 +7409,7 @@ static void test_token_security_descriptor(void)
|
||||
@@ -7336,7 +7335,7 @@ static void test_token_security_descriptor(void)
|
||||
ok(ret, "GetAce failed with error %u\n", GetLastError());
|
||||
ok(ace->Header.AceType == SYSTEM_MANDATORY_LABEL_ACE_TYPE,
|
||||
"Unexpected ACE type %#x\n", ace->Header.AceType);
|
||||
@@ -31,7 +31,7 @@ index 52524ee6fe2..a35baab0e25 100644
|
||||
"Expected medium integrity level\n");
|
||||
}
|
||||
|
||||
@@ -7463,8 +7462,8 @@ static void test_token_security_descriptor(void)
|
||||
@@ -7389,8 +7388,8 @@ static void test_token_security_descriptor(void)
|
||||
sacl = NULL;
|
||||
ret = GetSecurityDescriptorSacl(sd3, &present, &sacl, &defaulted);
|
||||
ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
|
||||
@@ -42,7 +42,7 @@ index 52524ee6fe2..a35baab0e25 100644
|
||||
|
||||
if (sacl)
|
||||
{
|
||||
@@ -7513,8 +7512,8 @@ static void test_token_security_descriptor(void)
|
||||
@@ -7439,8 +7438,8 @@ static void test_token_security_descriptor(void)
|
||||
sacl = NULL;
|
||||
ret = GetSecurityDescriptorSacl(sd3, &present, &sacl, &defaulted);
|
||||
ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
|
||||
@@ -53,7 +53,7 @@ index 52524ee6fe2..a35baab0e25 100644
|
||||
|
||||
if (sacl)
|
||||
{
|
||||
@@ -7578,8 +7577,8 @@ static void test_token_security_descriptor(void)
|
||||
@@ -7504,8 +7503,8 @@ static void test_token_security_descriptor(void)
|
||||
|
||||
ret = GetSecurityDescriptorSacl(sd3, &present, &sacl, &defaulted);
|
||||
ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
|
||||
@@ -64,7 +64,7 @@ index 52524ee6fe2..a35baab0e25 100644
|
||||
|
||||
if (sacl)
|
||||
{
|
||||
@@ -7616,8 +7615,8 @@ static void test_token_security_descriptor(void)
|
||||
@@ -7542,8 +7541,8 @@ static void test_token_security_descriptor(void)
|
||||
sacl = NULL;
|
||||
ret = GetSecurityDescriptorSacl(sd3, &present, &sacl, &defaulted);
|
||||
ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
|
||||
@@ -75,7 +75,7 @@ index 52524ee6fe2..a35baab0e25 100644
|
||||
|
||||
if (sacl)
|
||||
{
|
||||
@@ -7834,7 +7833,7 @@ static void test_child_token_sd_medium(void)
|
||||
@@ -7761,7 +7760,7 @@ static void test_child_token_sd_medium(void)
|
||||
ok(ret, "GetAce failed with error %u\n", GetLastError());
|
||||
ok(ace_label->Header.AceType == SYSTEM_MANDATORY_LABEL_ACE_TYPE,
|
||||
"Unexpected ACE type %#x\n", ace_label->Header.AceType);
|
||||
@@ -85,10 +85,10 @@ index 52524ee6fe2..a35baab0e25 100644
|
||||
|
||||
memset(buffer_integrity, 0, sizeof(buffer_integrity));
|
||||
diff --git a/server/process.c b/server/process.c
|
||||
index ef2452fb8fb..ae998ab80b9 100644
|
||||
index 7d2206f274..74cc320f44 100644
|
||||
--- a/server/process.c
|
||||
+++ b/server/process.c
|
||||
@@ -571,17 +571,11 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
|
||||
@@ -567,17 +567,11 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
|
||||
: alloc_handle_table( process, 0 );
|
||||
/* Note: for security reasons, starting a new process does not attempt
|
||||
* to use the current impersonation token for the new process */
|
||||
@@ -108,7 +108,7 @@ index ef2452fb8fb..ae998ab80b9 100644
|
||||
if (pipe( request_pipe ) == -1)
|
||||
{
|
||||
diff --git a/server/security.h b/server/security.h
|
||||
index 32dfe5f8db9..87377ccd673 100644
|
||||
index 32dfe5f8db..87377ccd67 100644
|
||||
--- a/server/security.h
|
||||
+++ b/server/security.h
|
||||
@@ -59,7 +59,7 @@ extern int token_assign_label( struct token *token, PSID label );
|
||||
@@ -121,10 +121,10 @@ index 32dfe5f8db9..87377ccd673 100644
|
||||
const LUID_AND_ATTRIBUTES *reqprivs,
|
||||
unsigned int count, LUID_AND_ATTRIBUTES *usedprivs);
|
||||
diff --git a/server/token.c b/server/token.c
|
||||
index c507294b49d..c6b0f0d39d3 100644
|
||||
index 28042471b0..e5639fc0d5 100644
|
||||
--- a/server/token.c
|
||||
+++ b/server/token.c
|
||||
@@ -686,7 +686,7 @@ static int filter_privilege( struct privilege *privilege, const LUID_AND_ATTRIBU
|
||||
@@ -668,7 +668,7 @@ static int filter_privilege( struct privilege *privilege, const LUID_AND_ATTRIBU
|
||||
struct token *token_duplicate( struct token *src_token, unsigned primary,
|
||||
int impersonation_level, const struct security_descriptor *sd,
|
||||
const LUID_AND_ATTRIBUTES *filter_privileges, unsigned int priv_count,
|
||||
@@ -133,7 +133,7 @@ index c507294b49d..c6b0f0d39d3 100644
|
||||
{
|
||||
const luid_t *modified_id =
|
||||
primary || (impersonation_level == src_token->impersonation_level) ?
|
||||
@@ -750,6 +750,12 @@ struct token *token_duplicate( struct token *src_token, unsigned primary,
|
||||
@@ -735,6 +735,12 @@ struct token *token_duplicate( struct token *src_token, unsigned primary,
|
||||
if (sd) default_set_sd( &token->obj, sd, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION |
|
||||
DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION );
|
||||
|
||||
@@ -146,7 +146,7 @@ index c507294b49d..c6b0f0d39d3 100644
|
||||
return token;
|
||||
}
|
||||
|
||||
@@ -922,6 +928,12 @@ struct token *token_create_admin( void )
|
||||
@@ -907,6 +913,12 @@ struct token *token_create_admin( void )
|
||||
admin_source, NULL, -1, TokenElevationTypeFull, &high_label_sid );
|
||||
/* we really need a primary group */
|
||||
assert( token->primary_group );
|
||||
@@ -159,7 +159,7 @@ index c507294b49d..c6b0f0d39d3 100644
|
||||
}
|
||||
|
||||
free( logon_sid );
|
||||
@@ -980,6 +992,12 @@ static struct token *token_create_limited( void )
|
||||
@@ -965,6 +977,12 @@ static struct token *token_create_limited( void )
|
||||
admin_source, NULL, -1, TokenElevationTypeLimited, &medium_label_sid );
|
||||
/* we really need a primary group */
|
||||
assert( token->primary_group );
|
||||
@@ -172,7 +172,7 @@ index c507294b49d..c6b0f0d39d3 100644
|
||||
}
|
||||
|
||||
free( logon_sid );
|
||||
@@ -1448,7 +1466,8 @@ DECL_HANDLER(duplicate_token)
|
||||
@@ -1433,7 +1451,8 @@ DECL_HANDLER(duplicate_token)
|
||||
TOKEN_DUPLICATE,
|
||||
&token_ops )))
|
||||
{
|
||||
@@ -182,7 +182,7 @@ index c507294b49d..c6b0f0d39d3 100644
|
||||
if (token)
|
||||
{
|
||||
unsigned int access = req->access ? req->access : get_handle_access( current->process, req->handle );
|
||||
@@ -1478,7 +1497,7 @@ DECL_HANDLER(filter_token)
|
||||
@@ -1463,7 +1482,7 @@ DECL_HANDLER(filter_token)
|
||||
group_count = get_sid_count( filter_groups, get_req_data_size() - priv_count * sizeof(LUID_AND_ATTRIBUTES) );
|
||||
|
||||
token = token_duplicate( src_token, src_token->primary, src_token->impersonation_level, NULL,
|
||||
@@ -191,7 +191,7 @@ index c507294b49d..c6b0f0d39d3 100644
|
||||
if (token)
|
||||
{
|
||||
unsigned int access = get_handle_access( current->process, req->handle );
|
||||
@@ -1813,23 +1832,11 @@ DECL_HANDLER(set_token_default_dacl)
|
||||
@@ -1789,23 +1808,11 @@ DECL_HANDLER(set_token_default_dacl)
|
||||
DECL_HANDLER(create_token)
|
||||
{
|
||||
struct token *token;
|
||||
@@ -218,5 +218,5 @@ index c507294b49d..c6b0f0d39d3 100644
|
||||
}
|
||||
}
|
||||
--
|
||||
2.13.1
|
||||
2.18.0
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,12 @@
|
||||
From a93e855c484c622efedfe9696eac72c32007621d Mon Sep 17 00:00:00 2001
|
||||
From 04bb8bf7196efb6f7c0a3c5f7524ac8aefc645b6 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 7 Oct 2017 00:52:34 +0200
|
||||
Subject: wined3d: Add support for depth bias clamping.
|
||||
|
||||
---
|
||||
dlls/d3d11/device.c | 5 ++++-
|
||||
dlls/wined3d/adapter_gl.c | 3 +++
|
||||
dlls/wined3d/cs.c | 1 +
|
||||
dlls/wined3d/directx.c | 3 +++
|
||||
dlls/wined3d/state.c | 17 +++++++++++++++--
|
||||
dlls/wined3d/stateblock.c | 2 ++
|
||||
dlls/wined3d/utils.c | 1 +
|
||||
@@ -15,10 +15,10 @@ Subject: wined3d: Add support for depth bias clamping.
|
||||
8 files changed, 29 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
|
||||
index 68d6cf0..9854906 100644
|
||||
index e6ba31c..f0ff7b3 100644
|
||||
--- a/dlls/d3d11/device.c
|
||||
+++ b/dlls/d3d11/device.c
|
||||
@@ -920,7 +920,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
|
||||
@@ -933,7 +933,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
|
||||
{
|
||||
DWORD d;
|
||||
float f;
|
||||
@@ -27,7 +27,7 @@ index 68d6cf0..9854906 100644
|
||||
|
||||
TRACE("iface %p, rasterizer_state %p.\n", iface, rasterizer_state);
|
||||
|
||||
@@ -932,6 +932,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
|
||||
@@ -945,6 +945,7 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_CULLMODE, WINED3D_CULL_BACK);
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SLOPESCALEDEPTHBIAS, 0);
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS, 0);
|
||||
@@ -35,7 +35,7 @@ index 68d6cf0..9854906 100644
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SCISSORTESTENABLE, FALSE);
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_MULTISAMPLEANTIALIAS, FALSE);
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_ANTIALIASEDLINEENABLE, FALSE);
|
||||
@@ -946,8 +947,10 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
|
||||
@@ -959,8 +960,10 @@ static void STDMETHODCALLTYPE d3d11_immediate_context_RSSetState(ID3D11DeviceCon
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_CULLMODE, desc->CullMode);
|
||||
scale_bias.f = desc->SlopeScaledDepthBias;
|
||||
const_bias.f = desc->DepthBias;
|
||||
@@ -46,23 +46,11 @@ index 68d6cf0..9854906 100644
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_SCISSORTESTENABLE, desc->ScissorEnable);
|
||||
wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_MULTISAMPLEANTIALIAS, desc->MultisampleEnable);
|
||||
wined3d_device_set_render_state(device->wined3d_device,
|
||||
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
|
||||
index 3f1ca8c..aea2cdf 100644
|
||||
--- a/dlls/wined3d/cs.c
|
||||
+++ b/dlls/wined3d/cs.c
|
||||
@@ -1065,6 +1065,7 @@ static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const
|
||||
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_STENCILENABLE));
|
||||
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_STENCILWRITEMASK));
|
||||
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_DEPTHBIAS));
|
||||
+ device_invalidate_state(device, STATE_RENDER(WINED3D_RS_DEPTHBIASCLAMP));
|
||||
}
|
||||
else if (prev && prev->format->depth_bias_scale != op->view->format->depth_bias_scale)
|
||||
{
|
||||
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
|
||||
index a4e4a0c..e595da5 100644
|
||||
--- a/dlls/wined3d/directx.c
|
||||
+++ b/dlls/wined3d/directx.c
|
||||
@@ -233,6 +233,7 @@ static const struct wined3d_extension_map gl_extension_map[] =
|
||||
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
|
||||
index 686c79a..dc49c88 100644
|
||||
--- a/dlls/wined3d/adapter_gl.c
|
||||
+++ b/dlls/wined3d/adapter_gl.c
|
||||
@@ -180,6 +180,7 @@ static const struct wined3d_extension_map gl_extension_map[] =
|
||||
{"GL_EXT_packed_depth_stencil", EXT_PACKED_DEPTH_STENCIL },
|
||||
{"GL_EXT_packed_float", EXT_PACKED_FLOAT },
|
||||
{"GL_EXT_point_parameters", EXT_POINT_PARAMETERS },
|
||||
@@ -70,7 +58,7 @@ index a4e4a0c..e595da5 100644
|
||||
{"GL_EXT_provoking_vertex", EXT_PROVOKING_VERTEX },
|
||||
{"GL_EXT_secondary_color", EXT_SECONDARY_COLOR },
|
||||
{"GL_EXT_stencil_two_side", EXT_STENCIL_TWO_SIDE },
|
||||
@@ -3117,6 +3118,8 @@ static void load_gl_funcs(struct wined3d_gl_info *gl_info)
|
||||
@@ -2473,6 +2474,8 @@ static void load_gl_funcs(struct wined3d_gl_info *gl_info)
|
||||
/* GL_EXT_point_parameters */
|
||||
USE_GL_FUNC(glPointParameterfEXT)
|
||||
USE_GL_FUNC(glPointParameterfvEXT)
|
||||
@@ -79,6 +67,18 @@ index a4e4a0c..e595da5 100644
|
||||
/* GL_EXT_provoking_vertex */
|
||||
USE_GL_FUNC(glProvokingVertexEXT)
|
||||
/* GL_EXT_secondary_color */
|
||||
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
|
||||
index d6bc739..515982c 100644
|
||||
--- a/dlls/wined3d/cs.c
|
||||
+++ b/dlls/wined3d/cs.c
|
||||
@@ -1124,6 +1124,7 @@ static void wined3d_cs_exec_set_depth_stencil_view(struct wined3d_cs *cs, const
|
||||
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_STENCILENABLE));
|
||||
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_STENCILWRITEMASK));
|
||||
device_invalidate_state(device, STATE_RENDER(WINED3D_RS_DEPTHBIAS));
|
||||
+ device_invalidate_state(device, STATE_RENDER(WINED3D_RS_DEPTHBIASCLAMP));
|
||||
}
|
||||
else if (prev && prev->format->depth_bias_scale != op->view->format->depth_bias_scale)
|
||||
{
|
||||
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
|
||||
index 3b2f845..2dd6ac2 100644
|
||||
--- a/dlls/wined3d/state.c
|
||||
@@ -138,10 +138,10 @@ index b4d1751..093c740 100644
|
||||
state->render_states[WINED3D_RS_WRAP9] = 0;
|
||||
state->render_states[WINED3D_RS_WRAP10] = 0;
|
||||
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
|
||||
index 7cecd8c..0152879 100644
|
||||
index 861f169..b46f67f 100644
|
||||
--- a/dlls/wined3d/utils.c
|
||||
+++ b/dlls/wined3d/utils.c
|
||||
@@ -4425,6 +4425,7 @@ const char *debug_d3drenderstate(enum wined3d_render_state state)
|
||||
@@ -4652,6 +4652,7 @@ const char *debug_d3drenderstate(enum wined3d_render_state state)
|
||||
D3DSTATE_TO_STR(WINED3D_RS_BLENDFACTOR);
|
||||
D3DSTATE_TO_STR(WINED3D_RS_SRGBWRITEENABLE);
|
||||
D3DSTATE_TO_STR(WINED3D_RS_DEPTHBIAS);
|
||||
@@ -162,10 +162,10 @@ index 525c298..883faaa 100644
|
||||
EXT_SECONDARY_COLOR,
|
||||
EXT_STENCIL_TWO_SIDE,
|
||||
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
|
||||
index bb4ad48..4a5d0dd 100644
|
||||
index 239ccd8..884e824 100644
|
||||
--- a/include/wine/wined3d.h
|
||||
+++ b/include/wine/wined3d.h
|
||||
@@ -386,8 +386,9 @@ enum wined3d_render_state
|
||||
@@ -399,8 +399,9 @@ enum wined3d_render_state
|
||||
WINED3D_RS_SRCBLENDALPHA = 207,
|
||||
WINED3D_RS_DESTBLENDALPHA = 208,
|
||||
WINED3D_RS_BLENDOPALPHA = 209,
|
||||
|
@@ -1,2 +1 @@
|
||||
Fixes: Implement support for more d3d11 depth options in RSSetState.
|
||||
Fixes: [43848] Implement support for depth bias clamping
|
||||
|
@@ -1,26 +0,0 @@
|
||||
From 34607775675c9475973fd249b8a68a59935b0391 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Thu, 30 Jul 2015 11:57:28 +1000
|
||||
Subject: d3dx9_36: Return a mesh in D3DXCreateTeapot
|
||||
|
||||
Fixes https://bugs.winehq.org/show_bug.cgi?id=36884
|
||||
---
|
||||
dlls/d3dx9_36/mesh.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c
|
||||
index 39d279d..59e385e4 100644
|
||||
--- a/dlls/d3dx9_36/mesh.c
|
||||
+++ b/dlls/d3dx9_36/mesh.c
|
||||
@@ -5153,7 +5153,7 @@ HRESULT WINAPI D3DXCreateTeapot(struct IDirect3DDevice9 *device,
|
||||
{
|
||||
FIXME("(%p, %p, %p): stub\n", device, mesh, adjacency);
|
||||
|
||||
- return E_NOTIMPL;
|
||||
+ return D3DXCreateSphere(device, 1.0f, 4, 4, mesh, adjacency);
|
||||
}
|
||||
|
||||
HRESULT WINAPI D3DXCreateTextA(struct IDirect3DDevice9 *device, HDC hdc, const char *text, float deviation,
|
||||
--
|
||||
2.5.0
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [36884] Return a valid mesh in D3DXCreateTeapot
|
@@ -1,4 +1,4 @@
|
||||
From 07d42b7a75491947866e6edb9d7746ca35274238 Mon Sep 17 00:00:00 2001
|
||||
From 25c2a52b1109022a01b8f59a22b8a04566af0d3c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 4 Mar 2016 22:22:42 +0100
|
||||
Subject: [PATCH] ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
|
||||
@@ -12,7 +12,7 @@ Subject: [PATCH] ddraw: Set ddsOldCaps correctly in ddraw7_GetCaps.
|
||||
5 files changed, 106 insertions(+)
|
||||
|
||||
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
|
||||
index ed90478..47f079f 100644
|
||||
index ed904785dd..47f079fb97 100644
|
||||
--- a/dlls/ddraw/ddraw.c
|
||||
+++ b/dlls/ddraw/ddraw.c
|
||||
@@ -1542,6 +1542,8 @@ static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DD
|
||||
@@ -25,10 +25,10 @@ index ed90478..47f079f 100644
|
||||
|
||||
if(DriverCaps)
|
||||
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
|
||||
index c767d3a..70d4b8f 100644
|
||||
index d4fe1f294a..29d9d3afb7 100644
|
||||
--- a/dlls/ddraw/tests/ddraw1.c
|
||||
+++ b/dlls/ddraw/tests/ddraw1.c
|
||||
@@ -11411,6 +11411,31 @@ static void test_execute_data(void)
|
||||
@@ -11538,6 +11538,31 @@ static void test_execute_data(void)
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ index c767d3a..70d4b8f 100644
|
||||
static void test_viewport(void)
|
||||
{
|
||||
static struct
|
||||
@@ -11686,6 +11711,7 @@ START_TEST(ddraw1)
|
||||
@@ -11815,6 +11840,7 @@ START_TEST(ddraw1)
|
||||
test_depth_readback();
|
||||
test_clear();
|
||||
test_enum_surfaces();
|
||||
@@ -69,10 +69,10 @@ index c767d3a..70d4b8f 100644
|
||||
test_viewport();
|
||||
}
|
||||
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
|
||||
index 794f90b..9c6055e 100644
|
||||
index 941d46bf42..752b39568d 100644
|
||||
--- a/dlls/ddraw/tests/ddraw2.c
|
||||
+++ b/dlls/ddraw/tests/ddraw2.c
|
||||
@@ -12673,6 +12673,31 @@ static void test_enum_surfaces(void)
|
||||
@@ -12800,6 +12800,31 @@ static void test_enum_surfaces(void)
|
||||
IDirectDraw2_Release(ddraw);
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ index 794f90b..9c6055e 100644
|
||||
static void test_viewport(void)
|
||||
{
|
||||
static struct
|
||||
@@ -12977,5 +13002,6 @@ START_TEST(ddraw2)
|
||||
@@ -13106,5 +13131,6 @@ START_TEST(ddraw2)
|
||||
test_depth_readback();
|
||||
test_clear();
|
||||
test_enum_surfaces();
|
||||
@@ -112,10 +112,10 @@ index 794f90b..9c6055e 100644
|
||||
test_viewport();
|
||||
}
|
||||
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
|
||||
index 172d99d..c036a6d 100644
|
||||
index e81472d4f2..4e083ec503 100644
|
||||
--- a/dlls/ddraw/tests/ddraw4.c
|
||||
+++ b/dlls/ddraw/tests/ddraw4.c
|
||||
@@ -14953,6 +14953,31 @@ static void test_viewport(void)
|
||||
@@ -15089,6 +15089,31 @@ static void test_viewport(void)
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
@@ -147,17 +147,17 @@ index 172d99d..c036a6d 100644
|
||||
START_TEST(ddraw4)
|
||||
{
|
||||
DDDEVICEIDENTIFIER identifier;
|
||||
@@ -15078,4 +15103,5 @@ START_TEST(ddraw4)
|
||||
@@ -15215,4 +15240,5 @@ START_TEST(ddraw4)
|
||||
test_clear();
|
||||
test_enum_surfaces();
|
||||
test_viewport();
|
||||
+ test_caps();
|
||||
}
|
||||
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
|
||||
index 7cbf408..095212b 100644
|
||||
index 70318a8492..f3dde436d3 100644
|
||||
--- a/dlls/ddraw/tests/ddraw7.c
|
||||
+++ b/dlls/ddraw/tests/ddraw7.c
|
||||
@@ -14417,6 +14417,31 @@ static void test_color_vertex(void)
|
||||
@@ -15035,6 +15035,31 @@ static void test_color_vertex(void)
|
||||
DestroyWindow(window);
|
||||
}
|
||||
|
||||
@@ -189,13 +189,13 @@ index 7cbf408..095212b 100644
|
||||
START_TEST(ddraw7)
|
||||
{
|
||||
DDDEVICEIDENTIFIER2 identifier;
|
||||
@@ -14552,5 +14577,6 @@ START_TEST(ddraw7)
|
||||
test_clear();
|
||||
@@ -15172,5 +15197,6 @@ START_TEST(ddraw7)
|
||||
test_enum_surfaces();
|
||||
test_viewport();
|
||||
test_device_load();
|
||||
+ test_caps();
|
||||
test_color_vertex();
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
2.18.0
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
Fixes: [45327] Stop access volation in League of Legends
|
||||
Fixes: [45568] League of Legends 8.12+ fails to start a game (anticheat engine, validation of loaded DLLs)
|
||||
|
@@ -1,26 +0,0 @@
|
||||
From 1b821d7a8398741a164800039535aaad396c299e Mon Sep 17 00:00:00 2001
|
||||
From: Nikolay Sivov <nsivov@codeweavers.com>
|
||||
Date: Tue, 31 Jul 2018 08:35:01 +0300
|
||||
Subject: [PATCH] dwrite: Avoid possible out-of-bounds cluster metrics access.
|
||||
|
||||
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
|
||||
---
|
||||
dlls/dwrite/layout.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/dwrite/layout.c b/dlls/dwrite/layout.c
|
||||
index 306c1178d4..903e7e8978 100644
|
||||
--- a/dlls/dwrite/layout.c
|
||||
+++ b/dlls/dwrite/layout.c
|
||||
@@ -2089,7 +2089,7 @@ static HRESULT layout_compute_effective_runs(struct dwrite_textlayout *layout)
|
||||
*/
|
||||
if (layout->len == 0)
|
||||
hr = layout_set_dummy_line_metrics(layout, 0);
|
||||
- else if (layout->clustermetrics[layout->cluster_count - 1].isNewline)
|
||||
+ else if (layout->cluster_count && layout->clustermetrics[layout->cluster_count - 1].isNewline)
|
||||
hr = layout_set_dummy_line_metrics(layout, layout->len - 1);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
--
|
||||
2.18.0
|
||||
|
@@ -1,2 +0,0 @@
|
||||
Fixes: [45535] - dwrite Correct out of access
|
||||
|
@@ -1,17 +1,16 @@
|
||||
From a08076678e154c913713221f8eea87c70c11d788 Mon Sep 17 00:00:00 2001
|
||||
From 04aceb5470fc9ca9133f7a6269144eb7aa8d6a10 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 13 Jun 2015 05:03:54 +0200
|
||||
Subject: iphlpapi: Fallback to system ping when ICMP permissions are not
|
||||
present.
|
||||
Subject: [PATCH] iphlpapi: Fallback to system ping when ICMP permissions are
|
||||
not present.
|
||||
|
||||
Based on an idea by Bruno Jesus.
|
||||
---
|
||||
dlls/iphlpapi/icmp.c | 256 ++++++++++++++++++++++++++++++++++++++++-
|
||||
dlls/iphlpapi/tests/iphlpapi.c | 2 +-
|
||||
2 files changed, 251 insertions(+), 7 deletions(-)
|
||||
dlls/iphlpapi/icmp.c | 256 +++++++++++++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 250 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/iphlpapi/icmp.c b/dlls/iphlpapi/icmp.c
|
||||
index ebc2f2b..330dd73a 100644
|
||||
index 0dc2f12..da3850b 100644
|
||||
--- a/dlls/iphlpapi/icmp.c
|
||||
+++ b/dlls/iphlpapi/icmp.c
|
||||
@@ -5,6 +5,7 @@
|
||||
@@ -50,7 +49,7 @@ index ebc2f2b..330dd73a 100644
|
||||
|
||||
#define USE_WS_PREFIX
|
||||
|
||||
@@ -209,6 +216,7 @@ DWORD WINAPI Icmp6SendEcho2(
|
||||
@@ -212,6 +219,7 @@ DWORD WINAPI Icmp6SendEcho2(
|
||||
*/
|
||||
HANDLE WINAPI IcmpCreateFile(VOID)
|
||||
{
|
||||
@@ -58,7 +57,7 @@ index ebc2f2b..330dd73a 100644
|
||||
icmp_t* icp;
|
||||
|
||||
int sid=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
|
||||
@@ -217,15 +225,14 @@ HANDLE WINAPI IcmpCreateFile(VOID)
|
||||
@@ -220,15 +228,14 @@ HANDLE WINAPI IcmpCreateFile(VOID)
|
||||
/* Mac OS X supports non-privileged ICMP via SOCK_DGRAM type. */
|
||||
sid=socket(AF_INET,SOCK_DGRAM,IPPROTO_ICMP);
|
||||
}
|
||||
@@ -78,7 +77,7 @@ index ebc2f2b..330dd73a 100644
|
||||
SetLastError(IP_NO_RESOURCES);
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
@@ -247,11 +254,242 @@ BOOL WINAPI IcmpCloseHandle(HANDLE IcmpHandle)
|
||||
@@ -250,11 +257,242 @@ BOOL WINAPI IcmpCloseHandle(HANDLE IcmpHandle)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -322,7 +321,7 @@ index ebc2f2b..330dd73a 100644
|
||||
|
||||
/***********************************************************************
|
||||
* IcmpSendEcho (IPHLPAPI.@)
|
||||
@@ -301,6 +539,12 @@ DWORD WINAPI IcmpSendEcho(
|
||||
@@ -308,6 +546,12 @@ DWORD WINAPI IcmpSendEcho(
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -335,25 +334,6 @@ index ebc2f2b..330dd73a 100644
|
||||
/* Prepare the request */
|
||||
id=getpid() & 0xFFFF;
|
||||
seq=InterlockedIncrement(&icmp_sequence) & 0xFFFF;
|
||||
diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c
|
||||
index 73e4302..f9c6b99 100644
|
||||
--- a/dlls/iphlpapi/tests/iphlpapi.c
|
||||
+++ b/dlls/iphlpapi/tests/iphlpapi.c
|
||||
@@ -1028,13 +1028,13 @@ todo_wine
|
||||
replysz = sizeof(ICMP_ECHO_REPLY) + ICMP_MINLEN;
|
||||
ret = pIcmpSendEcho(icmp, address, senddata, ICMP_MINLEN, NULL, replydata, replysz, 1000);
|
||||
error = GetLastError();
|
||||
-todo_wine
|
||||
ok (ret, "IcmpSendEcho failed unexpectedly with error %d\n", error);
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
replysz = sizeof(ICMP_ECHO_REPLY) + ICMP_MINLEN;
|
||||
ret = pIcmpSendEcho(icmp, address, senddata, ICMP_MINLEN + 1, NULL, replydata, replysz, 1000);
|
||||
error = GetLastError();
|
||||
+todo_wine
|
||||
ok (!ret, "IcmpSendEcho succeeded unexpectedly\n");
|
||||
todo_wine
|
||||
ok (error == IP_GENERAL_FAILURE
|
||||
--
|
||||
2.8.0
|
||||
1.9.1
|
||||
|
||||
|
@@ -1,289 +0,0 @@
|
||||
From fb031b7cf30e5258aa855019961bbdeafb3cfa78 Mon Sep 17 00:00:00 2001
|
||||
From: Jacek Caban <jacek@codeweavers.com>
|
||||
Date: Sat, 28 Jul 2018 10:49:59 +1000
|
||||
Subject: [PATCH] kernel32: Add AttachConsole implementation
|
||||
|
||||
---
|
||||
dlls/kernel32/console.c | 19 +++++-
|
||||
dlls/kernel32/tests/console.c | 131 +++++++++++++++++++++++++++++++++++++++---
|
||||
server/console.c | 43 ++++++++++++++
|
||||
server/protocol.def | 10 ++++
|
||||
4 files changed, 193 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/console.c b/dlls/kernel32/console.c
|
||||
index 51061de..1637a87 100644
|
||||
--- a/dlls/kernel32/console.c
|
||||
+++ b/dlls/kernel32/console.c
|
||||
@@ -2909,8 +2909,23 @@ BOOL WINAPI ScrollConsoleScreenBufferW(HANDLE hConsoleOutput, LPSMALL_RECT lpScr
|
||||
*/
|
||||
BOOL WINAPI AttachConsole(DWORD dwProcessId)
|
||||
{
|
||||
- FIXME("stub %x\n",dwProcessId);
|
||||
- return TRUE;
|
||||
+ BOOL ret;
|
||||
+
|
||||
+ TRACE("(%x)\n", dwProcessId);
|
||||
+
|
||||
+ SERVER_START_REQ( attach_console )
|
||||
+ {
|
||||
+ req->pid = dwProcessId;
|
||||
+ ret = !wine_server_call_err( req );
|
||||
+ if (ret)
|
||||
+ {
|
||||
+ SetStdHandle(STD_INPUT_HANDLE, wine_server_ptr_handle(reply->std_in));
|
||||
+ SetStdHandle(STD_OUTPUT_HANDLE, wine_server_ptr_handle(reply->std_out));
|
||||
+ SetStdHandle(STD_ERROR_HANDLE, wine_server_ptr_handle(reply->std_err));
|
||||
+ }
|
||||
+ }
|
||||
+ SERVER_END_REQ;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
/******************************************************************
|
||||
diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
|
||||
index ac77ab7..acd61d0 100644
|
||||
--- a/dlls/kernel32/tests/console.c
|
||||
+++ b/dlls/kernel32/tests/console.c
|
||||
@@ -208,19 +208,29 @@ static void testEmptyWrite(HANDLE hCon)
|
||||
okCURSOR(hCon, c);
|
||||
}
|
||||
|
||||
-static void testWriteSimple(HANDLE hCon)
|
||||
+static void simple_write_console(HANDLE console, const char *text)
|
||||
{
|
||||
- COORD c;
|
||||
- DWORD len;
|
||||
- const char* mytest = "abcdefg";
|
||||
- const int mylen = strlen(mytest);
|
||||
+ DWORD len;
|
||||
+ COORD c = {0, 0};
|
||||
+ BOOL ret;
|
||||
|
||||
/* single line write */
|
||||
c.X = c.Y = 0;
|
||||
- ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left\n");
|
||||
+ ok(SetConsoleCursorPosition(console, c) != 0, "Cursor in upper-left\n");
|
||||
+
|
||||
+ ret = WriteConsoleA(console, text, strlen(text), &len, NULL);
|
||||
+ ok(ret, "WriteConsoleA failed: %u\n", GetLastError());
|
||||
+ ok(len == strlen(text), "unexpected len %u\n", len);
|
||||
+}
|
||||
+
|
||||
+static void testWriteSimple(HANDLE hCon)
|
||||
+{
|
||||
+ const char* mytest = "abcdefg";
|
||||
+ int mylen = strlen(mytest);
|
||||
+ COORD c = {0, 0};
|
||||
+
|
||||
+ simple_write_console(hCon, mytest);
|
||||
|
||||
- ok(WriteConsoleA(hCon, mytest, mylen, &len, NULL) != 0 && len == mylen, "WriteConsole\n");
|
||||
- c.Y = 0;
|
||||
for (c.X = 0; c.X < mylen; c.X++)
|
||||
{
|
||||
okCHAR(hCon, c, mytest[c.X], TEST_ATTRIB);
|
||||
@@ -3019,6 +3029,98 @@ static void test_GetConsoleScreenBufferInfoEx(HANDLE std_output)
|
||||
ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError());
|
||||
}
|
||||
|
||||
+static void test_AttachConsole_child(DWORD console_pid)
|
||||
+{
|
||||
+ HANDLE pipe_in, pipe_out;
|
||||
+ COORD c = {0,0};
|
||||
+ HANDLE console;
|
||||
+ char buf[32];
|
||||
+ DWORD len;
|
||||
+ BOOL res;
|
||||
+
|
||||
+ res = CreatePipe(&pipe_in, &pipe_out, NULL, 0);
|
||||
+ ok(res, "CreatePipe failed: %u\n", GetLastError());
|
||||
+
|
||||
+ res = AttachConsole(console_pid);
|
||||
+ ok(!res && GetLastError() == ERROR_ACCESS_DENIED,
|
||||
+ "AttachConsole returned: %x(%u)\n", res, GetLastError());
|
||||
+
|
||||
+ res = FreeConsole();
|
||||
+ ok(res, "FreeConsole failed: %u\n", GetLastError());
|
||||
+
|
||||
+ SetStdHandle(STD_ERROR_HANDLE, pipe_out);
|
||||
+
|
||||
+ res = AttachConsole(console_pid);
|
||||
+ ok(res, "AttachConsole failed: %u\n", GetLastError());
|
||||
+
|
||||
+ ok(pipe_out != GetStdHandle(STD_ERROR_HANDLE), "std handle not set to console\n");
|
||||
+
|
||||
+ console = CreateFileA("CONOUT$", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
|
||||
+ ok(console != INVALID_HANDLE_VALUE, "Could not open console\n");
|
||||
+
|
||||
+ res = ReadConsoleOutputCharacterA(console, buf, 6, c, &len);
|
||||
+ ok(res, "ReadConsoleOutputCharacterA failed: %u\n", GetLastError());
|
||||
+ ok(len == 6, "len = %u\n", len);
|
||||
+ ok(!memcmp(buf, "Parent", 6), "Unexpected console output\n");
|
||||
+
|
||||
+ res = FreeConsole();
|
||||
+ ok(res, "FreeConsole failed: %u\n", GetLastError());
|
||||
+
|
||||
+ SetStdHandle(STD_INPUT_HANDLE, pipe_in);
|
||||
+ SetStdHandle(STD_OUTPUT_HANDLE, pipe_out);
|
||||
+
|
||||
+ res = AttachConsole(ATTACH_PARENT_PROCESS);
|
||||
+ ok(res, "AttachConsole failed: %u\n", GetLastError());
|
||||
+
|
||||
+ ok(pipe_in != GetStdHandle(STD_INPUT_HANDLE), "std handle not set to console\n");
|
||||
+ ok(pipe_out != GetStdHandle(STD_OUTPUT_HANDLE), "std handle not set to console\n");
|
||||
+
|
||||
+ console = CreateFileA("CONOUT$", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
|
||||
+ ok(console != INVALID_HANDLE_VALUE, "Could not open console\n");
|
||||
+
|
||||
+ res = ReadConsoleOutputCharacterA(console, buf, 6, c, &len);
|
||||
+ ok(res, "ReadConsoleOutputCharacterA failed: %u\n", GetLastError());
|
||||
+ ok(len == 6, "len = %u\n", len);
|
||||
+ ok(!memcmp(buf, "Parent", 6), "Unexpected console output\n");
|
||||
+
|
||||
+ simple_write_console(console, "Child");
|
||||
+ CloseHandle(console);
|
||||
+
|
||||
+ res = FreeConsole();
|
||||
+ ok(res, "FreeConsole failed: %u\n", GetLastError());
|
||||
+
|
||||
+ res = CloseHandle(pipe_in);
|
||||
+ ok(res, "pipe_in is no longer valid\n");
|
||||
+ res = CloseHandle(pipe_out);
|
||||
+ ok(res, "pipe_out is no longer valid\n");
|
||||
+}
|
||||
+
|
||||
+static void test_AttachConsole(HANDLE console)
|
||||
+{
|
||||
+ STARTUPINFOA si = { sizeof(si) };
|
||||
+ PROCESS_INFORMATION info;
|
||||
+ char **argv, buf[MAX_PATH];
|
||||
+ COORD c = {0,0};
|
||||
+ DWORD len;
|
||||
+ BOOL res;
|
||||
+
|
||||
+ simple_write_console(console, "Parent console");
|
||||
+
|
||||
+ winetest_get_mainargs(&argv);
|
||||
+ sprintf(buf, "\"%s\" console attach_console %x", argv[0], GetCurrentProcessId());
|
||||
+ res = CreateProcessA(NULL, buf, NULL, NULL, TRUE, 0, NULL, NULL, &si, &info);
|
||||
+ ok(res, "CreateProcess failed: %u\n", GetLastError());
|
||||
+ CloseHandle(info.hThread);
|
||||
+
|
||||
+ winetest_wait_child_process(info.hProcess);
|
||||
+ CloseHandle(info.hProcess);
|
||||
+
|
||||
+ res = ReadConsoleOutputCharacterA(console, buf, 5, c, &len);
|
||||
+ ok(res, "ReadConsoleOutputCharacterA failed: %u\n", GetLastError());
|
||||
+ ok(len == 5, "len = %u\n", len);
|
||||
+ ok(!memcmp(buf, "Child", 5), "Unexpected console output\n");
|
||||
+}
|
||||
+
|
||||
START_TEST(console)
|
||||
{
|
||||
static const char font_name[] = "Lucida Console";
|
||||
@@ -3030,9 +3132,21 @@ START_TEST(console)
|
||||
char old_font[LF_FACESIZE];
|
||||
BOOL delete = FALSE;
|
||||
DWORD size;
|
||||
+ char **argv;
|
||||
+ int argc;
|
||||
|
||||
init_function_pointers();
|
||||
|
||||
+ argc = winetest_get_mainargs(&argv);
|
||||
+
|
||||
+ if (argc > 3 && !strcmp(argv[2], "attach_console"))
|
||||
+ {
|
||||
+ DWORD parent_pid;
|
||||
+ sscanf(argv[3], "%x", &parent_pid);
|
||||
+ test_AttachConsole_child(parent_pid);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
/* be sure we have a clean console (and that's our own)
|
||||
* FIXME: this will make the test fail (currently) if we don't run
|
||||
* under X11
|
||||
@@ -3170,4 +3284,5 @@ START_TEST(console)
|
||||
test_GetConsoleFontInfo(hConOut);
|
||||
test_SetConsoleFont(hConOut);
|
||||
test_GetConsoleScreenBufferInfoEx(hConOut);
|
||||
+ test_AttachConsole(hConOut);
|
||||
}
|
||||
diff --git a/server/console.c b/server/console.c
|
||||
index 058c8ce..8460a7f 100644
|
||||
--- a/server/console.c
|
||||
+++ b/server/console.c
|
||||
@@ -1546,6 +1546,49 @@ DECL_HANDLER(open_console)
|
||||
else if (!get_error()) set_error( STATUS_ACCESS_DENIED );
|
||||
}
|
||||
|
||||
+/* attach to a other process's console */
|
||||
+DECL_HANDLER(attach_console)
|
||||
+{
|
||||
+ struct process *process;
|
||||
+
|
||||
+ if (current->process->console)
|
||||
+ {
|
||||
+ set_error( STATUS_ACCESS_DENIED );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ process = get_process_from_id( req->pid == ATTACH_PARENT_PROCESS
|
||||
+ ? current->process->parent_id : req->pid );
|
||||
+ if (!process) return;
|
||||
+
|
||||
+ if (process->console && process->console->active )
|
||||
+ {
|
||||
+ reply->std_in = alloc_handle( current->process, process->console, GENERIC_READ, 0 );
|
||||
+ if (!reply->std_in) goto error;
|
||||
+
|
||||
+ reply->std_out = alloc_handle( current->process, process->console->active, GENERIC_WRITE, 0 );
|
||||
+ if (!reply->std_out) goto error;
|
||||
+
|
||||
+ reply->std_err = alloc_handle( current->process, process->console->active, GENERIC_WRITE, 0 );
|
||||
+ if (!reply->std_err) goto error;
|
||||
+
|
||||
+ current->process->console = (struct console_input*)grab_object( process->console );
|
||||
+ current->process->console->num_proc++;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ set_error( STATUS_INVALID_HANDLE );
|
||||
+ }
|
||||
+
|
||||
+ release_object( process );
|
||||
+ return;
|
||||
+
|
||||
+error:
|
||||
+ if (reply->std_in) close_handle( current->process, reply->std_in);
|
||||
+ if (reply->std_out) close_handle( current->process, reply->std_out);
|
||||
+ release_object( process );
|
||||
+}
|
||||
+
|
||||
/* set info about a console input */
|
||||
DECL_HANDLER(set_console_input_info)
|
||||
{
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 5d89c2b..c8bb3b1 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -1463,6 +1463,16 @@ struct console_renderer_event
|
||||
@END
|
||||
|
||||
|
||||
+/* Attach to a other process's console */
|
||||
+@REQ(attach_console)
|
||||
+ process_id_t pid; /* pid of attached console process */
|
||||
+@REPLY
|
||||
+ obj_handle_t std_in; /* attached stdin */
|
||||
+ obj_handle_t std_out; /* attached stdout */
|
||||
+ obj_handle_t std_err; /* attached stderr */
|
||||
+@END
|
||||
+
|
||||
+
|
||||
/* Get the input queue wait event */
|
||||
@REQ(get_console_wait_event)
|
||||
@REPLY
|
||||
--
|
||||
1.9.1
|
||||
|
@@ -1,2 +0,0 @@
|
||||
Fixes: [41573] AttachConsole implementation.
|
||||
Fixes: [43910] "Battle.net helper.exe" [NOT BLIZZARD APP!] crashes with Win 7 or higher
|
@@ -1,4 +1,4 @@
|
||||
From ca172d5f44df90a62426572ef6f461b27bf57689 Mon Sep 17 00:00:00 2001
|
||||
From de4b7a3055065faed4cdc9ca253248eed5a3a7bb Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 15 Nov 2016 13:02:13 +0800
|
||||
Subject: [PATCH] kernel32: MoveFile(source, source) should succeed.
|
||||
@@ -11,7 +11,7 @@ Subject: [PATCH] kernel32: MoveFile(source, source) should succeed.
|
||||
4 files changed, 14 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
|
||||
index bde58e9..c7c5cbd 100644
|
||||
index bde58e9dc4..c7c5cbd3f7 100644
|
||||
--- a/dlls/kernel32/path.c
|
||||
+++ b/dlls/kernel32/path.c
|
||||
@@ -1354,7 +1354,7 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest,
|
||||
@@ -59,7 +59,7 @@ index bde58e9..c7c5cbd 100644
|
||||
RtlFreeAnsiString( &dest_unix );
|
||||
return FALSE;
|
||||
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
|
||||
index ef4eebc..07b3ffb 100644
|
||||
index ef4eebc31c..07b3ffb77b 100644
|
||||
--- a/dlls/kernel32/tests/file.c
|
||||
+++ b/dlls/kernel32/tests/file.c
|
||||
@@ -1886,7 +1886,7 @@ static void test_MoveFileA(void)
|
||||
@@ -72,7 +72,7 @@ index ef4eebc..07b3ffb 100644
|
||||
ret = MoveFileA(source, dest);
|
||||
ok(!ret && GetLastError() == ERROR_ALREADY_EXISTS,
|
||||
diff --git a/dlls/msvcp120/tests/msvcp120.c b/dlls/msvcp120/tests/msvcp120.c
|
||||
index db9517d..7275e28 100644
|
||||
index d7b82a3aae..5141622d6a 100644
|
||||
--- a/dlls/msvcp120/tests/msvcp120.c
|
||||
+++ b/dlls/msvcp120/tests/msvcp120.c
|
||||
@@ -1524,7 +1524,7 @@ static void test_tr2_sys__Rename(void)
|
||||
@@ -85,7 +85,7 @@ index db9517d..7275e28 100644
|
||||
errno = 0xdeadbeef;
|
||||
if(tests[i].val == ERROR_SUCCESS) {
|
||||
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
|
||||
index ea4157c..298c4e9 100644
|
||||
index ea4157c09d..298c4e9a9e 100644
|
||||
--- a/programs/cmd/tests/test_builtins.cmd.exp
|
||||
+++ b/programs/cmd/tests/test_builtins.cmd.exp
|
||||
@@ -1295,8 +1295,8 @@ file move succeeded
|
||||
@@ -100,5 +100,5 @@ index ea4157c..298c4e9 100644
|
||||
simple directory move succeeded
|
||||
moving a directory to itself gives error; errlevel 1
|
||||
--
|
||||
1.9.1
|
||||
2.18.0
|
||||
|
||||
|
@@ -1,16 +1,16 @@
|
||||
From 6e5c9277d35def4b312820f11ef8a7586f788124 Mon Sep 17 00:00:00 2001
|
||||
From 8031fda3ffc4d2469524f21198ef0aaf9725562e Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 15 Nov 2016 13:32:42 +0800
|
||||
Subject: [PATCH] kernel32: MoveFile should make sure that it has the delete
|
||||
access to the source file.
|
||||
|
||||
---
|
||||
dlls/kernel32/path.c | 6 ++++--
|
||||
dlls/kernel32/path.c | 4 ++--
|
||||
dlls/kernel32/tests/file.c | 20 ++++++++------------
|
||||
2 files changed, 12 insertions(+), 14 deletions(-)
|
||||
2 files changed, 10 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
|
||||
index c7c5cbd..855330b 100644
|
||||
index c7c5cbd3f7..5388586094 100644
|
||||
--- a/dlls/kernel32/path.c
|
||||
+++ b/dlls/kernel32/path.c
|
||||
@@ -1383,7 +1383,8 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest,
|
||||
@@ -23,18 +23,16 @@ index c7c5cbd..855330b 100644
|
||||
if (status == STATUS_SUCCESS)
|
||||
status = wine_nt_to_unix_file_name( &nt_name, &source_unix, FILE_OPEN, FALSE );
|
||||
RtlFreeUnicodeString( &nt_name );
|
||||
@@ -1411,7 +1412,8 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest,
|
||||
@@ -1407,7 +1408,6 @@ BOOL WINAPI MoveFileWithProgressW( LPCWSTR source, LPCWSTR dest,
|
||||
SetLastError( ERROR_PATH_NOT_FOUND );
|
||||
goto error;
|
||||
}
|
||||
-
|
||||
options = FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT;
|
||||
if (flag & MOVEFILE_WRITE_THROUGH)
|
||||
options |= FILE_WRITE_THROUGH;
|
||||
- status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io, 0, options );
|
||||
+ status = NtOpenFile( &dest_handle, GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, &attr, &io,
|
||||
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, options );
|
||||
if (status == STATUS_SUCCESS) /* destination exists */
|
||||
{
|
||||
if (!(flag & MOVEFILE_REPLACE_EXISTING))
|
||||
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
|
||||
index 07b3ffb..4729e75 100644
|
||||
index 07b3ffb77b..4729e75728 100644
|
||||
--- a/dlls/kernel32/tests/file.c
|
||||
+++ b/dlls/kernel32/tests/file.c
|
||||
@@ -1906,12 +1906,10 @@ static void test_MoveFileA(void)
|
||||
@@ -72,5 +70,5 @@ index 07b3ffb..4729e75 100644
|
||||
CloseHandle(hmapfile);
|
||||
CloseHandle(hfile);
|
||||
--
|
||||
1.9.1
|
||||
2.18.0
|
||||
|
||||
|
@@ -34,7 +34,7 @@ index e242cb4c0f..fa0ca2da00 100644
|
||||
+ ov.hEvent = CreateEventA(NULL, TRUE, FALSE, NULL);
|
||||
+ ok(ov.hEvent != INVALID_HANDLE_VALUE, "CreateEvent failed, error %u\n", GetLastError());
|
||||
+
|
||||
+ status = create_pipe(&pipe, FILE_SHARE_READ | FILE_SHARE_WRITE, 0 /* OVERLAPPED */);
|
||||
+ status = create_pipe(&pipe, FILE_SHARE_READ | FILE_SHARE_WRITE, 0 /* OVERLAPPED */, 0);
|
||||
+ ok(!status, "NtCreateNamedPipeFile returned %x\n", status);
|
||||
+ status = listen_pipe(pipe, ov.hEvent, &iosb, FALSE);
|
||||
+ ok(status == STATUS_PENDING, "NtFsControlFile returned %x\n", status);
|
||||
|
@@ -1,141 +0,0 @@
|
||||
From 4944b0ed67011898a68fb244bdd947a15ef1c8ab Mon Sep 17 00:00:00 2001
|
||||
From: Michael Stefaniuc <mstefani@winehq.org>
|
||||
Date: Wed, 18 Jul 2018 18:37:52 +0200
|
||||
Subject: [PATCH] windowscodecs: Use the ARRAY_SIZE() macro
|
||||
|
||||
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
|
||||
---
|
||||
dlls/windowscodecs/bitmap.c | 2 +-
|
||||
dlls/windowscodecs/bmpencode.c | 2 +-
|
||||
dlls/windowscodecs/jpegformat.c | 2 +-
|
||||
dlls/windowscodecs/metadataquery.c | 10 +++++-----
|
||||
dlls/windowscodecs/pngformat.c | 4 ++--
|
||||
dlls/windowscodecs/tiffformat.c | 2 +-
|
||||
6 files changed, 11 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/dlls/windowscodecs/bitmap.c b/dlls/windowscodecs/bitmap.c
|
||||
index f8414962f2..116fd3134a 100644
|
||||
--- a/dlls/windowscodecs/bitmap.c
|
||||
+++ b/dlls/windowscodecs/bitmap.c
|
||||
@@ -555,7 +555,7 @@ static HRESULT WINAPI IMILBitmapImpl_GetPixelFormat(IMILBitmapSource *iface,
|
||||
|
||||
*format = 0;
|
||||
|
||||
- for (i = 0; i < sizeof(pixel_fmt_map)/sizeof(pixel_fmt_map[0]); i++)
|
||||
+ for (i = 0; i < ARRAY_SIZE(pixel_fmt_map); i++)
|
||||
{
|
||||
if (IsEqualGUID(pixel_fmt_map[i].WIC_format, &This->pixelformat))
|
||||
{
|
||||
diff --git a/dlls/windowscodecs/bmpencode.c b/dlls/windowscodecs/bmpencode.c
|
||||
index 97f30d7197..aa65675a98 100644
|
||||
--- a/dlls/windowscodecs/bmpencode.c
|
||||
+++ b/dlls/windowscodecs/bmpencode.c
|
||||
@@ -529,7 +529,7 @@ static HRESULT WINAPI BmpEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
|
||||
|
||||
if (ppIEncoderOptions)
|
||||
{
|
||||
- hr = CreatePropertyBag2(opts, sizeof(opts)/sizeof(opts[0]), ppIEncoderOptions);
|
||||
+ hr = CreatePropertyBag2(opts, ARRAY_SIZE(opts), ppIEncoderOptions);
|
||||
if (FAILED(hr)) return hr;
|
||||
}
|
||||
|
||||
diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c
|
||||
index f05663f070..d24af6dc9e 100644
|
||||
--- a/dlls/windowscodecs/jpegformat.c
|
||||
+++ b/dlls/windowscodecs/jpegformat.c
|
||||
@@ -1463,7 +1463,7 @@ static HRESULT WINAPI JpegEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
|
||||
|
||||
if (ppIEncoderOptions)
|
||||
{
|
||||
- hr = CreatePropertyBag2(opts, sizeof(opts)/sizeof(opts[0]), ppIEncoderOptions);
|
||||
+ hr = CreatePropertyBag2(opts, ARRAY_SIZE(opts), ppIEncoderOptions);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
LeaveCriticalSection(&This->lock);
|
||||
diff --git a/dlls/windowscodecs/metadataquery.c b/dlls/windowscodecs/metadataquery.c
|
||||
index e33884881b..2d7c918921 100644
|
||||
--- a/dlls/windowscodecs/metadataquery.c
|
||||
+++ b/dlls/windowscodecs/metadataquery.c
|
||||
@@ -164,7 +164,7 @@ static VARTYPE map_type(struct string_t *str)
|
||||
{
|
||||
UINT i;
|
||||
|
||||
- for (i = 0; i < sizeof(str2vt)/sizeof(str2vt[0]); i++)
|
||||
+ for (i = 0; i < ARRAY_SIZE(str2vt); i++)
|
||||
{
|
||||
if (str2vt[i].len == str->len)
|
||||
{
|
||||
@@ -743,7 +743,7 @@ HRESULT WINAPI WICMapGuidToShortName(REFGUID guid, UINT len, WCHAR *name, UINT *
|
||||
|
||||
if (!guid) return E_INVALIDARG;
|
||||
|
||||
- for (i = 0; i < sizeof(guid2name)/sizeof(guid2name[0]); i++)
|
||||
+ for (i = 0; i < ARRAY_SIZE(guid2name); i++)
|
||||
{
|
||||
if (IsEqualGUID(guid, guid2name[i].guid))
|
||||
{
|
||||
@@ -774,7 +774,7 @@ HRESULT WINAPI WICMapShortNameToGuid(PCWSTR name, GUID *guid)
|
||||
|
||||
if (!name || !guid) return E_INVALIDARG;
|
||||
|
||||
- for (i = 0; i < sizeof(guid2name)/sizeof(guid2name[0]); i++)
|
||||
+ for (i = 0; i < ARRAY_SIZE(guid2name); i++)
|
||||
{
|
||||
if (!lstrcmpiW(name, guid2name[i].name))
|
||||
{
|
||||
@@ -884,7 +884,7 @@ static const WCHAR *map_shortname_to_schema(const GUID *format, const WCHAR *nam
|
||||
!IsEqualGUID(format, &GUID_MetadataFormatXMPStruct))
|
||||
return NULL;
|
||||
|
||||
- for (i = 0; i < sizeof(name2schema)/sizeof(name2schema[0]); i++)
|
||||
+ for (i = 0; i < ARRAY_SIZE(name2schema); i++)
|
||||
{
|
||||
if (!lstrcmpW(name2schema[i].name, name))
|
||||
return name2schema[i].schema;
|
||||
@@ -909,7 +909,7 @@ HRESULT WINAPI WICMapSchemaToName(REFGUID format, LPWSTR schema, UINT len, WCHAR
|
||||
!IsEqualGUID(format, &GUID_MetadataFormatXMPStruct))
|
||||
return WINCODEC_ERR_PROPERTYNOTFOUND;
|
||||
|
||||
- for (i = 0; i < sizeof(name2schema)/sizeof(name2schema[0]); i++)
|
||||
+ for (i = 0; i < ARRAY_SIZE(name2schema); i++)
|
||||
{
|
||||
if (!lstrcmpW(name2schema[i].schema, schema))
|
||||
{
|
||||
diff --git a/dlls/windowscodecs/pngformat.c b/dlls/windowscodecs/pngformat.c
|
||||
index fd0d197bb3..6b13112130 100644
|
||||
--- a/dlls/windowscodecs/pngformat.c
|
||||
+++ b/dlls/windowscodecs/pngformat.c
|
||||
@@ -1441,7 +1441,7 @@ static HRESULT WINAPI PngFrameEncode_Initialize(IWICBitmapFrameEncode *iface,
|
||||
|
||||
if (pIEncoderOptions)
|
||||
{
|
||||
- hr = IPropertyBag2_Read(pIEncoderOptions, sizeof(opts)/sizeof(opts[0]), opts, NULL, opt_values, opt_hres);
|
||||
+ hr = IPropertyBag2_Read(pIEncoderOptions, ARRAY_SIZE(opts), opts, NULL, opt_values, opt_hres);
|
||||
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
@@ -2046,7 +2046,7 @@ static HRESULT WINAPI PngEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
|
||||
|
||||
if (ppIEncoderOptions)
|
||||
{
|
||||
- hr = CreatePropertyBag2(opts, sizeof(opts)/sizeof(opts[0]), ppIEncoderOptions);
|
||||
+ hr = CreatePropertyBag2(opts, ARRAY_SIZE(opts), ppIEncoderOptions);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
LeaveCriticalSection(&This->lock);
|
||||
diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c
|
||||
index 2b2f84f859..966ab3eb4b 100644
|
||||
--- a/dlls/windowscodecs/tiffformat.c
|
||||
+++ b/dlls/windowscodecs/tiffformat.c
|
||||
@@ -1956,7 +1956,7 @@ static HRESULT WINAPI TiffEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
|
||||
|
||||
if (ppIEncoderOptions && SUCCEEDED(hr))
|
||||
{
|
||||
- hr = CreatePropertyBag2(opts, sizeof(opts)/sizeof(opts[0]), ppIEncoderOptions);
|
||||
+ hr = CreatePropertyBag2(opts, ARRAY_SIZE(opts), ppIEncoderOptions);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
VARIANT v;
|
||||
--
|
||||
2.14.4
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user