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
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3b5ea332d6 | ||
|
81e3e6dafa | ||
|
41cb9f5179 | ||
|
41e15516bd | ||
|
6347bdd1fc | ||
|
677b445b0d | ||
|
a2f82c5c85 | ||
|
cfe1b94e0f | ||
|
2be4bfb8fe | ||
|
cae1b3eba0 | ||
|
32b29ad4d8 | ||
|
a6054cf2e9 |
@@ -1,81 +0,0 @@
|
||||
From 7e73f449d158f0d6a6b6b421d073dbaf1741e1c7 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:22:11 +0200
|
||||
Subject: server: Correctly treat zero access mask in duplicate_token
|
||||
wineserver call.
|
||||
|
||||
---
|
||||
dlls/advapi32/tests/security.c | 14 +++++++-------
|
||||
server/token.c | 3 ++-
|
||||
2 files changed, 9 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index 4a03db27e69..f1a64e29dea 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -7438,7 +7438,7 @@ static void test_token_security_descriptor(void)
|
||||
ret = DuplicateTokenEx(token4, 0, NULL, SecurityImpersonation, TokenImpersonation, &token5);
|
||||
ok(ret, "DuplicateTokenEx failed with error %u\n", GetLastError());
|
||||
ret = SetThreadToken(NULL, token5);
|
||||
- todo_wine ok(ret, "SetThreadToken failed with error %u\n", GetLastError());
|
||||
+ ok(ret, "SetThreadToken failed with error %u\n", GetLastError());
|
||||
CloseHandle(token4);
|
||||
|
||||
/* Restrict current process token while impersonating a medium integrity token */
|
||||
@@ -7503,16 +7503,16 @@ static void test_token_security_descriptor(void)
|
||||
|
||||
size = 0;
|
||||
ret = GetKernelObjectSecurity(token6, LABEL_SECURITY_INFORMATION, NULL, 0, &size);
|
||||
- todo_wine ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER,
|
||||
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER,
|
||||
"Unexpected GetKernelObjectSecurity return value %u, error %u\n", ret, GetLastError());
|
||||
|
||||
sd3 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
|
||||
ret = GetKernelObjectSecurity(token6, LABEL_SECURITY_INFORMATION, sd3, size, &size);
|
||||
- todo_wine ok(ret, "GetKernelObjectSecurity failed with error %u\n", GetLastError());
|
||||
+ ok(ret, "GetKernelObjectSecurity failed with error %u\n", GetLastError());
|
||||
|
||||
sacl = NULL;
|
||||
ret = GetSecurityDescriptorSacl(sd3, &present, &sacl, &defaulted);
|
||||
- todo_wine ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
|
||||
+ ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
|
||||
todo_wine ok(present, "No SACL in the security descriptor\n");
|
||||
todo_wine ok(sacl != NULL, "NULL SACL in the security descriptor\n");
|
||||
|
||||
@@ -7606,16 +7606,16 @@ static void test_token_security_descriptor(void)
|
||||
|
||||
size = 0;
|
||||
ret = GetKernelObjectSecurity(token4, LABEL_SECURITY_INFORMATION, NULL, 0, &size);
|
||||
- todo_wine ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER,
|
||||
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER,
|
||||
"Unexpected GetKernelObjectSecurity return value %u, error %u\n", ret, GetLastError());
|
||||
|
||||
sd3 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
|
||||
ret = GetKernelObjectSecurity(token4, LABEL_SECURITY_INFORMATION, sd3, size, &size);
|
||||
- todo_wine ok(ret, "GetKernelObjectSecurity failed with error %u\n", GetLastError());
|
||||
+ ok(ret, "GetKernelObjectSecurity failed with error %u\n", GetLastError());
|
||||
|
||||
sacl = NULL;
|
||||
ret = GetSecurityDescriptorSacl(sd3, &present, &sacl, &defaulted);
|
||||
- todo_wine ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
|
||||
+ ok(ret, "GetSecurityDescriptorSacl failed with error %u\n", GetLastError());
|
||||
todo_wine ok(present, "No SACL in the security descriptor\n");
|
||||
todo_wine ok(sacl != NULL, "NULL SACL in the security descriptor\n");
|
||||
|
||||
diff --git a/server/token.c b/server/token.c
|
||||
index 6a1085bae12..292e1df80fd 100644
|
||||
--- a/server/token.c
|
||||
+++ b/server/token.c
|
||||
@@ -1376,7 +1376,8 @@ DECL_HANDLER(duplicate_token)
|
||||
struct token *token = token_duplicate( src_token, req->primary, req->impersonation_level, sd, NULL, 0, NULL, 0 );
|
||||
if (token)
|
||||
{
|
||||
- reply->new_handle = alloc_handle_no_access_check( current->process, token, req->access, objattr->attributes );
|
||||
+ unsigned int access = req->access ? req->access : get_handle_access( current->process, req->handle );
|
||||
+ reply->new_handle = alloc_handle_no_access_check( current->process, token, access, objattr->attributes );
|
||||
release_object( token );
|
||||
}
|
||||
release_object( src_token );
|
||||
--
|
||||
2.13.1
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 39c92b48498d080c4d90e9b8d16c580dd72b1941 Mon Sep 17 00:00:00 2001
|
||||
From 645cdde83d5430c5096fcb4ec4191aab7e8063ce Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Fri, 5 Jul 2019 13:20:23 +0800
|
||||
Subject: [PATCH] cryptext: Implement CryptExtOpenCER.
|
||||
@@ -17,31 +17,31 @@ Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
create mode 100644 dlls/cryptext/tests/cryptext.c
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index f1de2c4052..ed79a35e0e 100755
|
||||
index 8567a9ca4ef..9b4ff8a2d7a 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -20063,6 +20063,7 @@ wine_fn_config_makefile dlls/crypt32/tests enable_tests
|
||||
@@ -20276,6 +20276,7 @@ wine_fn_config_makefile dlls/crypt32/tests enable_tests
|
||||
wine_fn_config_makefile dlls/cryptdlg enable_cryptdlg
|
||||
wine_fn_config_makefile dlls/cryptdll enable_cryptdll
|
||||
wine_fn_config_makefile dlls/cryptext enable_cryptext
|
||||
+wine_fn_config_makefile dlls/cryptext/tests enable_tests
|
||||
wine_fn_config_makefile dlls/cryptnet enable_cryptnet
|
||||
wine_fn_config_makefile dlls/cryptnet/tests enable_tests
|
||||
wine_fn_config_makefile dlls/cryptui enable_cryptui
|
||||
wine_fn_config_makefile dlls/cryptsp enable_cryptsp
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index a7c45ace73..e801c35c46 100644
|
||||
index 0549a9ee78a..b58b05d4dd7 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3049,6 +3049,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests)
|
||||
@@ -3070,6 +3070,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptdlg)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptdll)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptext)
|
||||
+WINE_CONFIG_MAKEFILE(dlls/cryptext/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptnet)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptnet/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptui)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptsp)
|
||||
diff --git a/dlls/cryptext/Makefile.in b/dlls/cryptext/Makefile.in
|
||||
index 9c9f84cee8..0e817ffda6 100644
|
||||
index 9c9f84cee87..0e817ffda6c 100644
|
||||
--- a/dlls/cryptext/Makefile.in
|
||||
+++ b/dlls/cryptext/Makefile.in
|
||||
@@ -1,4 +1,5 @@
|
||||
@@ -52,7 +52,7 @@ index 9c9f84cee8..0e817ffda6 100644
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
diff --git a/dlls/cryptext/cryptext.spec b/dlls/cryptext/cryptext.spec
|
||||
index 0dba38e393..911ab2f4ba 100644
|
||||
index 0dba38e3934..911ab2f4ba4 100644
|
||||
--- a/dlls/cryptext/cryptext.spec
|
||||
+++ b/dlls/cryptext/cryptext.spec
|
||||
@@ -12,8 +12,8 @@
|
||||
@@ -67,7 +67,7 @@ index 0dba38e393..911ab2f4ba 100644
|
||||
@ stub CryptExtOpenCRLW
|
||||
@ stub CryptExtOpenCTL
|
||||
diff --git a/dlls/cryptext/cryptext_main.c b/dlls/cryptext/cryptext_main.c
|
||||
index f7c7bd1f55..2a381782d6 100644
|
||||
index f7c7bd1f554..2a381782d68 100644
|
||||
--- a/dlls/cryptext/cryptext_main.c
|
||||
+++ b/dlls/cryptext/cryptext_main.c
|
||||
@@ -22,10 +22,29 @@
|
||||
@@ -151,7 +151,7 @@ index f7c7bd1f55..2a381782d6 100644
|
||||
+}
|
||||
diff --git a/dlls/cryptext/tests/Makefile.in b/dlls/cryptext/tests/Makefile.in
|
||||
new file mode 100644
|
||||
index 0000000000..522fc60a4a
|
||||
index 00000000000..522fc60a4af
|
||||
--- /dev/null
|
||||
+++ b/dlls/cryptext/tests/Makefile.in
|
||||
@@ -0,0 +1,4 @@
|
||||
@@ -161,7 +161,7 @@ index 0000000000..522fc60a4a
|
||||
+ cryptext.c
|
||||
diff --git a/dlls/cryptext/tests/cryptext.c b/dlls/cryptext/tests/cryptext.c
|
||||
new file mode 100644
|
||||
index 0000000000..cc62a772b5
|
||||
index 00000000000..cc62a772b59
|
||||
--- /dev/null
|
||||
+++ b/dlls/cryptext/tests/cryptext.c
|
||||
@@ -0,0 +1,61 @@
|
||||
@@ -227,5 +227,5 @@ index 0000000000..cc62a772b5
|
||||
+ test_CryptExtOpenCER();
|
||||
+}
|
||||
--
|
||||
2.17.1
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,56 +0,0 @@
|
||||
From bbc93f065045b7854f4446d9199c2c22c6251d3d Mon Sep 17 00:00:00 2001
|
||||
From: Christian Costa <titan.costa@gmail.com>
|
||||
Date: Sun, 30 Jul 2017 23:50:18 +0200
|
||||
Subject: [PATCH] d3dx9: Return D3DFMT_A8R8G8B8 in
|
||||
D3DXGetImageInfoFromFileInMemory for 32 bpp BMP with alpha.
|
||||
|
||||
---
|
||||
dlls/d3dx9_36/surface.c | 18 ++++++++++++++++++
|
||||
dlls/d3dx9_36/tests/surface.c | 2 +-
|
||||
2 files changed, 19 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
|
||||
index a2eca9cbdb..b670657125 100644
|
||||
--- a/dlls/d3dx9_36/surface.c
|
||||
+++ b/dlls/d3dx9_36/surface.c
|
||||
@@ -980,6 +980,24 @@ HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(const void *data, UINT datasize,
|
||||
}
|
||||
}
|
||||
|
||||
+ /* For 32 bpp BMP, windowscodecs.dll never returns a format with alpha while
|
||||
+ * d3dx9_xx.dll returns one if at least 1 pixel has a non zero alpha component */
|
||||
+ if (SUCCEEDED(hr) && (info->Format == D3DFMT_X8R8G8B8) && (info->ImageFileFormat == D3DXIFF_BMP)) {
|
||||
+ DWORD size = sizeof(DWORD) * info->Width * info->Height;
|
||||
+ BYTE *buffer = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
+ hr = IWICBitmapFrameDecode_CopyPixels(frame, NULL, sizeof(DWORD) * info->Width, size, buffer);
|
||||
+ if (SUCCEEDED(hr)) {
|
||||
+ DWORD i;
|
||||
+ for (i = 0; i < info->Width * info->Height; i++) {
|
||||
+ if (buffer[i*4+3]) {
|
||||
+ info->Format = D3DFMT_A8R8G8B8;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ HeapFree(GetProcessHeap(), 0, buffer);
|
||||
+ }
|
||||
+
|
||||
if (frame)
|
||||
IWICBitmapFrameDecode_Release(frame);
|
||||
|
||||
diff --git a/dlls/d3dx9_36/tests/surface.c b/dlls/d3dx9_36/tests/surface.c
|
||||
index 04ce57fa4f..db0c9c7291 100644
|
||||
--- a/dlls/d3dx9_36/tests/surface.c
|
||||
+++ b/dlls/d3dx9_36/tests/surface.c
|
||||
@@ -616,7 +616,7 @@ static void test_D3DXGetImageInfo(void)
|
||||
ok(info.Format == D3DFMT_X8R8G8B8, "Got unexpected format %u.\n", info.Format);
|
||||
hr = D3DXGetImageInfoFromFileInMemory(bmp_32bpp_argb, sizeof(bmp_32bpp_argb), &info);
|
||||
ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
|
||||
- todo_wine ok(info.Format == D3DFMT_A8R8G8B8, "Got unexpected format %u.\n", info.Format);
|
||||
+ ok(info.Format == D3DFMT_A8R8G8B8, "Got unexpected format %u.\n", info.Format);
|
||||
|
||||
/* Grayscale PNG */
|
||||
hr = D3DXGetImageInfoFromFileInMemory(png_grayscale, sizeof(png_grayscale), &info);
|
||||
--
|
||||
2.21.0
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [48563] Runaway: A Twist of Fate renders its cursor incorrectly
|
@@ -1,4 +1,4 @@
|
||||
From e5418972013afdb97f857e49d0beb06833b3b474 Mon Sep 17 00:00:00 2001
|
||||
From 45b0af272838c1b28dee3dd50c588af888604f59 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Thu, 7 Jun 2018 20:09:59 -0500
|
||||
Subject: [PATCH] server: Create server objects for eventfd-based
|
||||
@@ -28,7 +28,7 @@ index b58ce1e3002..5f225fd0591 100644
|
||||
file.c \
|
||||
diff --git a/server/esync.c b/server/esync.c
|
||||
new file mode 100644
|
||||
index 00000000000..b8b257281bf
|
||||
index 00000000000..a571855c70a
|
||||
--- /dev/null
|
||||
+++ b/server/esync.c
|
||||
@@ -0,0 +1,320 @@
|
||||
@@ -152,8 +152,8 @@ index 00000000000..b8b257281bf
|
||||
+static const struct object_ops esync_ops =
|
||||
+{
|
||||
+ sizeof(struct esync), /* size */
|
||||
+ &no_type, /* type */
|
||||
+ esync_dump, /* dump */
|
||||
+ no_get_type, /* get_type */
|
||||
+ no_add_queue, /* add_queue */
|
||||
+ NULL, /* remove_queue */
|
||||
+ NULL, /* signaled */
|
||||
@@ -403,10 +403,10 @@ index dae08339874..f68888d0fa8 100644
|
||||
set_current_time();
|
||||
init_scheduler();
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index eba14534b9d..63fe88f9dda 100644
|
||||
index abccc0a1275..f41afda0251 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -3657,3 +3657,27 @@ struct handle_info
|
||||
@@ -3695,3 +3695,27 @@ struct handle_info
|
||||
@REQ(resume_process)
|
||||
obj_handle_t handle; /* process handle */
|
||||
@END
|
||||
@@ -435,5 +435,5 @@ index eba14534b9d..63fe88f9dda 100644
|
||||
+ unsigned int shm_idx;
|
||||
+@END
|
||||
--
|
||||
2.29.2
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From fd3e782fbebdfbac412ab3ee9ba01c2a562b61ee Mon Sep 17 00:00:00 2001
|
||||
From b528c37ea124f6c84bf2383a75ae50dc6f12b571 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 6 Jul 2020 12:09:22 -0500
|
||||
Subject: [PATCH] ntdll: Create eventfd-based objects for semaphores.
|
||||
@@ -16,7 +16,7 @@ Subject: [PATCH] ntdll: Create eventfd-based objects for semaphores.
|
||||
create mode 100644 dlls/ntdll/unix/esync.h
|
||||
|
||||
diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in
|
||||
index f39ffb42c6f..f742d084906 100644
|
||||
index 258274ac529..1c3fb065ecf 100644
|
||||
--- a/dlls/ntdll/Makefile.in
|
||||
+++ b/dlls/ntdll/Makefile.in
|
||||
@@ -46,6 +46,7 @@ C_SRCS = \
|
||||
@@ -348,10 +348,10 @@ index 00000000000..a50a755149a
|
||||
+
|
||||
+extern int receive_fd( obj_handle_t *handle ) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
|
||||
index c2b6ea603e3..ab2d9e347c3 100644
|
||||
index bcd1635e75c..52e61feb43a 100644
|
||||
--- a/dlls/ntdll/unix/loader.c
|
||||
+++ b/dlls/ntdll/unix/loader.c
|
||||
@@ -86,6 +86,7 @@
|
||||
@@ -89,6 +89,7 @@
|
||||
#include "winioctl.h"
|
||||
#include "winternl.h"
|
||||
#include "unix_private.h"
|
||||
@@ -359,16 +359,16 @@ index c2b6ea603e3..ab2d9e347c3 100644
|
||||
#include "wine/list.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
@@ -1564,6 +1565,7 @@ static void start_main_thread(void)
|
||||
@@ -1626,6 +1627,7 @@ static void start_main_thread(void)
|
||||
signal_init_thread( teb );
|
||||
dbg_init();
|
||||
server_init_process();
|
||||
startup_info_size = server_init_thread( teb->Peb, &suspend );
|
||||
startup_info_size = server_init_process();
|
||||
+ esync_init();
|
||||
virtual_map_user_shared_data();
|
||||
init_cpu_info();
|
||||
init_files();
|
||||
diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c
|
||||
index 7236f0acb83..971341bf6e0 100644
|
||||
index 7b469959f66..3063a13efb5 100644
|
||||
--- a/dlls/ntdll/unix/server.c
|
||||
+++ b/dlls/ntdll/unix/server.c
|
||||
@@ -112,7 +112,7 @@ timeout_t server_start_time = 0; /* time of server startup */
|
||||
@@ -380,7 +380,7 @@ index 7236f0acb83..971341bf6e0 100644
|
||||
|
||||
/* atomically exchange a 64-bit value */
|
||||
static inline LONG64 interlocked_xchg64( LONG64 *dest, LONG64 val )
|
||||
@@ -813,7 +813,7 @@ void CDECL wine_server_send_fd( int fd )
|
||||
@@ -832,7 +832,7 @@ void CDECL wine_server_send_fd( int fd )
|
||||
*
|
||||
* Receive a file descriptor passed from the server.
|
||||
*/
|
||||
@@ -390,7 +390,7 @@ index 7236f0acb83..971341bf6e0 100644
|
||||
struct iovec vec;
|
||||
struct msghdr msghdr;
|
||||
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
|
||||
index bba7af7e34f..663a170fc61 100644
|
||||
index 383e9c93273..19e1494a9b8 100644
|
||||
--- a/dlls/ntdll/unix/sync.c
|
||||
+++ b/dlls/ntdll/unix/sync.c
|
||||
@@ -72,6 +72,7 @@
|
||||
@@ -424,5 +424,5 @@ index b8b257281bf..226e70cd1ad 100644
|
||||
int do_esync(void)
|
||||
{
|
||||
--
|
||||
2.28.0
|
||||
2.29.2
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 05c4a58d8cc0fbafc760d3a0d4d6c14975e33fe2 Mon Sep 17 00:00:00 2001
|
||||
From e3bc0f8b38f7f68fe132db47a0fc239af4843181 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 6 Jul 2020 15:11:12 -0500
|
||||
Subject: [PATCH] server: Create eventfd file descriptors for process objects.
|
||||
@@ -11,7 +11,7 @@ Subject: [PATCH] server: Create eventfd file descriptors for process objects.
|
||||
4 files changed, 35 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/server/esync.c b/server/esync.c
|
||||
index cfbbcf55c48..61513333bfd 100644
|
||||
index d61dfdcd956..e18b76bff5b 100644
|
||||
--- a/server/esync.c
|
||||
+++ b/server/esync.c
|
||||
@@ -297,6 +297,24 @@ struct esync *create_esync( struct object *root, const struct unicode_str *name,
|
||||
@@ -49,7 +49,7 @@ index 7ca4ca89394..6a0a367124d 100644
|
||||
void esync_init(void);
|
||||
+int esync_create_fd( int initval, int flags );
|
||||
diff --git a/server/process.c b/server/process.c
|
||||
index 30699fbaeae..febfc0237c6 100644
|
||||
index e95c33132e6..7cf8953f47e 100644
|
||||
--- a/server/process.c
|
||||
+++ b/server/process.c
|
||||
@@ -49,6 +49,7 @@
|
||||
@@ -58,9 +58,9 @@ index 30699fbaeae..febfc0237c6 100644
|
||||
#include "security.h"
|
||||
+#include "esync.h"
|
||||
|
||||
/* process structure */
|
||||
/* process object */
|
||||
|
||||
@@ -68,6 +69,7 @@ static struct security_descriptor *process_get_sd( struct object *obj );
|
||||
@@ -81,6 +82,7 @@ static struct security_descriptor *process_get_sd( struct object *obj );
|
||||
static void process_poll_event( struct fd *fd, int event );
|
||||
static struct list *process_get_kernel_obj_list( struct object *obj );
|
||||
static void process_destroy( struct object *obj );
|
||||
@@ -68,7 +68,7 @@ index 30699fbaeae..febfc0237c6 100644
|
||||
static void terminate_process( struct process *process, struct thread *skip, int exit_code );
|
||||
|
||||
static const struct object_ops process_ops =
|
||||
@@ -78,7 +80,7 @@ static const struct object_ops process_ops =
|
||||
@@ -91,7 +93,7 @@ static const struct object_ops process_ops =
|
||||
add_queue, /* add_queue */
|
||||
remove_queue, /* remove_queue */
|
||||
process_signaled, /* signaled */
|
||||
@@ -77,7 +77,7 @@ index 30699fbaeae..febfc0237c6 100644
|
||||
no_satisfied, /* satisfied */
|
||||
no_signal, /* signal */
|
||||
no_get_fd, /* get_fd */
|
||||
@@ -545,6 +547,7 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
|
||||
@@ -553,6 +555,7 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
|
||||
process->trace_data = 0;
|
||||
process->rawinput_mouse = NULL;
|
||||
process->rawinput_kbd = NULL;
|
||||
@@ -85,7 +85,7 @@ index 30699fbaeae..febfc0237c6 100644
|
||||
list_init( &process->kernel_object );
|
||||
list_init( &process->thread_list );
|
||||
list_init( &process->locks );
|
||||
@@ -601,6 +604,9 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
|
||||
@@ -609,6 +612,9 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
|
||||
if (!token_assign_label( process->token, security_high_label_sid ))
|
||||
goto error;
|
||||
|
||||
@@ -95,7 +95,7 @@ index 30699fbaeae..febfc0237c6 100644
|
||||
set_fd_events( process->msg_fd, POLLIN ); /* start listening to events */
|
||||
return process;
|
||||
|
||||
@@ -649,6 +655,7 @@ static void process_destroy( struct object *obj )
|
||||
@@ -655,6 +661,7 @@ static void process_destroy( struct object *obj )
|
||||
if (process->id) free_ptid( process->id );
|
||||
if (process->token) release_object( process->token );
|
||||
free( process->dir_cache );
|
||||
@@ -103,7 +103,7 @@ index 30699fbaeae..febfc0237c6 100644
|
||||
}
|
||||
|
||||
/* dump a process on stdout for debugging purposes */
|
||||
@@ -673,6 +680,13 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
|
||||
@@ -672,6 +679,13 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
|
||||
return !process->running_threads;
|
||||
}
|
||||
|
||||
@@ -116,12 +116,12 @@ index 30699fbaeae..febfc0237c6 100644
|
||||
+
|
||||
static unsigned int process_map_access( struct object *obj, unsigned int access )
|
||||
{
|
||||
if (access & GENERIC_READ) access |= STANDARD_RIGHTS_READ | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
|
||||
access = default_map_access( obj, access );
|
||||
diff --git a/server/process.h b/server/process.h
|
||||
index 56092e5b1ac..eec69ddbcaf 100644
|
||||
index caab869c8a0..afa90581b97 100644
|
||||
--- a/server/process.h
|
||||
+++ b/server/process.h
|
||||
@@ -98,6 +98,7 @@ struct process
|
||||
@@ -95,6 +95,7 @@ struct process
|
||||
const struct rawinput_device *rawinput_mouse; /* rawinput mouse device, if any */
|
||||
const struct rawinput_device *rawinput_kbd; /* rawinput keyboard device, if any */
|
||||
struct list kernel_object; /* list of kernel object pointers */
|
||||
@@ -130,5 +130,5 @@ index 56092e5b1ac..eec69ddbcaf 100644
|
||||
|
||||
#define CPU_FLAG(cpu) (1 << (cpu))
|
||||
--
|
||||
2.28.0
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 3ff6192702c06e77ef2e6790215ec3a40216052f Mon Sep 17 00:00:00 2001
|
||||
From 0ffe77334eaf10be9a241dae48cf772228abde3b Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Fri, 8 Jun 2018 21:01:24 -0500
|
||||
Subject: [PATCH] server: Create eventfd file descriptors for event objects.
|
||||
@@ -13,7 +13,7 @@ This lets system processes shut down.
|
||||
3 files changed, 36 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/server/esync.c b/server/esync.c
|
||||
index 5f6e60ab24c..cb9bfba4463 100644
|
||||
index 2b9307267f9..975e5d2ddd6 100644
|
||||
--- a/server/esync.c
|
||||
+++ b/server/esync.c
|
||||
@@ -331,6 +331,14 @@ void esync_wake_up( struct object *obj )
|
||||
@@ -41,7 +41,7 @@ index 1e12560ddd6..fcbfd0989bb 100644
|
||||
void esync_wake_up( struct object *obj );
|
||||
+void esync_clear( int fd );
|
||||
diff --git a/server/event.c b/server/event.c
|
||||
index 06655fc7dd6..a416d214912 100644
|
||||
index 490fd9875bd..0938a73f648 100644
|
||||
--- a/server/event.c
|
||||
+++ b/server/event.c
|
||||
@@ -35,6 +35,7 @@
|
||||
@@ -50,9 +50,9 @@ index 06655fc7dd6..a416d214912 100644
|
||||
#include "security.h"
|
||||
+#include "esync.h"
|
||||
|
||||
struct event
|
||||
{
|
||||
@@ -42,15 +43,18 @@ struct event
|
||||
static const WCHAR event_name[] = {'E','v','e','n','t'};
|
||||
|
||||
@@ -56,13 +57,16 @@ struct event
|
||||
struct list kernel_object; /* list of kernel object pointers */
|
||||
int manual_reset; /* is it a manual reset event? */
|
||||
int signaled; /* event has been signaled */
|
||||
@@ -60,18 +60,16 @@ index 06655fc7dd6..a416d214912 100644
|
||||
};
|
||||
|
||||
static void event_dump( struct object *obj, int verbose );
|
||||
static struct object_type *event_get_type( struct object *obj );
|
||||
static int event_signaled( struct object *obj, struct wait_queue_entry *entry );
|
||||
static void event_satisfied( struct object *obj, struct wait_queue_entry *entry );
|
||||
+static int event_get_esync_fd( struct object *obj, enum esync_type *type );
|
||||
static unsigned int event_map_access( struct object *obj, unsigned int access );
|
||||
static int event_signal( struct object *obj, unsigned int access);
|
||||
static struct list *event_get_kernel_obj_list( struct object *obj );
|
||||
+static void event_destroy( struct object *obj );
|
||||
|
||||
static const struct object_ops event_ops =
|
||||
{
|
||||
@@ -60,7 +64,7 @@ static const struct object_ops event_ops =
|
||||
@@ -72,7 +76,7 @@ static const struct object_ops event_ops =
|
||||
add_queue, /* add_queue */
|
||||
remove_queue, /* remove_queue */
|
||||
event_signaled, /* signaled */
|
||||
@@ -80,7 +78,7 @@ index 06655fc7dd6..a416d214912 100644
|
||||
event_satisfied, /* satisfied */
|
||||
event_signal, /* signal */
|
||||
no_get_fd, /* get_fd */
|
||||
@@ -74,7 +78,7 @@ static const struct object_ops event_ops =
|
||||
@@ -86,7 +90,7 @@ static const struct object_ops event_ops =
|
||||
no_open_file, /* open_file */
|
||||
event_get_kernel_obj_list, /* get_kernel_obj_list */
|
||||
no_close_handle, /* close_handle */
|
||||
@@ -89,7 +87,7 @@ index 06655fc7dd6..a416d214912 100644
|
||||
};
|
||||
|
||||
|
||||
@@ -128,6 +132,9 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
|
||||
@@ -152,6 +156,9 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
|
||||
list_init( &event->kernel_object );
|
||||
event->manual_reset = manual_reset;
|
||||
event->signaled = initial_state;
|
||||
@@ -99,7 +97,7 @@ index 06655fc7dd6..a416d214912 100644
|
||||
}
|
||||
}
|
||||
return event;
|
||||
@@ -156,6 +163,9 @@ void set_event( struct event *event )
|
||||
@@ -180,6 +187,9 @@ void set_event( struct event *event )
|
||||
void reset_event( struct event *event )
|
||||
{
|
||||
event->signaled = 0;
|
||||
@@ -109,7 +107,7 @@ index 06655fc7dd6..a416d214912 100644
|
||||
}
|
||||
|
||||
static void event_dump( struct object *obj, int verbose )
|
||||
@@ -180,6 +190,13 @@ static int event_signaled( struct object *obj, struct wait_queue_entry *entry )
|
||||
@@ -197,6 +207,13 @@ static int event_signaled( struct object *obj, struct wait_queue_entry *entry )
|
||||
return event->signaled;
|
||||
}
|
||||
|
||||
@@ -123,7 +121,7 @@ index 06655fc7dd6..a416d214912 100644
|
||||
static void event_satisfied( struct object *obj, struct wait_queue_entry *entry )
|
||||
{
|
||||
struct event *event = (struct event *)obj;
|
||||
@@ -217,6 +234,14 @@ static struct list *event_get_kernel_obj_list( struct object *obj )
|
||||
@@ -225,6 +242,14 @@ static struct list *event_get_kernel_obj_list( struct object *obj )
|
||||
return &event->kernel_object;
|
||||
}
|
||||
|
||||
@@ -139,5 +137,5 @@ index 06655fc7dd6..a416d214912 100644
|
||||
unsigned int attr, const struct security_descriptor *sd )
|
||||
{
|
||||
--
|
||||
2.28.0
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 21ef43501fbef2d5ded6890932294b1160ccc810 Mon Sep 17 00:00:00 2001
|
||||
From 949b61856a56c339cbe6f8ec88a34902e200ae8e Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Fri, 8 Jun 2018 21:43:37 -0500
|
||||
Subject: [PATCH] server: Allow (re)setting esync events on the server side.
|
||||
@@ -17,7 +17,7 @@ so this is how we do it.
|
||||
3 files changed, 42 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/server/esync.c b/server/esync.c
|
||||
index cb9bfba4463..ddee22432e5 100644
|
||||
index 975e5d2ddd6..ac59779a454 100644
|
||||
--- a/server/esync.c
|
||||
+++ b/server/esync.c
|
||||
@@ -116,7 +116,7 @@ struct esync
|
||||
@@ -28,7 +28,7 @@ index cb9bfba4463..ddee22432e5 100644
|
||||
+const struct object_ops esync_ops =
|
||||
{
|
||||
sizeof(struct esync), /* size */
|
||||
esync_dump, /* dump */
|
||||
&no_type, /* type */
|
||||
@@ -339,6 +339,26 @@ void esync_clear( int fd )
|
||||
read( fd, &value, sizeof(value) );
|
||||
}
|
||||
@@ -71,10 +71,10 @@ index fcbfd0989bb..aeb58c5469c 100644
|
||||
+void esync_set_event( struct esync *esync );
|
||||
+void esync_reset_event( struct esync *esync );
|
||||
diff --git a/server/event.c b/server/event.c
|
||||
index a416d214912..b6f989d4d6a 100644
|
||||
index 78d90dac5d6..bc2948c30aa 100644
|
||||
--- a/server/event.c
|
||||
+++ b/server/event.c
|
||||
@@ -142,6 +142,10 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
|
||||
@@ -154,6 +154,10 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
|
||||
|
||||
struct event *get_event_obj( struct process *process, obj_handle_t handle, unsigned int access )
|
||||
{
|
||||
@@ -85,7 +85,7 @@ index a416d214912..b6f989d4d6a 100644
|
||||
return (struct event *)get_handle_obj( process, handle, access, &event_ops );
|
||||
}
|
||||
|
||||
@@ -155,6 +159,12 @@ void pulse_event( struct event *event )
|
||||
@@ -167,6 +171,12 @@ void pulse_event( struct event *event )
|
||||
|
||||
void set_event( struct event *event )
|
||||
{
|
||||
@@ -98,7 +98,7 @@ index a416d214912..b6f989d4d6a 100644
|
||||
event->signaled = 1;
|
||||
/* wake up all waiters if manual reset, a single one otherwise */
|
||||
wake_up( &event->obj, !event->manual_reset );
|
||||
@@ -162,6 +172,11 @@ void set_event( struct event *event )
|
||||
@@ -174,6 +184,11 @@ void set_event( struct event *event )
|
||||
|
||||
void reset_event( struct event *event )
|
||||
{
|
||||
@@ -111,5 +111,5 @@ index a416d214912..b6f989d4d6a 100644
|
||||
|
||||
if (do_esync())
|
||||
--
|
||||
2.28.0
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 882fe7c0815814c912722d663c981c411e7314f5 Mon Sep 17 00:00:00 2001
|
||||
From 5bfa95c3058d8c869e7555514b05dc877a842e42 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Fri, 8 Jun 2018 22:04:29 -0500
|
||||
Subject: [PATCH] server: Create eventfd file descriptors for thread objects.
|
||||
@@ -9,18 +9,18 @@ Subject: [PATCH] server: Create eventfd file descriptors for thread objects.
|
||||
2 files changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/server/thread.c b/server/thread.c
|
||||
index 2d2a80a61ef..c52057d1f50 100644
|
||||
index 8432d0aa8ed..d4b88be3897 100644
|
||||
--- a/server/thread.c
|
||||
+++ b/server/thread.c
|
||||
@@ -172,6 +172,7 @@ static const struct object_ops context_ops =
|
||||
@@ -186,6 +186,7 @@ struct type_descr thread_type =
|
||||
|
||||
static void dump_thread( struct object *obj, int verbose );
|
||||
static struct object_type *thread_get_type( struct object *obj );
|
||||
static int thread_signaled( struct object *obj, struct wait_queue_entry *entry );
|
||||
+static int thread_get_esync_fd( struct object *obj, enum esync_type *type );
|
||||
static unsigned int thread_map_access( struct object *obj, unsigned int access );
|
||||
static void thread_poll_event( struct fd *fd, int event );
|
||||
static struct list *thread_get_kernel_obj_list( struct object *obj );
|
||||
@@ -185,7 +186,7 @@ static const struct object_ops thread_ops =
|
||||
@@ -199,7 +200,7 @@ static const struct object_ops thread_ops =
|
||||
add_queue, /* add_queue */
|
||||
remove_queue, /* remove_queue */
|
||||
thread_signaled, /* signaled */
|
||||
@@ -29,15 +29,15 @@ index 2d2a80a61ef..c52057d1f50 100644
|
||||
no_satisfied, /* satisfied */
|
||||
no_signal, /* signal */
|
||||
no_get_fd, /* get_fd */
|
||||
@@ -225,6 +226,7 @@ static inline void init_thread_structure( struct thread *thread )
|
||||
@@ -239,6 +240,7 @@ static inline void init_thread_structure( struct thread *thread )
|
||||
thread->context = NULL;
|
||||
thread->teb = 0;
|
||||
thread->entry_point = 0;
|
||||
+ thread->esync_fd = -1;
|
||||
thread->debug_obj = NULL;
|
||||
thread->system_regs = 0;
|
||||
thread->queue = NULL;
|
||||
@@ -361,6 +363,9 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
|
||||
thread->wait = NULL;
|
||||
@@ -374,6 +376,9 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ index 2d2a80a61ef..c52057d1f50 100644
|
||||
set_fd_events( thread->request_fd, POLLIN ); /* start listening to events */
|
||||
add_process_thread( thread->process, thread );
|
||||
return thread;
|
||||
@@ -441,6 +446,9 @@ static void destroy_thread( struct object *obj )
|
||||
@@ -453,6 +458,9 @@ static void destroy_thread( struct object *obj )
|
||||
if (thread->exit_poll) remove_timeout_user( thread->exit_poll );
|
||||
if (thread->id) free_ptid( thread->id );
|
||||
if (thread->token) release_object( thread->token );
|
||||
@@ -57,7 +57,7 @@ index 2d2a80a61ef..c52057d1f50 100644
|
||||
}
|
||||
|
||||
/* dump a thread on stdout for debugging purposes */
|
||||
@@ -466,6 +474,13 @@ static int thread_signaled( struct object *obj, struct wait_queue_entry *entry )
|
||||
@@ -471,6 +479,13 @@ static int thread_signaled( struct object *obj, struct wait_queue_entry *entry )
|
||||
return mythread->state == TERMINATED && !mythread->exit_poll;
|
||||
}
|
||||
|
||||
@@ -70,9 +70,9 @@ index 2d2a80a61ef..c52057d1f50 100644
|
||||
+
|
||||
static unsigned int thread_map_access( struct object *obj, unsigned int access )
|
||||
{
|
||||
if (access & GENERIC_READ) access |= STANDARD_RIGHTS_READ | THREAD_QUERY_INFORMATION | THREAD_GET_CONTEXT;
|
||||
access = default_map_access( obj, access );
|
||||
diff --git a/server/thread.h b/server/thread.h
|
||||
index 4a8c5b1cb2c..e6a9f987c9e 100644
|
||||
index 077ab0929ba..99904557d44 100644
|
||||
--- a/server/thread.h
|
||||
+++ b/server/thread.h
|
||||
@@ -54,6 +54,7 @@ struct thread
|
||||
@@ -80,9 +80,9 @@ index 4a8c5b1cb2c..e6a9f987c9e 100644
|
||||
thread_id_t id; /* thread id */
|
||||
struct list mutex_list; /* list of currently owned mutexes */
|
||||
+ int esync_fd; /* esync file descriptor (signalled on exit) */
|
||||
struct debug_obj *debug_obj; /* debugger context if this thread is a debugger */
|
||||
unsigned int system_regs; /* which system regs have been set */
|
||||
struct msg_queue *queue; /* message queue */
|
||||
struct thread_wait *wait; /* current wait condition if sleeping */
|
||||
--
|
||||
2.29.2
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 9e3d043ea15a1814f2003b7c6ebe6968b51b7740 Mon Sep 17 00:00:00 2001
|
||||
From 1ad0cfe6a328fd4ffdbce2c61e1cc7c822391734 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Fri, 15 Jun 2018 11:01:44 -0500
|
||||
Subject: [PATCH] server: Create eventfd descriptors for timers.
|
||||
@@ -8,7 +8,7 @@ Subject: [PATCH] server: Create eventfd descriptors for timers.
|
||||
1 file changed, 18 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/server/timer.c b/server/timer.c
|
||||
index 319b9d142db..11fcdf3bae7 100644
|
||||
index 23d03aa3582..43b40a13032 100644
|
||||
--- a/server/timer.c
|
||||
+++ b/server/timer.c
|
||||
@@ -36,6 +36,7 @@
|
||||
@@ -17,9 +17,9 @@ index 319b9d142db..11fcdf3bae7 100644
|
||||
#include "request.h"
|
||||
+#include "esync.h"
|
||||
|
||||
struct timer
|
||||
{
|
||||
@@ -48,11 +49,13 @@ struct timer
|
||||
static const WCHAR timer_name[] = {'T','i','m','e','r'};
|
||||
|
||||
@@ -62,10 +63,12 @@ struct timer
|
||||
struct thread *thread; /* thread that set the APC function */
|
||||
client_ptr_t callback; /* callback APC function */
|
||||
client_ptr_t arg; /* callback argument */
|
||||
@@ -27,13 +27,12 @@ index 319b9d142db..11fcdf3bae7 100644
|
||||
};
|
||||
|
||||
static void timer_dump( struct object *obj, int verbose );
|
||||
static struct object_type *timer_get_type( struct object *obj );
|
||||
static int timer_signaled( struct object *obj, struct wait_queue_entry *entry );
|
||||
+static int timer_get_esync_fd( struct object *obj, enum esync_type *type );
|
||||
static void timer_satisfied( struct object *obj, struct wait_queue_entry *entry );
|
||||
static unsigned int timer_map_access( struct object *obj, unsigned int access );
|
||||
static void timer_destroy( struct object *obj );
|
||||
@@ -65,7 +68,7 @@ static const struct object_ops timer_ops =
|
||||
|
||||
@@ -77,7 +80,7 @@ static const struct object_ops timer_ops =
|
||||
add_queue, /* add_queue */
|
||||
remove_queue, /* remove_queue */
|
||||
timer_signaled, /* signaled */
|
||||
@@ -42,7 +41,7 @@ index 319b9d142db..11fcdf3bae7 100644
|
||||
timer_satisfied, /* satisfied */
|
||||
no_signal, /* signal */
|
||||
no_get_fd, /* get_fd */
|
||||
@@ -100,6 +103,10 @@ static struct timer *create_timer( struct object *root, const struct unicode_str
|
||||
@@ -112,6 +115,10 @@ static struct timer *create_timer( struct object *root, const struct unicode_str
|
||||
timer->period = 0;
|
||||
timer->timeout = NULL;
|
||||
timer->thread = NULL;
|
||||
@@ -53,7 +52,7 @@ index 319b9d142db..11fcdf3bae7 100644
|
||||
}
|
||||
}
|
||||
return timer;
|
||||
@@ -173,6 +180,9 @@ static int set_timer( struct timer *timer, timeout_t expire, unsigned int period
|
||||
@@ -185,6 +192,9 @@ static int set_timer( struct timer *timer, timeout_t expire, unsigned int period
|
||||
{
|
||||
period = 0; /* period doesn't make any sense for a manual timer */
|
||||
timer->signaled = 0;
|
||||
@@ -63,7 +62,7 @@ index 319b9d142db..11fcdf3bae7 100644
|
||||
}
|
||||
timer->when = (expire <= 0) ? expire - monotonic_time : max( expire, current_time );
|
||||
timer->period = period;
|
||||
@@ -207,6 +217,13 @@ static int timer_signaled( struct object *obj, struct wait_queue_entry *entry )
|
||||
@@ -212,6 +222,13 @@ static int timer_signaled( struct object *obj, struct wait_queue_entry *entry )
|
||||
return timer->signaled;
|
||||
}
|
||||
|
||||
@@ -78,5 +77,5 @@ index 319b9d142db..11fcdf3bae7 100644
|
||||
{
|
||||
struct timer *timer = (struct timer *)obj;
|
||||
--
|
||||
2.28.0
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 607d2418e9997885192791cb54a9cdfdaf77eee1 Mon Sep 17 00:00:00 2001
|
||||
From abe8fc2432fa484ab121005ad21a92c0c27668b7 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 6 Jul 2020 17:17:31 -0500
|
||||
Subject: [PATCH] ntdll, server: Implement alertable waits.
|
||||
@@ -244,10 +244,10 @@ index aeb58c5469c..cea025d9308 100644
|
||||
void esync_clear( int fd );
|
||||
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index e60d6f7e8dd..34eaff6207c 100644
|
||||
index f2ad5a88b28..56237afdcad 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -3718,3 +3718,7 @@ enum esync_type
|
||||
@@ -3717,3 +3717,7 @@ enum esync_type
|
||||
@REQ(esync_msgwait)
|
||||
int in_msgwait; /* are we in a message wait? */
|
||||
@END
|
||||
@@ -256,7 +256,7 @@ index e60d6f7e8dd..34eaff6207c 100644
|
||||
+@REQ(get_esync_apc_fd)
|
||||
+@END
|
||||
diff --git a/server/thread.c b/server/thread.c
|
||||
index c52057d1f50..0b905e6a155 100644
|
||||
index 48c3eae7413..83f80740a46 100644
|
||||
--- a/server/thread.c
|
||||
+++ b/server/thread.c
|
||||
@@ -227,6 +227,7 @@ static inline void init_thread_structure( struct thread *thread )
|
||||
@@ -264,10 +264,10 @@ index c52057d1f50..0b905e6a155 100644
|
||||
thread->entry_point = 0;
|
||||
thread->esync_fd = -1;
|
||||
+ thread->esync_apc_fd = -1;
|
||||
thread->debug_obj = NULL;
|
||||
thread->system_regs = 0;
|
||||
thread->queue = NULL;
|
||||
@@ -364,7 +365,10 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
|
||||
thread->wait = NULL;
|
||||
@@ -363,7 +364,10 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
|
||||
}
|
||||
|
||||
if (do_esync())
|
||||
@@ -278,7 +278,7 @@ index c52057d1f50..0b905e6a155 100644
|
||||
|
||||
set_fd_events( thread->request_fd, POLLIN ); /* start listening to events */
|
||||
add_process_thread( thread->process, thread );
|
||||
@@ -1152,8 +1156,13 @@ static int queue_apc( struct process *process, struct thread *thread, struct thr
|
||||
@@ -1150,8 +1154,13 @@ static int queue_apc( struct process *process, struct thread *thread, struct thr
|
||||
grab_object( apc );
|
||||
list_add_tail( queue, &apc->entry );
|
||||
if (!list_prev( queue, &apc->entry )) /* first one */
|
||||
@@ -292,7 +292,7 @@ index c52057d1f50..0b905e6a155 100644
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1199,6 +1208,10 @@ static struct thread_apc *thread_dequeue_apc( struct thread *thread, int system
|
||||
@@ -1197,6 +1206,10 @@ static struct thread_apc *thread_dequeue_apc( struct thread *thread, int system
|
||||
apc = LIST_ENTRY( ptr, struct thread_apc, entry );
|
||||
list_remove( ptr );
|
||||
}
|
||||
@@ -304,7 +304,7 @@ index c52057d1f50..0b905e6a155 100644
|
||||
}
|
||||
|
||||
diff --git a/server/thread.h b/server/thread.h
|
||||
index e6a9f987c9e..ff86da99798 100644
|
||||
index 99904557d44..f41c3ddd61e 100644
|
||||
--- a/server/thread.h
|
||||
+++ b/server/thread.h
|
||||
@@ -55,6 +55,7 @@ struct thread
|
||||
@@ -312,9 +312,9 @@ index e6a9f987c9e..ff86da99798 100644
|
||||
struct list mutex_list; /* list of currently owned mutexes */
|
||||
int esync_fd; /* esync file descriptor (signalled on exit) */
|
||||
+ int esync_apc_fd; /* esync apc fd (signalled when APCs are present) */
|
||||
struct debug_obj *debug_obj; /* debugger context if this thread is a debugger */
|
||||
unsigned int system_regs; /* which system regs have been set */
|
||||
struct msg_queue *queue; /* message queue */
|
||||
struct thread_wait *wait; /* current wait condition if sleeping */
|
||||
--
|
||||
2.29.2
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 620371ae80be978b427c6d13e8f7b059bd4bb900 Mon Sep 17 00:00:00 2001
|
||||
From 1a2cd66380cef9a1f8a7a03f98d5f7af7c889bea Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Sat, 7 Jul 2018 12:57:47 +0200
|
||||
Subject: [PATCH] server: Create eventfd descriptors for pseudo-fd objects and
|
||||
@@ -11,7 +11,7 @@ Subject: [PATCH] server: Create eventfd descriptors for pseudo-fd objects and
|
||||
3 files changed, 25 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/server/fd.c b/server/fd.c
|
||||
index d3b1e515b52..a7d81ec055b 100644
|
||||
index 38f3ab79226..252236fbb91 100644
|
||||
--- a/server/fd.c
|
||||
+++ b/server/fd.c
|
||||
@@ -102,6 +102,7 @@
|
||||
@@ -22,7 +22,7 @@ index d3b1e515b52..a7d81ec055b 100644
|
||||
|
||||
#include "winternl.h"
|
||||
#include "winioctl.h"
|
||||
@@ -203,6 +204,7 @@ struct fd
|
||||
@@ -205,6 +206,7 @@ struct fd
|
||||
struct completion *completion; /* completion object attached to this fd */
|
||||
apc_param_t comp_key; /* completion key to set in completion events */
|
||||
unsigned int comp_flags; /* completion flags */
|
||||
@@ -30,7 +30,7 @@ index d3b1e515b52..a7d81ec055b 100644
|
||||
};
|
||||
|
||||
static void fd_dump( struct object *obj, int verbose );
|
||||
@@ -1593,6 +1595,9 @@ static void fd_destroy( struct object *obj )
|
||||
@@ -1596,6 +1598,9 @@ static void fd_destroy( struct object *obj )
|
||||
free( fd->unlink_name );
|
||||
free( fd->unix_name );
|
||||
}
|
||||
@@ -40,7 +40,7 @@ index d3b1e515b52..a7d81ec055b 100644
|
||||
}
|
||||
|
||||
/* check if the desired access is possible without violating */
|
||||
@@ -1708,6 +1713,7 @@ static struct fd *alloc_fd_object(void)
|
||||
@@ -1713,6 +1718,7 @@ static struct fd *alloc_fd_object(void)
|
||||
fd->poll_index = -1;
|
||||
fd->completion = NULL;
|
||||
fd->comp_flags = 0;
|
||||
@@ -48,7 +48,7 @@ index d3b1e515b52..a7d81ec055b 100644
|
||||
init_async_queue( &fd->read_q );
|
||||
init_async_queue( &fd->write_q );
|
||||
init_async_queue( &fd->wait_q );
|
||||
@@ -1746,11 +1752,15 @@ struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *use
|
||||
@@ -1753,11 +1759,15 @@ struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *use
|
||||
fd->completion = NULL;
|
||||
fd->comp_flags = 0;
|
||||
fd->no_fd_status = STATUS_BAD_DEVICE_TYPE;
|
||||
@@ -64,7 +64,7 @@ index d3b1e515b52..a7d81ec055b 100644
|
||||
return fd;
|
||||
}
|
||||
|
||||
@@ -2149,6 +2159,9 @@ void set_fd_signaled( struct fd *fd, int signaled )
|
||||
@@ -2202,6 +2212,9 @@ void set_fd_signaled( struct fd *fd, int signaled )
|
||||
if (fd->comp_flags & FILE_SKIP_SET_EVENT_ON_HANDLE) return;
|
||||
fd->signaled = signaled;
|
||||
if (signaled) wake_up( fd->user, 0 );
|
||||
@@ -74,7 +74,7 @@ index d3b1e515b52..a7d81ec055b 100644
|
||||
}
|
||||
|
||||
/* handler for close_handle that refuses to close fd-associated handles in other processes */
|
||||
@@ -2180,6 +2193,15 @@ int default_fd_signaled( struct object *obj, struct wait_queue_entry *entry )
|
||||
@@ -2233,6 +2246,15 @@ int default_fd_signaled( struct object *obj, struct wait_queue_entry *entry )
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -87,26 +87,26 @@ index d3b1e515b52..a7d81ec055b 100644
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/* default map_access() routine for objects that behave like an fd */
|
||||
unsigned int default_fd_map_access( struct object *obj, unsigned int access )
|
||||
int default_fd_get_poll_events( struct fd *fd )
|
||||
{
|
||||
int events = 0;
|
||||
diff --git a/server/file.h b/server/file.h
|
||||
index 477720f8b18..de260e29ddb 100644
|
||||
index 3b70799a3ec..f332c685add 100644
|
||||
--- a/server/file.h
|
||||
+++ b/server/file.h
|
||||
@@ -102,6 +102,7 @@ extern void set_fd_signaled( struct fd *fd, int signaled );
|
||||
extern char *dup_fd_name( struct fd *root, const char *name );
|
||||
@@ -104,6 +104,7 @@ extern char *dup_fd_name( struct fd *root, const char *name );
|
||||
extern void get_nt_name( struct fd *fd, struct unicode_str *name );
|
||||
|
||||
extern int default_fd_signaled( struct object *obj, struct wait_queue_entry *entry );
|
||||
+extern int default_fd_get_esync_fd( struct object *obj, enum esync_type *type );
|
||||
extern unsigned int default_fd_map_access( struct object *obj, unsigned int access );
|
||||
extern int default_fd_get_poll_events( struct fd *fd );
|
||||
extern void default_poll_event( struct fd *fd, int event );
|
||||
extern void fd_queue_async( struct fd *fd, struct async *async, int type );
|
||||
diff --git a/server/named_pipe.c b/server/named_pipe.c
|
||||
index 9ab99d915b9..b438682d214 100644
|
||||
index 14596d46f6c..9b8fa97c67e 100644
|
||||
--- a/server/named_pipe.c
|
||||
+++ b/server/named_pipe.c
|
||||
@@ -163,7 +163,7 @@ static const struct object_ops pipe_server_ops =
|
||||
@@ -168,7 +168,7 @@ static const struct object_ops pipe_server_ops =
|
||||
add_queue, /* add_queue */
|
||||
remove_queue, /* remove_queue */
|
||||
default_fd_signaled, /* signaled */
|
||||
@@ -115,7 +115,7 @@ index 9ab99d915b9..b438682d214 100644
|
||||
no_satisfied, /* satisfied */
|
||||
no_signal, /* signal */
|
||||
pipe_end_get_fd, /* get_fd */
|
||||
@@ -207,7 +207,7 @@ static const struct object_ops pipe_client_ops =
|
||||
@@ -212,7 +212,7 @@ static const struct object_ops pipe_client_ops =
|
||||
add_queue, /* add_queue */
|
||||
remove_queue, /* remove_queue */
|
||||
default_fd_signaled, /* signaled */
|
||||
@@ -125,5 +125,5 @@ index 9ab99d915b9..b438682d214 100644
|
||||
no_signal, /* signal */
|
||||
pipe_end_get_fd, /* get_fd */
|
||||
--
|
||||
2.28.0
|
||||
2.20.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 5126b7e8cd315c7e85d84b897fd2d271d62d91c1 Mon Sep 17 00:00:00 2001
|
||||
From 075bdc732f12d42184ee6a906f58051739972322 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 6 Jul 2020 18:01:32 -0500
|
||||
Subject: [PATCH] ntdll, server: Abandon esync mutexes on thread exit.
|
||||
@@ -175,12 +175,12 @@ index cea025d9308..125da8e9d12 100644
|
||||
void esync_reset_event( struct esync *esync );
|
||||
+void esync_abandon_mutexes( struct thread *thread );
|
||||
diff --git a/server/thread.c b/server/thread.c
|
||||
index 6fb8684f5e0..f320f2b26e9 100644
|
||||
index 83f80740a46..bffe229586f 100644
|
||||
--- a/server/thread.c
|
||||
+++ b/server/thread.c
|
||||
@@ -1328,6 +1328,8 @@ void kill_thread( struct thread *thread, int violent_death )
|
||||
@@ -1325,6 +1325,8 @@ void kill_thread( struct thread *thread, int violent_death )
|
||||
}
|
||||
kill_console_processes( thread, 0 );
|
||||
debug_exit_thread( thread );
|
||||
abandon_mutexes( thread );
|
||||
+ if (do_esync())
|
||||
+ esync_abandon_mutexes( thread );
|
||||
@@ -188,5 +188,5 @@ index 6fb8684f5e0..f320f2b26e9 100644
|
||||
{
|
||||
send_thread_signal( thread, SIGQUIT );
|
||||
--
|
||||
2.28.0
|
||||
2.29.2
|
||||
|
||||
|
@@ -1,72 +0,0 @@
|
||||
From 6b8f0a1f1283cb47bf1156745a42e50bb32d3d2f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 6 Feb 2016 18:31:25 +0100
|
||||
Subject: [PATCH] kernel32: Strip invalid characters from mask in
|
||||
FindFirstFileExW.
|
||||
|
||||
---
|
||||
dlls/kernelbase/file.c | 26 ++++++++++++++++++++++----
|
||||
1 file changed, 22 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c
|
||||
index 6591a110732..fd411b7baac 100644
|
||||
--- a/dlls/kernelbase/file.c
|
||||
+++ b/dlls/kernelbase/file.c
|
||||
@@ -790,6 +790,7 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
WCHAR *mask;
|
||||
BOOL has_wildcard = FALSE;
|
||||
FIND_FIRST_INFO *info = NULL;
|
||||
+ UNICODE_STRING mask_str;
|
||||
UNICODE_STRING nt_name;
|
||||
OBJECT_ATTRIBUTES attr;
|
||||
IO_STATUS_BLOCK io;
|
||||
@@ -821,6 +822,8 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
+ RtlInitUnicodeString( &mask_str, NULL );
|
||||
+
|
||||
if (!mask && (device = RtlIsDosDeviceName_U( filename )))
|
||||
{
|
||||
WCHAR *dir = NULL;
|
||||
@@ -854,8 +857,26 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
}
|
||||
else
|
||||
{
|
||||
+ static const WCHAR invalidW[] = { '<', '>', '\"', 0 };
|
||||
+ DWORD mask_len = lstrlenW( mask );
|
||||
+
|
||||
+ /* strip invalid characters from mask */
|
||||
+ while (mask_len && wcschr( invalidW, mask[mask_len - 1] ))
|
||||
+ mask_len--;
|
||||
+
|
||||
+ if (!mask_len)
|
||||
+ {
|
||||
+ has_wildcard = TRUE;
|
||||
+ RtlInitUnicodeString( &mask_str, L"*?" );
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ has_wildcard = wcspbrk( mask, L"*?" ) != NULL;
|
||||
+ RtlInitUnicodeString( &mask_str, mask );
|
||||
+ mask_str.Length = mask_len * sizeof(WCHAR);
|
||||
+ }
|
||||
+
|
||||
nt_name.Length = (mask - nt_name.Buffer) * sizeof(WCHAR);
|
||||
- has_wildcard = wcspbrk( mask, L"*?" ) != NULL;
|
||||
size = has_wildcard ? 8192 : max_entry_size;
|
||||
}
|
||||
|
||||
@@ -916,9 +937,6 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
|
||||
}
|
||||
else
|
||||
{
|
||||
- UNICODE_STRING mask_str;
|
||||
-
|
||||
- RtlInitUnicodeString( &mask_str, mask );
|
||||
status = NtQueryDirectoryFile( info->handle, 0, NULL, NULL, &io, info->data, info->data_size,
|
||||
FileBothDirectoryInformation, FALSE, &mask_str, TRUE );
|
||||
if (status)
|
||||
--
|
||||
2.25.1
|
||||
|
@@ -1,135 +0,0 @@
|
||||
From 29a12264fdd49cdb5b815064c2767e7fc349133b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 6 Feb 2016 18:32:09 +0100
|
||||
Subject: kernel32/tests: Add tests for FindFirstFileA with invalid characters.
|
||||
|
||||
Includes testcases by Vincent Pelletier.
|
||||
---
|
||||
dlls/kernel32/tests/file.c | 100 ++++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 99 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
|
||||
index 53dc04b..a7ac09c 100644
|
||||
--- a/dlls/kernel32/tests/file.c
|
||||
+++ b/dlls/kernel32/tests/file.c
|
||||
@@ -2517,11 +2517,85 @@ static char get_windows_drive(void)
|
||||
return windowsdir[0];
|
||||
}
|
||||
|
||||
+struct
|
||||
+{
|
||||
+ const char *path;
|
||||
+ BOOL expected;
|
||||
+}
|
||||
+static const invalid_char_tests[] =
|
||||
+{
|
||||
+ { "./test-dir", TRUE },
|
||||
+ { "./test-dir/", FALSE },
|
||||
+ { ".\\test-dir", TRUE },
|
||||
+ { ".\\test-dir\\", FALSE },
|
||||
+ { "/>test-dir", FALSE },
|
||||
+ { "<\"test->dir", FALSE },
|
||||
+ { "<test->dir", FALSE },
|
||||
+ { "><test->dir", FALSE },
|
||||
+ { ">>test-dir", FALSE },
|
||||
+ { ">test->dir", FALSE },
|
||||
+ { ">test-dir", FALSE },
|
||||
+ { "\"test-dir\"", FALSE },
|
||||
+ { "\"test-file\"", FALSE },
|
||||
+ { "test-/>dir", FALSE },
|
||||
+ { "test-dir/", FALSE },
|
||||
+ { "test-dir//", FALSE },
|
||||
+ { "test-dir/:", FALSE },
|
||||
+ { "test-dir/<", TRUE },
|
||||
+ { "test-dir/>", TRUE },
|
||||
+ { "test-dir/\"", TRUE },
|
||||
+ { "test-dir/\\", FALSE },
|
||||
+ { "test-dir/|", FALSE },
|
||||
+ { "test-dir<", TRUE },
|
||||
+ { "test-dir</", FALSE },
|
||||
+ { "test-dir<<", TRUE },
|
||||
+ { "test-dir<<<><><>\"\"\"\"<<<>", TRUE },
|
||||
+ { "test-dir<>", TRUE },
|
||||
+ { "test-dir<\"", TRUE },
|
||||
+ { "test-dir>", TRUE },
|
||||
+ { "test-dir>/", FALSE },
|
||||
+ { "test-dir><", TRUE },
|
||||
+ { "test-dir>>", TRUE },
|
||||
+ { "test-dir>\"", TRUE },
|
||||
+ { "test-dir\"", TRUE },
|
||||
+ { "test-dir\"/", FALSE },
|
||||
+ { "test-dir\"<", TRUE },
|
||||
+ { "test-dir\">", TRUE },
|
||||
+ { "test-dir\"\"", TRUE },
|
||||
+ { "test-dir\"\"\"\"\"", TRUE },
|
||||
+ { "test-dir\\", FALSE },
|
||||
+ { "test-dir\\/", FALSE },
|
||||
+ { "test-dir\\<", TRUE },
|
||||
+ { "test-dir\\>", TRUE },
|
||||
+ { "test-dir\\\"", TRUE },
|
||||
+ { "test-dir\\\\", FALSE },
|
||||
+ { "test-file/", FALSE },
|
||||
+ { "test-file/<", FALSE },
|
||||
+ { "test-file/>", FALSE },
|
||||
+ { "test-file/\"", FALSE },
|
||||
+ { "test-file<", TRUE },
|
||||
+ { "test-file<<", TRUE },
|
||||
+ { "test-file<>", TRUE },
|
||||
+ { "test-file<\"", TRUE },
|
||||
+ { "test-file>", TRUE },
|
||||
+ { "test-file><", TRUE },
|
||||
+ { "test-file>>", TRUE },
|
||||
+ { "test-file>\"", TRUE },
|
||||
+ { "test-file\"", TRUE },
|
||||
+ { "test-file\"<", TRUE },
|
||||
+ { "test-file\">", TRUE },
|
||||
+ { "test-file\"\"", TRUE },
|
||||
+ { "test-file\\", FALSE },
|
||||
+ { "test-file\\<", FALSE },
|
||||
+ { "test-file\\>", FALSE },
|
||||
+ { "test-file\\\"", FALSE },
|
||||
+};
|
||||
+
|
||||
static void test_FindFirstFileA(void)
|
||||
{
|
||||
HANDLE handle;
|
||||
WIN32_FIND_DATAA data;
|
||||
- int err;
|
||||
+ int err, i;
|
||||
char buffer[5] = "C:\\";
|
||||
char buffer2[100];
|
||||
char nonexistent[MAX_PATH];
|
||||
@@ -2689,6 +2763,30 @@ static void test_FindFirstFileA(void)
|
||||
err = GetLastError();
|
||||
ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should fail\n", buffer2 );
|
||||
ok ( err == ERROR_PATH_NOT_FOUND, "Bad Error number %d\n", err );
|
||||
+
|
||||
+ /* try FindFirstFileA with invalid characters */
|
||||
+ CreateDirectoryA("test-dir", NULL);
|
||||
+ _lclose(_lcreat("test-file", 0));
|
||||
+
|
||||
+ for (i = 0; i < sizeof(invalid_char_tests) / sizeof(invalid_char_tests[0]); i++)
|
||||
+ {
|
||||
+ handle = FindFirstFileA(invalid_char_tests[i].path, &data);
|
||||
+ if (invalid_char_tests[i].expected)
|
||||
+ {
|
||||
+ ok(handle != INVALID_HANDLE_VALUE, "FindFirstFileA on %s should succeed\n",
|
||||
+ invalid_char_tests[i].path);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ ok(handle == INVALID_HANDLE_VALUE, "FindFirstFileA on %s should fail\n",
|
||||
+ invalid_char_tests[i].path);
|
||||
+ }
|
||||
+ if (handle != INVALID_HANDLE_VALUE)
|
||||
+ FindClose(handle);
|
||||
+ }
|
||||
+
|
||||
+ DeleteFileA("test-file");
|
||||
+ RemoveDirectoryA("test-dir");
|
||||
}
|
||||
|
||||
static void test_FindNextFileA(void)
|
||||
--
|
||||
2.7.0
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [22635] Strip invalid characters from mask in FindFirstFileExW
|
@@ -1,63 +0,0 @@
|
||||
From c28cdfe81ad11729cbfe912ee25f5d7062ef880d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 13 May 2016 17:54:12 +0200
|
||||
Subject: kernel32: Update sr-Latn locale definition.
|
||||
|
||||
---
|
||||
dlls/kernel32/nls/srl.nls | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/nls/srl.nls b/dlls/kernel32/nls/srl.nls
|
||||
index a40556c..1cd21db 100644
|
||||
--- a/dlls/kernel32/nls/srl.nls
|
||||
+++ b/dlls/kernel32/nls/srl.nls
|
||||
@@ -64,7 +64,7 @@ STRINGTABLE LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN
|
||||
LOCALE_ITLZERO "0"
|
||||
LOCALE_S1159 ""
|
||||
LOCALE_S2359 ""
|
||||
- LOCALE_SABBREVCTRYNAME "SPB"
|
||||
+ LOCALE_SABBREVCTRYNAME "SCG"
|
||||
LOCALE_SABBREVDAYNAME1 "pon"
|
||||
LOCALE_SABBREVDAYNAME2 "uto"
|
||||
LOCALE_SABBREVDAYNAME3 "sre"
|
||||
@@ -86,7 +86,7 @@ STRINGTABLE LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN
|
||||
LOCALE_SABBREVMONTHNAME11 "nov"
|
||||
LOCALE_SABBREVMONTHNAME12 "dec"
|
||||
LOCALE_SABBREVMONTHNAME13 ""
|
||||
- LOCALE_SCOUNTRY "Serbia"
|
||||
+ LOCALE_SCOUNTRY "Serbia and Montenegro (Former)"
|
||||
LOCALE_SCURRENCY "Din."
|
||||
LOCALE_SDATE "."
|
||||
LOCALE_SDAYNAME1 "ponedeljak"
|
||||
@@ -97,14 +97,14 @@ STRINGTABLE LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN
|
||||
LOCALE_SDAYNAME6 "subota"
|
||||
LOCALE_SDAYNAME7 "nedelja"
|
||||
LOCALE_SDECIMAL ","
|
||||
- LOCALE_SENGCOUNTRY "Serbia"
|
||||
+ LOCALE_SENGCOUNTRY "Serbia and Montenegro (Former)"
|
||||
LOCALE_SENGCURRNAME "Serbian Dinar"
|
||||
LOCALE_SENGLANGUAGE "Serbian (Latin)"
|
||||
LOCALE_SGROUPING "3;0"
|
||||
LOCALE_SINTLSYMBOL "RSD"
|
||||
- LOCALE_SISO3166CTRYNAME "RS"
|
||||
+ LOCALE_SISO3166CTRYNAME "CS"
|
||||
LOCALE_SISO639LANGNAME "sr"
|
||||
- LOCALE_SLANGUAGE "Serbian (Latin)"
|
||||
+ LOCALE_SLANGUAGE "Serbian (Latin, Serbia and Montenegro (Former))"
|
||||
LOCALE_SLIST ";"
|
||||
LOCALE_SLONGDATE "d. MMMM yyyy"
|
||||
LOCALE_SMONDECIMALSEP ","
|
||||
@@ -123,8 +123,8 @@ STRINGTABLE LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN
|
||||
LOCALE_SMONTHNAME12 "decembar"
|
||||
LOCALE_SMONTHNAME13 ""
|
||||
LOCALE_SMONTHOUSANDSEP "."
|
||||
- LOCALE_SNAME "sr-Latn-RS"
|
||||
- LOCALE_SNATIVECTRYNAME "Srbija"
|
||||
+ LOCALE_SNAME "sr-Latn-CS"
|
||||
+ LOCALE_SNATIVECTRYNAME "Srbija i Crna Gora (Bivši)"
|
||||
LOCALE_SNATIVECURRNAME "dinar"
|
||||
LOCALE_SNATIVEDIGITS "0123456789"
|
||||
LOCALE_SNATIVEDISPLAYNAME "srpski (Srbija)"
|
||||
--
|
||||
2.8.0
|
||||
|
@@ -1,200 +0,0 @@
|
||||
From e7fc618b090431d0baaadf917131bbcf3f8bff3f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 13 May 2016 17:55:15 +0200
|
||||
Subject: kernel32: Add sr-Latn-RS locale definition.
|
||||
|
||||
---
|
||||
dlls/kernel32/locale_rc.rc | 1 +
|
||||
dlls/kernel32/nls/srsl.nls | 168 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 169 insertions(+)
|
||||
create mode 100644 dlls/kernel32/nls/srsl.nls
|
||||
|
||||
diff --git a/dlls/kernel32/locale_rc.rc b/dlls/kernel32/locale_rc.rc
|
||||
index 363e7ab..5673c30 100644
|
||||
--- a/dlls/kernel32/locale_rc.rc
|
||||
+++ b/dlls/kernel32/locale_rc.rc
|
||||
@@ -143,6 +143,7 @@
|
||||
#include "nls/hrv.nls" /* 0x041a LANG_SERBIAN, SUBLANG_DEFAULT */
|
||||
#include "nls/srl.nls" /* 0x081a LANG_SERBIAN, SUBLANG_SERBIAN_LATIN */
|
||||
#include "nls/srb.nls" /* 0x0c1a LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC */
|
||||
+#include "nls/srsl.nls" /* 0x241a LANG_SERBIAN, SUBLANG_SERBIAN_SERBIA_LATIN */
|
||||
|
||||
#include "nls/sky.nls" /* 0x041b LANG_SLOVAK, SUBLANG_DEFAULT */
|
||||
|
||||
diff --git a/dlls/kernel32/nls/srsl.nls b/dlls/kernel32/nls/srsl.nls
|
||||
new file mode 100644
|
||||
index 0000000..455179b
|
||||
--- /dev/null
|
||||
+++ b/dlls/kernel32/nls/srsl.nls
|
||||
@@ -0,0 +1,168 @@
|
||||
+/*
|
||||
+ * Locale definitions for Serbian (Serbia, Latin)
|
||||
+ *
|
||||
+ * Copyright 2016 Michael Müller
|
||||
+ *
|
||||
+ * This library is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU Lesser General Public
|
||||
+ * License as published by the Free Software Foundation; either
|
||||
+ * version 2.1 of the License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ * Lesser General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU Lesser General Public
|
||||
+ * License along with this library; if not, write to the Free Software
|
||||
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
+ */
|
||||
+
|
||||
+#pragma code_page(65001) /* UTF-8 */
|
||||
+
|
||||
+STRINGTABLE LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_SERBIA_LATIN
|
||||
+{
|
||||
+ LOCALE_FONTSIGNATURE L"\x0027\x8000\x3808\x0000\x0000\x0000\x0000\x0000\x0002\x0000\x0000\x0400\x0012\x0000\x0000\xc5d4"
|
||||
+ LOCALE_ICALENDARTYPE "1"
|
||||
+ LOCALE_ICENTURY "1"
|
||||
+ LOCALE_ICOUNTRY "381"
|
||||
+ LOCALE_ICURRDIGITS "2"
|
||||
+ LOCALE_ICURRENCY "3"
|
||||
+ LOCALE_IDATE "1"
|
||||
+ LOCALE_IDAYLZERO "0"
|
||||
+ LOCALE_IDEFAULTANSICODEPAGE "1250"
|
||||
+ LOCALE_IDEFAULTCODEPAGE "852"
|
||||
+ LOCALE_IDEFAULTCOUNTRY "381"
|
||||
+ LOCALE_IDEFAULTEBCDICCODEPAGE "500"
|
||||
+ LOCALE_IDEFAULTLANGUAGE "241a"
|
||||
+ LOCALE_IDEFAULTMACCODEPAGE "10029"
|
||||
+ LOCALE_IDEFAULTUNIXCODEPAGE "28592"
|
||||
+ LOCALE_IDIGITS "2"
|
||||
+ LOCALE_IDIGITSUBSTITUTION "1"
|
||||
+ LOCALE_IFIRSTDAYOFWEEK "0"
|
||||
+ LOCALE_IFIRSTWEEKOFYEAR "0"
|
||||
+ LOCALE_IINTLCURRDIGITS "2"
|
||||
+ LOCALE_ILANGUAGE "241a"
|
||||
+ LOCALE_ILDATE "1"
|
||||
+ LOCALE_ILZERO "1"
|
||||
+ LOCALE_IMEASURE "0"
|
||||
+ LOCALE_IMONLZERO "0"
|
||||
+ LOCALE_INEGCURR "8"
|
||||
+ LOCALE_INEGNUMBER "1"
|
||||
+ LOCALE_INEGSEPBYSPACE "1"
|
||||
+ LOCALE_INEGSIGNPOSN "1"
|
||||
+ LOCALE_INEGSYMPRECEDES "0"
|
||||
+ LOCALE_INEUTRAL "0"
|
||||
+ LOCALE_IOPTIONALCALENDAR "0"
|
||||
+ LOCALE_IPAPERSIZE "9"
|
||||
+ LOCALE_IPOSSEPBYSPACE "1"
|
||||
+ LOCALE_IPOSSIGNPOSN "1"
|
||||
+ LOCALE_IPOSSYMPRECEDES "0"
|
||||
+ LOCALE_IREADINGLAYOUT "0"
|
||||
+ LOCALE_ITIME "1"
|
||||
+ LOCALE_ITIMEMARKPOSN "0"
|
||||
+ LOCALE_ITLZERO "1"
|
||||
+ LOCALE_S1159 "pre podne"
|
||||
+ LOCALE_S2359 "po podne"
|
||||
+ LOCALE_SABBREVCTRYNAME "SRB"
|
||||
+ LOCALE_SABBREVDAYNAME1 "pon"
|
||||
+ LOCALE_SABBREVDAYNAME2 "uto"
|
||||
+ LOCALE_SABBREVDAYNAME3 "sre"
|
||||
+ LOCALE_SABBREVDAYNAME4 "čet"
|
||||
+ LOCALE_SABBREVDAYNAME5 "pet"
|
||||
+ LOCALE_SABBREVDAYNAME6 "sub"
|
||||
+ LOCALE_SABBREVDAYNAME7 "ned"
|
||||
+ LOCALE_SABBREVLANGNAME "SRM"
|
||||
+ LOCALE_SABBREVMONTHNAME1 "jan"
|
||||
+ LOCALE_SABBREVMONTHNAME2 "feb"
|
||||
+ LOCALE_SABBREVMONTHNAME3 "mar"
|
||||
+ LOCALE_SABBREVMONTHNAME4 "apr"
|
||||
+ LOCALE_SABBREVMONTHNAME5 "maj"
|
||||
+ LOCALE_SABBREVMONTHNAME6 "jun"
|
||||
+ LOCALE_SABBREVMONTHNAME7 "jul"
|
||||
+ LOCALE_SABBREVMONTHNAME8 "avg"
|
||||
+ LOCALE_SABBREVMONTHNAME9 "sep"
|
||||
+ LOCALE_SABBREVMONTHNAME10 "okt"
|
||||
+ LOCALE_SABBREVMONTHNAME11 "nov"
|
||||
+ LOCALE_SABBREVMONTHNAME12 "dec"
|
||||
+ LOCALE_SABBREVMONTHNAME13 ""
|
||||
+ LOCALE_SCOUNTRY "Serbia"
|
||||
+ LOCALE_SCURRENCY "RSD"
|
||||
+ LOCALE_SDATE "."
|
||||
+ LOCALE_SDAYNAME1 "ponedeljak"
|
||||
+ LOCALE_SDAYNAME2 "utorak"
|
||||
+ LOCALE_SDAYNAME3 "sreda"
|
||||
+ LOCALE_SDAYNAME4 "četvrtak"
|
||||
+ LOCALE_SDAYNAME5 "petak"
|
||||
+ LOCALE_SDAYNAME6 "subota"
|
||||
+ LOCALE_SDAYNAME7 "nedelja"
|
||||
+ LOCALE_SDECIMAL ","
|
||||
+ LOCALE_SENGCOUNTRY "Serbia"
|
||||
+ LOCALE_SENGCURRNAME "Serbian Dinar"
|
||||
+ LOCALE_SENGLANGUAGE "Serbian (Latin)"
|
||||
+ LOCALE_SGROUPING "3;0"
|
||||
+ LOCALE_SINTLSYMBOL "RSD"
|
||||
+ LOCALE_SISO3166CTRYNAME "RS"
|
||||
+ LOCALE_SISO639LANGNAME "sr"
|
||||
+ LOCALE_SLANGUAGE "Serbian (Latin, Serbia)"
|
||||
+ LOCALE_SLIST ";"
|
||||
+ LOCALE_SLONGDATE "dddd, dd. MMMM yyyy"
|
||||
+ LOCALE_SMONDECIMALSEP ","
|
||||
+ LOCALE_SMONGROUPING "3;0"
|
||||
+ LOCALE_SMONTHNAME1 "januar"
|
||||
+ LOCALE_SMONTHNAME2 "februar"
|
||||
+ LOCALE_SMONTHNAME3 "mart"
|
||||
+ LOCALE_SMONTHNAME4 "april"
|
||||
+ LOCALE_SMONTHNAME5 "maj"
|
||||
+ LOCALE_SMONTHNAME6 "jun"
|
||||
+ LOCALE_SMONTHNAME7 "jul"
|
||||
+ LOCALE_SMONTHNAME8 "avgust"
|
||||
+ LOCALE_SMONTHNAME9 "septembar"
|
||||
+ LOCALE_SMONTHNAME10 "oktobar"
|
||||
+ LOCALE_SMONTHNAME11 "novembar"
|
||||
+ LOCALE_SMONTHNAME12 "decembar"
|
||||
+ LOCALE_SMONTHNAME13 ""
|
||||
+ LOCALE_SMONTHOUSANDSEP "."
|
||||
+ LOCALE_SNAME "sr-Latn-RS"
|
||||
+ LOCALE_SNATIVECTRYNAME "Srbija"
|
||||
+ LOCALE_SNATIVECURRNAME "Srpski dinar"
|
||||
+ LOCALE_SNATIVEDIGITS "0123456789"
|
||||
+ LOCALE_SNATIVEDISPLAYNAME "srpski (Srbija)"
|
||||
+ LOCALE_SNATIVELANGNAME "srpski"
|
||||
+ LOCALE_SNEGATIVESIGN "-"
|
||||
+ LOCALE_SOPENTYPELANGUAGETAG "SRB "
|
||||
+ LOCALE_SPOSITIVESIGN "+"
|
||||
+ LOCALE_SSCRIPTS "Latn;"
|
||||
+ LOCALE_SSHORTDATE "d.M.yyyy"
|
||||
+ LOCALE_SSHORTESTDAYNAME1 "pon"
|
||||
+ LOCALE_SSHORTESTDAYNAME2 "uto"
|
||||
+ LOCALE_SSHORTESTDAYNAME3 "sre"
|
||||
+ LOCALE_SSHORTESTDAYNAME4 "čet"
|
||||
+ LOCALE_SSHORTESTDAYNAME5 "pet"
|
||||
+ LOCALE_SSHORTESTDAYNAME6 "sub"
|
||||
+ LOCALE_SSHORTESTDAYNAME7 "ned"
|
||||
+ LOCALE_SSHORTTIME "H:mm"
|
||||
+ LOCALE_SSORTNAME "Default"
|
||||
+ LOCALE_STHOUSAND "."
|
||||
+ LOCALE_STIME ":"
|
||||
+ LOCALE_STIMEFORMAT "H:mm:ss"
|
||||
+ LOCALE_SYEARMONTH "MMMM yyyy"
|
||||
+
|
||||
+ LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States"
|
||||
+ LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe"
|
||||
+ LGRPID_BALTIC+LGRPID_RES_BASE "Baltic"
|
||||
+ LGRPID_GREEK+LGRPID_RES_BASE "Greek"
|
||||
+ LGRPID_CYRILLIC+LGRPID_RES_BASE "Cyrillic"
|
||||
+ LGRPID_TURKISH+LGRPID_RES_BASE "Turkic"
|
||||
+ LGRPID_JAPANESE+LGRPID_RES_BASE "Japanese"
|
||||
+ LGRPID_KOREAN+LGRPID_RES_BASE "Korean"
|
||||
+ LGRPID_TRADITIONAL_CHINESE+LGRPID_RES_BASE "Traditional Chinese"
|
||||
+ LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese"
|
||||
+ LGRPID_THAI+LGRPID_RES_BASE "Thai"
|
||||
+ LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew"
|
||||
+ LGRPID_ARABIC+LGRPID_RES_BASE "Arabic"
|
||||
+ LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese"
|
||||
+ LGRPID_INDIC+LGRPID_RES_BASE "Indic"
|
||||
+ LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian"
|
||||
+ LGRPID_ARMENIAN+LGRPID_RES_BASE "Armenian"
|
||||
+}
|
||||
--
|
||||
2.8.0
|
||||
|
@@ -1,2 +0,0 @@
|
||||
# Fixes: [40619] Add sr-Latn-RS locale definition
|
||||
Disabled: true
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user