Rebase against e9231beb865da13941d19eca016a6ccac07cb3f4.

This commit is contained in:
Zebediah Figura
2018-12-04 20:17:06 -06:00
parent 6fb7d85916
commit 08623c69c9
15 changed files with 105 additions and 1244 deletions

View File

@@ -1,28 +1,23 @@
From b4a2543264f9eb91fc259a81dea872eee3c14aba Mon Sep 17 00:00:00 2001
From 07ca5e888c3265c57c88ef1758e6c47fbea4fb07 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 27 Jun 2015 19:28:51 +0200
Subject: loader: Print library paths for --check-libs on Mac OS X.
---
loader/main.c | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
loader/main.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/loader/main.c b/loader/main.c
index 44804e1..4d9126e 100644
index a2dc40c51c..1642fb0965 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -48,6 +48,7 @@
#include "main.h"
@@ -50,6 +50,30 @@
/* the preloader will set this variable */
const struct wine_preload_info *wine_main_preload_info = NULL;
#ifdef __APPLE__
+#ifdef __APPLE__
+#include <mach-o/dyld.h>
#ifndef __clang__
__asm__(".zerofill WINE_DOS, WINE_DOS, ___wine_dos, 0x40000000");
@@ -73,6 +74,26 @@ static inline void reserve_area( void *addr, size_t size )
wine_mmap_add_reserved_area( addr, size );
}
+
+static const char *get_macho_library_path( const char *libname )
+{
+ unsigned int path_len, libname_len = strlen( libname );
@@ -30,7 +25,7 @@ index 44804e1..4d9126e 100644
+
+ for (i = 0; i < count; i++)
+ {
+ const char *path = _dyld_get_image_name( i );
+ const char *path = _dyld_get_image_name( i );
+ if (!path) continue;
+
+ path_len = strlen( path );
@@ -42,11 +37,12 @@ index 44804e1..4d9126e 100644
+ }
+ return NULL;
+}
+#endif
+
#else /* __APPLE__ */
/* the preloader will set this variable */
@@ -181,7 +202,11 @@ static void check_command_line( int argc, char *argv[] )
/***********************************************************************
* check_command_line
*
@@ -146,7 +170,11 @@ static void check_command_line( int argc, char *argv[] )
else
#endif
{
@@ -60,5 +56,5 @@ index 44804e1..4d9126e 100644
wine_dlclose( lib_handle, NULL, 0 );
}
--
2.4.3
2.14.1

View File

@@ -1,4 +1,4 @@
From 53bf52b313245d965619802729ef59ada1806660 Mon Sep 17 00:00:00 2001
From 9774b93b25d11fe143fcf4ab7159135334916045 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 27 Aug 2014 00:31:23 +0200
Subject: configure: Also add the absolute RPATH when linking against libwine.
@@ -8,11 +8,11 @@ Subject: configure: Also add the absolute RPATH when linking against libwine.
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index ff74f8d..529c209 100644
index 2222c687d9..513bdef795 100644
--- a/configure.ac
+++ b/configure.ac
@@ -966,10 +966,10 @@ ${wine_binary}_LDFLAGS = $LDEXECFLAGS -lwine \$(PTHREAD_LIBS)
[WINELOADER_LDFLAGS="-Wl,--export-dynamic"])
@@ -943,10 +943,10 @@ case $host_os in
WINEPRELOADER_LDFLAGS="-static -nostartfiles -nodefaultlibs -Wl,-Ttext=0x7c400000"
WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib],
- [LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(MAKEDEP) -R \${bindir} \${libdir}\`"
@@ -25,5 +25,5 @@ index ff74f8d..529c209 100644
WINE_TRY_CFLAGS([-Wl,--enable-new-dtags],
--
2.6.1
2.14.1

View File

@@ -1,3 +0,0 @@
Fixes: [33159] Implement preloader for Mac OS
Depends: Staging
Depends: configure-Absolute_RPATH

View File

@@ -1,47 +0,0 @@
From d6b343754071dbf45bfaba2895d9a3e332d99390 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Tue, 21 Mar 2017 23:27:06 +0100
Subject: [PATCH] ntdll: Add stub for RtlGetUnloadEventTraceEx.
---
dlls/ntdll/ntdll.spec | 1 +
dlls/ntdll/rtl.c | 14 ++++++++++++++
2 files changed, 15 insertions(+)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 28ad231..85897b1 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -681,6 +681,7 @@
# @ stub RtlGetSetBootStatusData
@ stdcall RtlGetThreadErrorMode()
@ stdcall RtlGetUnloadEventTrace()
+@ stdcall RtlGetUnloadEventTraceEx(ptr ptr ptr)
@ stub RtlGetUserInfoHeap
@ stdcall RtlGetVersion(ptr)
@ stdcall -arch=arm,arm64,x86_64 RtlGrowFunctionTable(ptr long)
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index e80aa5e..16d2950 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -1688,3 +1688,17 @@ NTSTATUS WINAPI RtlQueryPackageIdentity(HANDLE token, WCHAR *fullname, SIZE_T *f
FIXME("(%p, %p, %p, %p, %p, %p): stub\n", token, fullname, fullname_size, appid, appid_size, packaged);
return STATUS_NOT_FOUND;
}
+
+/*********************************************************************
+ * RtlGetUnloadEventTraceEx [NTDLL.@]
+ */
+void WINAPI RtlGetUnloadEventTraceEx(ULONG **size, ULONG **count, VOID **trace)
+{
+ static ULONG dummy_size, dummy_count;
+
+ FIXME("(%p, %p, %p): stub!\n", size, count, trace);
+
+ if (size) *size = &dummy_size;
+ if (count) *count = &dummy_count;
+ if (trace) *trace = NULL;
+}
--
1.9.1

View File

@@ -1,2 +0,0 @@
Fixes: [44897] Implement stub for ntdll.RtlGetUnloadEventTraceEx
Depends: ntdll-RtlQueryPackageIdentity

View File

@@ -1,4 +1,4 @@
From e923a9b76bc2b65422bff7953be5628b6a2a93d5 Mon Sep 17 00:00:00 2001
From ed9fbc71ad357fe633abb5da5aba1ffddcd09a33 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 4 Nov 2015 07:30:36 +0100
Subject: ntdll: Block signals while executing system APCs. (v2)
@@ -19,14 +19,16 @@ other process will wait on the result.
Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
---
dlls/kernel32/tests/sync.c | 11 ++---------
dlls/ntdll/ntdll_misc.h | 2 +-
dlls/ntdll/server.c | 21 +++++++++++++++++----
2 files changed, 19 insertions(+), 13 deletions(-)
dlls/ntdll/sync.c | 2 +-
4 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/dlls/kernel32/tests/sync.c b/dlls/kernel32/tests/sync.c
index 4ac6a99..53e4f81 100644
index f7be51e972..982a6ae105 100644
--- a/dlls/kernel32/tests/sync.c
+++ b/dlls/kernel32/tests/sync.c
@@ -2460,21 +2460,14 @@ static void test_apc_deadlock(void)
@@ -2604,21 +2604,14 @@ static void test_apc_deadlock(void)
result = WaitForSingleObject(event, 1000);
ok(result == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", result);
@@ -50,22 +52,35 @@ index 4ac6a99..53e4f81 100644
result = ResumeThread(pi.hThread);
ok(result == 1, "expected 1, got %u\n", result);
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 1630978f0a..3c7411e6d6 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -105,7 +105,7 @@ extern NTSTATUS alloc_object_attributes( const OBJECT_ATTRIBUTES *attr, struct o
data_size_t *ret_len ) DECLSPEC_HIDDEN;
extern NTSTATUS validate_open_object_attributes( const OBJECT_ATTRIBUTES *attr ) DECLSPEC_HIDDEN;
extern int wait_select_reply( void *cookie ) DECLSPEC_HIDDEN;
-extern BOOL invoke_apc( const apc_call_t *call, apc_result_t *result ) DECLSPEC_HIDDEN;
+extern BOOL invoke_apc( const apc_call_t *call, apc_result_t *result, sigset_t *user_sigset ) DECLSPEC_HIDDEN;
/* module handling */
extern LIST_ENTRY tls_links DECLSPEC_HIDDEN;
diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c
index 356d631..0450d85 100644
index 38356f4674..8944508f85 100644
--- a/dlls/ntdll/server.c
+++ b/dlls/ntdll/server.c
@@ -374,8 +374,9 @@ static int wait_select_reply( void *cookie )
@@ -385,8 +385,9 @@ int wait_select_reply( void *cookie )
* invoke_apc
*
* Invoke a single APC. Return TRUE if a user APC has been run.
+ * Optionally unblock signals while executing user APCs.
*/
-static BOOL invoke_apc( const apc_call_t *call, apc_result_t *result )
+static BOOL invoke_apc( const apc_call_t *call, apc_result_t *result, sigset_t *user_sigset )
-BOOL invoke_apc( const apc_call_t *call, apc_result_t *result )
+BOOL invoke_apc( const apc_call_t *call, apc_result_t *result, sigset_t *user_sigset )
{
BOOL user_apc = FALSE;
SIZE_T size;
@@ -390,15 +391,19 @@ static BOOL invoke_apc( const apc_call_t *call, apc_result_t *result )
@@ -401,15 +402,19 @@ BOOL invoke_apc( const apc_call_t *call, apc_result_t *result )
case APC_USER:
{
void (WINAPI *func)(ULONG_PTR,ULONG_PTR,ULONG_PTR) = wine_server_get_ptr( call->user.func );
@@ -85,7 +100,7 @@ index 356d631..0450d85 100644
user_apc = TRUE;
break;
}
@@ -590,10 +595,12 @@ unsigned int server_select( const select_op_t *select_op, data_size_t size, UINT
@@ -595,10 +600,12 @@ unsigned int server_select( const select_op_t *select_op, data_size_t size, UINT
obj_handle_t apc_handle = 0;
apc_call_t call;
apc_result_t result;
@@ -98,7 +113,7 @@ index 356d631..0450d85 100644
for (;;)
{
SERVER_START_REQ( select )
@@ -610,9 +617,14 @@ unsigned int server_select( const select_op_t *select_op, data_size_t size, UINT
@@ -615,9 +622,14 @@ unsigned int server_select( const select_op_t *select_op, data_size_t size, UINT
call = reply->call;
}
SERVER_END_REQ;
@@ -115,7 +130,7 @@ index 356d631..0450d85 100644
{
/* if we ran a user apc we have to check once more if additional apcs are queued,
* but we don't want to wait */
@@ -625,6 +637,7 @@ unsigned int server_select( const select_op_t *select_op, data_size_t size, UINT
@@ -630,6 +642,7 @@ unsigned int server_select( const select_op_t *select_op, data_size_t size, UINT
if (size >= sizeof(select_op->signal_and_wait) && select_op->op == SELECT_SIGNAL_AND_WAIT)
size = offsetof( select_op_t, signal_and_wait.signal );
}
@@ -123,7 +138,7 @@ index 356d631..0450d85 100644
if (ret == STATUS_TIMEOUT && user_apc) ret = STATUS_USER_APC;
@@ -663,7 +676,7 @@ unsigned int server_queue_process_apc( HANDLE process, const apc_call_t *call, a
@@ -668,7 +681,7 @@ unsigned int server_queue_process_apc( HANDLE process, const apc_call_t *call, a
if (self)
{
@@ -132,6 +147,19 @@ index 356d631..0450d85 100644
}
else
{
diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c
index 62cb3cd5ec..a304c9dee4 100644
--- a/dlls/ntdll/sync.c
+++ b/dlls/ntdll/sync.c
@@ -2039,7 +2039,7 @@ NTSTATUS WINAPI RtlWaitOnAddress( const void *addr, const void *cmp, SIZE_T size
if (ret == STATUS_PENDING) ret = wait_select_reply( &cookie );
if (ret != STATUS_USER_APC) break;
- if (invoke_apc( &call, &result ))
+ if (invoke_apc( &call, &result, NULL ))
{
/* if we ran a user apc we have to check once more if additional apcs are queued,
* but we don't want to wait */
--
2.6.2
2.14.1

View File

@@ -52,7 +52,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "0cc6233e2077c1ef679ecb8bd815d31484868294"
echo "e9231beb865da13941d19eca016a6ccac07cb3f4"
}
# Show version information
@@ -172,7 +172,6 @@ patch_enable_all ()
enable_krnl386_exe16__lclose16="$1"
enable_libs_Debug_Channel="$1"
enable_libs_Unicode_Collation="$1"
enable_loader_OSX_Preloader="$1"
enable_mmsystem_dll16_MIDIHDR_Refcount="$1"
enable_mountmgr_DosDevices="$1"
enable_mscoree_CorValidateImage="$1"
@@ -220,7 +219,6 @@ patch_enable_all ()
enable_ntdll_Purist_Mode="$1"
enable_ntdll_RtlCaptureStackBackTrace="$1"
enable_ntdll_RtlCreateUserThread="$1"
enable_ntdll_RtlGetUnloadEventTraceEx="$1"
enable_ntdll_RtlQueryPackageIdentity="$1"
enable_ntdll_Serial_Port_Detection="$1"
enable_ntdll_Signal_Handler="$1"
@@ -672,9 +670,6 @@ patch_enable ()
libs-Unicode_Collation)
enable_libs_Unicode_Collation="$2"
;;
loader-OSX_Preloader)
enable_loader_OSX_Preloader="$2"
;;
mmsystem.dll16-MIDIHDR_Refcount)
enable_mmsystem_dll16_MIDIHDR_Refcount="$2"
;;
@@ -816,9 +811,6 @@ patch_enable ()
ntdll-RtlCreateUserThread)
enable_ntdll_RtlCreateUserThread="$2"
;;
ntdll-RtlGetUnloadEventTraceEx)
enable_ntdll_RtlGetUnloadEventTraceEx="$2"
;;
ntdll-RtlQueryPackageIdentity)
enable_ntdll_RtlQueryPackageIdentity="$2"
;;
@@ -1982,13 +1974,6 @@ if test "$enable_ntdll_WRITECOPY" -eq 1; then
enable_ntdll_User_Shared_Data=1
fi
if test "$enable_ntdll_RtlGetUnloadEventTraceEx" -eq 1; then
if test "$enable_ntdll_RtlQueryPackageIdentity" -gt 1; then
abort "Patchset ntdll-RtlQueryPackageIdentity disabled, but ntdll-RtlGetUnloadEventTraceEx depends on that."
fi
enable_ntdll_RtlQueryPackageIdentity=1
fi
if test "$enable_ntdll_RtlCreateUserThread" -eq 1; then
if test "$enable_ntdll_LdrInitializeThunk" -gt 1; then
abort "Patchset ntdll-LdrInitializeThunk disabled, but ntdll-RtlCreateUserThread depends on that."
@@ -2088,17 +2073,6 @@ if test "$enable_ntdll_ApiSetMap" -eq 1; then
enable_ntdll_ThreadTime=1
fi
if test "$enable_loader_OSX_Preloader" -eq 1; then
if test "$enable_Staging" -gt 1; then
abort "Patchset Staging disabled, but loader-OSX_Preloader depends on that."
fi
if test "$enable_configure_Absolute_RPATH" -gt 1; then
abort "Patchset configure-Absolute_RPATH disabled, but loader-OSX_Preloader depends on that."
fi
enable_Staging=1
enable_configure_Absolute_RPATH=1
fi
if test "$enable_libs_Unicode_Collation" -eq 1; then
if test "$enable_kernel32_NormalizeString" -gt 1; then
abort "Patchset kernel32-NormalizeString disabled, but libs-Unicode_Collation depends on that."
@@ -4066,25 +4040,6 @@ if test "$enable_libs_Unicode_Collation" -eq 1; then
) >> "$patchlist"
fi
# Patchset loader-OSX_Preloader
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * Staging, configure-Absolute_RPATH
# |
# | This patchset fixes the following Wine bugs:
# | * [#33159] Implement preloader for Mac OS
# |
# | Modified files:
# | * Makefile.in, configure.ac, dlls/ntdll/virtual.c, libs/wine/config.c, loader/Makefile.in, loader/main.c,
# | loader/preloader.c
# |
if test "$enable_loader_OSX_Preloader" -eq 1; then
patch_apply loader-OSX_Preloader/0002-loader-Implement-preloader-for-Mac-OS.patch
(
printf '%s\n' '+ { "Sebastian Lackner", "loader: Implement preloader for Mac OS.", 1 },';
) >> "$patchlist"
fi
# Patchset mmsystem.dll16-MIDIHDR_Refcount
# |
# | This patchset fixes the following Wine bugs:
@@ -4936,24 +4891,6 @@ if test "$enable_ntdll_RtlQueryPackageIdentity" -eq 1; then
) >> "$patchlist"
fi
# Patchset ntdll-RtlGetUnloadEventTraceEx
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * ntdll-RtlQueryPackageIdentity
# |
# | This patchset fixes the following Wine bugs:
# | * [#44897] Implement stub for ntdll.RtlGetUnloadEventTraceEx
# |
# | Modified files:
# | * dlls/ntdll/ntdll.spec, dlls/ntdll/rtl.c
# |
if test "$enable_ntdll_RtlGetUnloadEventTraceEx" -eq 1; then
patch_apply ntdll-RtlGetUnloadEventTraceEx/0001-ntdll-Add-stub-for-RtlGetUnloadEventTraceEx.patch
(
printf '%s\n' '+ { "Michael Müller", "ntdll: Add stub for RtlGetUnloadEventTraceEx.", 1 },';
) >> "$patchlist"
fi
# Patchset ntdll-Serial_Port_Detection
# |
# | This patchset fixes the following Wine bugs:
@@ -5111,7 +5048,7 @@ fi
# | * [#14697] Do not allow interruption of system APC in server_select
# |
# | Modified files:
# | * dlls/kernel32/tests/sync.c, dlls/ntdll/server.c
# | * dlls/kernel32/tests/sync.c, dlls/ntdll/ntdll_misc.h, dlls/ntdll/server.c, dlls/ntdll/sync.c
# |
if test "$enable_ntdll_Wait_User_APC" -eq 1; then
patch_apply ntdll-Wait_User_APC/0001-ntdll-Block-signals-while-executing-system-APCs.patch
@@ -6619,26 +6556,17 @@ fi
# Patchset windowscodecs-Palette_Images
# |
# | Modified files:
# | * dlls/windowscodecs/bmpdecode.c, dlls/windowscodecs/bmpencode.c, dlls/windowscodecs/imgfactory.c,
# | dlls/windowscodecs/info.c, dlls/windowscodecs/pngformat.c, dlls/windowscodecs/regsvr.c,
# | dlls/windowscodecs/tests/converter.c, dlls/windowscodecs/tests/pngformat.c, dlls/windowscodecs/tiffformat.c
# | * dlls/windowscodecs/bmpencode.c, dlls/windowscodecs/info.c, dlls/windowscodecs/regsvr.c,
# | dlls/windowscodecs/tests/converter.c, dlls/windowscodecs/tiffformat.c
# |
if test "$enable_windowscodecs_Palette_Images" -eq 1; then
patch_apply windowscodecs-Palette_Images/0012-windowscodecs-tests-Add-tests-for-encoding-2bpp-4bpp.patch
patch_apply windowscodecs-Palette_Images/0013-windowscodecs-Use-V_UI1-instead-of-V_UNION-to-assign.patch
patch_apply windowscodecs-Palette_Images/0014-windowscodecs-Add-support-for-palette-image-formats-.patch
patch_apply windowscodecs-Palette_Images/0016-windowscodecs-Limit-number-of-colors-in-a-palette-in.patch
patch_apply windowscodecs-Palette_Images/0017-windowscodecs-Add-support-for-palette-image-formats-.patch
patch_apply windowscodecs-Palette_Images/0020-windowscodecs-find_decoder-should-return-an-error-it.patch
patch_apply windowscodecs-Palette_Images/0021-windowscodecs-PNG-decoder-should-return-WINCODEC_ERR.patch
(
printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs/tests: Add tests for encoding 2bpp/4bpp images with a palette.", 1 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Use V_UI1() instead of V_UNION() to assign a VT_UI1 variant member.", 1 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Add support for palette image formats to TIFF encoder.", 1 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Limit number of colors in a palette in BMP decoder.", 1 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Add support for palette image formats to BMP encoder.", 1 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Find_decoder() should return an error it received from the decoder.", 1 },';
printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: PNG decoder should return WINCODEC_ERR_UNKNOWNIMAGEFORMAT when image loading fails.", 1 },';
) >> "$patchlist"
fi

View File

@@ -1,4 +1,4 @@
From 4807c8a852d4e3d315bf0ddcede36344b3a2045c Mon Sep 17 00:00:00 2001
From 844c14bf47f1e3361e5524a6529f39f635e0f7ba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 19 Mar 2015 01:22:34 +0100
Subject: [PATCH] server: Implement support for global and local shared memory
@@ -20,22 +20,22 @@ Subject: [PATCH] server: Implement support for global and local shared memory
12 files changed, 215 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 29a92e5e0b..4ad1a825e0 100644
index fe0a37eebd..4e8cbbfcce 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -107,6 +107,7 @@ extern int server_pipe( int fd[2] ) DECLSPEC_HIDDEN;
extern NTSTATUS alloc_object_attributes( const OBJECT_ATTRIBUTES *attr, struct object_attributes **ret,
data_size_t *ret_len ) DECLSPEC_HIDDEN;
@@ -106,6 +106,7 @@ extern NTSTATUS alloc_object_attributes( const OBJECT_ATTRIBUTES *attr, struct o
extern NTSTATUS validate_open_object_attributes( const OBJECT_ATTRIBUTES *attr ) DECLSPEC_HIDDEN;
extern int wait_select_reply( void *cookie ) DECLSPEC_HIDDEN;
extern BOOL invoke_apc( const apc_call_t *call, apc_result_t *result ) DECLSPEC_HIDDEN;
+extern void *server_get_shared_memory( HANDLE thread ) DECLSPEC_HIDDEN;
/* module handling */
extern LIST_ENTRY tls_links DECLSPEC_HIDDEN;
diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c
index aca63dcd55..428d2b4d39 100644
index 38356f4674..dd8c862a39 100644
--- a/dlls/ntdll/server.c
+++ b/dlls/ntdll/server.c
@@ -1003,6 +1003,66 @@ done:
@@ -981,6 +981,66 @@ done:
}
@@ -102,7 +102,7 @@ index aca63dcd55..428d2b4d39 100644
/***********************************************************************
* wine_server_fd_to_handle (NTDLL.@)
*
@@ -1537,6 +1597,10 @@ size_t server_init_thread( void *entry_point, BOOL *suspend )
@@ -1517,6 +1577,10 @@ size_t server_init_thread( void *entry_point, BOOL *suspend )
}
SERVER_END_REQ;
@@ -114,10 +114,10 @@ index aca63dcd55..428d2b4d39 100644
ntdll_get_thread_data()->wow64_redir = is_wow64;
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
index 72031638b6..5c0497c4fc 100644
index 75b43dd653..d2b74a9cd4 100644
--- a/dlls/ntdll/thread.c
+++ b/dlls/ntdll/thread.c
@@ -615,6 +615,7 @@ void exit_thread( int status )
@@ -456,6 +456,7 @@ void exit_thread( int status )
void WINAPI RtlExitUserThread( ULONG status )
{
static void *prev_teb;
@@ -125,7 +125,7 @@ index 72031638b6..5c0497c4fc 100644
sigset_t sigset;
TEB *teb;
@@ -639,6 +640,9 @@ void WINAPI RtlExitUserThread( ULONG status )
@@ -480,6 +481,9 @@ void WINAPI RtlExitUserThread( ULONG status )
LdrShutdownThread();
RtlFreeThreadActivationContextStack();
@@ -158,10 +158,10 @@ index d573d1f7ad..9889b95aaf 100644
/* macros for server requests */
diff --git a/include/winternl.h b/include/winternl.h
index e0f3245b09..dc351de561 100644
index 9c8861334a..e7f09681af 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -395,7 +395,7 @@ typedef struct _TEB
@@ -401,7 +401,7 @@ typedef struct _TEB
PVOID Spare4; /* f7c/1750 */
PVOID ReservedForOle; /* f80/1758 */
ULONG WaitingOnLoaderLock; /* f84/1760 */
@@ -171,10 +171,10 @@ index e0f3245b09..dc351de561 100644
#ifdef _WIN64
PVOID DeallocationBStore; /* /1788 */
diff --git a/server/fd.c b/server/fd.c
index 15a0b9545c..385590b167 100644
index f2d83b4d58..223bd84626 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -2616,6 +2616,33 @@ DECL_HANDLER(write)
@@ -2564,6 +2564,33 @@ DECL_HANDLER(write)
release_object( fd );
}
@@ -209,10 +209,10 @@ index 15a0b9545c..385590b167 100644
DECL_HANDLER(ioctl)
{
diff --git a/server/file.h b/server/file.h
index 36d297d31f..b4b1c780ac 100644
index 6b67866d3f..4db2479eae 100644
--- a/server/file.h
+++ b/server/file.h
@@ -168,6 +168,14 @@ extern struct object *create_mailslot_device( struct object *root, const struct
@@ -165,6 +165,14 @@ extern struct object *create_mailslot_device( struct object *root, const struct
extern struct object *create_unix_device( struct object *root, const struct unicode_str *name,
const char *unix_path );
@@ -240,7 +240,7 @@ index 7aed338e96..f984bfc1e3 100644
return 0;
}
diff --git a/server/mapping.c b/server/mapping.c
index 650bdc963f..4eb36ae275 100644
index bc59b21b96..e8cbb7ce10 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -29,8 +29,32 @@
@@ -276,7 +276,7 @@ index 650bdc963f..4eb36ae275 100644
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
@@ -190,6 +214,10 @@ static const struct fd_ops mapping_fd_ops =
@@ -187,6 +211,10 @@ static const struct fd_ops mapping_fd_ops =
static size_t page_mask;
@@ -287,7 +287,7 @@ index 650bdc963f..4eb36ae275 100644
#define ROUND_SIZE(size) (((size) + page_mask) & ~page_mask)
@@ -261,6 +289,52 @@ static int check_current_dir_for_exec(void)
@@ -258,6 +286,52 @@ static int check_current_dir_for_exec(void)
return (ret != MAP_FAILED);
}
@@ -341,7 +341,7 @@ index 650bdc963f..4eb36ae275 100644
static int create_temp_file( file_pos_t size )
{
diff --git a/server/protocol.def b/server/protocol.def
index 00fb838ec2..294e176b11 100644
index 73e0868bed..805abecba6 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -69,6 +69,15 @@ struct request_max_size
@@ -360,7 +360,7 @@ index 00fb838ec2..294e176b11 100644
/* debug event data */
typedef union
@@ -1275,6 +1284,12 @@ enum server_fd_type
@@ -1274,6 +1283,12 @@ enum server_fd_type
@END
@@ -374,10 +374,10 @@ index 00fb838ec2..294e176b11 100644
@REQ(flush)
async_data_t async; /* async I/O parameters */
diff --git a/server/thread.c b/server/thread.c
index 31b4efd51a..e9d37c2684 100644
index 372882f7ae..1200cc1316 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -202,6 +202,8 @@ static inline void init_thread_structure( struct thread *thread )
@@ -200,6 +200,8 @@ static inline void init_thread_structure( struct thread *thread )
thread->desktop_users = 0;
thread->token = NULL;
thread->exit_poll = NULL;
@@ -386,7 +386,7 @@ index 31b4efd51a..e9d37c2684 100644
thread->creation_time = current_time;
thread->exit_time = 0;
@@ -303,6 +305,8 @@ static void cleanup_thread( struct thread *thread )
@@ -328,6 +330,8 @@ static void cleanup_thread( struct thread *thread )
thread->inflight[i].client = thread->inflight[i].server = -1;
}
}
@@ -395,7 +395,7 @@ index 31b4efd51a..e9d37c2684 100644
thread->req_data = NULL;
thread->reply_data = NULL;
thread->request_fd = NULL;
@@ -311,6 +315,9 @@ static void cleanup_thread( struct thread *thread )
@@ -336,6 +340,9 @@ static void cleanup_thread( struct thread *thread )
thread->context = NULL;
thread->suspend_context = NULL;
thread->desktop = 0;
@@ -406,7 +406,7 @@ index 31b4efd51a..e9d37c2684 100644
/* destroy a thread when its refcount is 0 */
diff --git a/server/thread.h b/server/thread.h
index 5d6d3906a6..7351c420d6 100644
index 1b01c689b3..0fc4c8318b 100644
--- a/server/thread.h
+++ b/server/thread.h
@@ -90,6 +90,8 @@ struct thread
@@ -419,5 +419,5 @@ index 5d6d3906a6..7351c420d6 100644
struct thread_snapshot
--
2.16.1
2.14.1

View File

@@ -1,4 +1,4 @@
From 7e6eb1a23949bddd3538447d5393d4b66d061f1b Mon Sep 17 00:00:00 2001
From 5dcb81fa70edefd525cad861d7cac7706db47871 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Sun, 16 Oct 2016 17:34:21 +0800
Subject: windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in JPEG
@@ -9,11 +9,11 @@ Subject: windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in JPEG
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c
index 9ec64e7..7d8beab 100644
index 451d725eb8..a060d569f8 100644
--- a/dlls/windowscodecs/jpegformat.c
+++ b/dlls/windowscodecs/jpegformat.c
@@ -1386,11 +1386,22 @@ static HRESULT WINAPI JpegEncoder_GetContainerFormat(IWICBitmapEncoder *iface,
return E_NOTIMPL;
@@ -1392,11 +1392,22 @@ static HRESULT WINAPI JpegEncoder_GetContainerFormat(IWICBitmapEncoder *iface, G
return S_OK;
}
-static HRESULT WINAPI JpegEncoder_GetEncoderInfo(IWICBitmapEncoder *iface,
@@ -40,5 +40,5 @@ index 9ec64e7..7d8beab 100644
static HRESULT WINAPI JpegEncoder_SetColorContexts(IWICBitmapEncoder *iface,
--
2.9.0
2.14.1

View File

@@ -1,4 +1,4 @@
From b0dda2778cbd2c33b90f2f500013f48c6fdb0b58 Mon Sep 17 00:00:00 2001
From 00ebc80c47100fe08c13f685ecd5b75fd94c6f13 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 21 Oct 2016 14:36:21 +0800
Subject: windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in the PNG
@@ -9,11 +9,11 @@ Subject: windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in the PNG
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/windowscodecs/pngformat.c b/dlls/windowscodecs/pngformat.c
index 1a409ae..94253d3 100644
index c0e5a59cf9..786d8360e0 100644
--- a/dlls/windowscodecs/pngformat.c
+++ b/dlls/windowscodecs/pngformat.c
@@ -1936,11 +1936,22 @@ static HRESULT WINAPI PngEncoder_GetContainerFormat(IWICBitmapEncoder *iface,
return E_NOTIMPL;
@@ -1979,11 +1979,22 @@ static HRESULT WINAPI PngEncoder_GetContainerFormat(IWICBitmapEncoder *iface, GU
return S_OK;
}
-static HRESULT WINAPI PngEncoder_GetEncoderInfo(IWICBitmapEncoder *iface,
@@ -40,5 +40,5 @@ index 1a409ae..94253d3 100644
static HRESULT WINAPI PngEncoder_SetColorContexts(IWICBitmapEncoder *iface,
--
2.9.0
2.14.1

View File

@@ -1,26 +0,0 @@
From 277591557f9b5a0d175460f95bb0be9c7ed93f09 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Tue, 20 Sep 2016 17:17:42 +0800
Subject: windowscodecs: Use V_UI1() instead of V_UNION() to assign
a VT_UI1 variant member.
---
dlls/windowscodecs/tiffformat.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c
index 6fe3f19677..2238a0eaa8 100644
--- a/dlls/windowscodecs/tiffformat.c
+++ b/dlls/windowscodecs/tiffformat.c
@@ -1973,7 +1973,7 @@ static HRESULT WINAPI TiffEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
VARIANT v;
VariantInit(&v);
V_VT(&v) = VT_UI1;
- V_UNION(&v, bVal) = WICTiffCompressionDontCare;
+ V_UI1(&v) = WICTiffCompressionDontCare;
hr = IPropertyBag2_Write(*ppIEncoderOptions, 1, (PROPBAG2 *)opts, &v);
VariantClear(&v);
if (FAILED(hr))
--
2.16.2

View File

@@ -1,25 +0,0 @@
From 818ad232038c7b56183f0d20ad4fa93624e09f17 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 23 Sep 2016 20:17:47 +0800
Subject: windowscodecs: Limit number of colors in a palette in BMP decoder.
---
dlls/windowscodecs/bmpdecode.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/windowscodecs/bmpdecode.c b/dlls/windowscodecs/bmpdecode.c
index 2bcb81e0d6..47f312ffcf 100644
--- a/dlls/windowscodecs/bmpdecode.c
+++ b/dlls/windowscodecs/bmpdecode.c
@@ -271,7 +271,7 @@ static HRESULT WINAPI BmpFrameDecode_CopyPalette(IWICBitmapFrameDecode *iface,
if (This->bih.bV5ClrUsed == 0)
count = 1 << This->bih.bV5BitCount;
else
- count = This->bih.bV5ClrUsed;
+ count = min(This->bih.bV5ClrUsed, 1 << This->bih.bV5BitCount);
tablesize = sizeof(WICColor) * count;
wiccolors = HeapAlloc(GetProcessHeap(), 0, tablesize);
--
2.16.2

View File

@@ -1,122 +0,0 @@
From 0b8859b133017e8f192e5ffb425837ea87c31ddb Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Tue, 4 Oct 2016 18:33:40 +0800
Subject: [PATCH] windowscodecs: find_decoder() should return an error it
received from the decoder.
If IWICBitmapDecoderInfo::MatchesPattern() has recognized the decoder by the pattern,
and the called IWICBitmapDecoder::Initialize() has failed, an error should be returned
right away instead of trying next codec. This allows report image format related errors
instead of WINCODEC_ERR_COMPONENTNOTFOUND.
---
dlls/windowscodecs/imgfactory.c | 42 ++++++++++++++++++---------------
1 file changed, 23 insertions(+), 19 deletions(-)
diff --git a/dlls/windowscodecs/imgfactory.c b/dlls/windowscodecs/imgfactory.c
index dbcc5f59234..58ef1a02f68 100644
--- a/dlls/windowscodecs/imgfactory.c
+++ b/dlls/windowscodecs/imgfactory.c
@@ -130,22 +130,23 @@ static HRESULT WINAPI ImagingFactory_CreateDecoderFromFilename(
return hr;
}
-static IWICBitmapDecoder *find_decoder(IStream *pIStream, const GUID *pguidVendor,
- WICDecodeOptions metadataOptions)
+static HRESULT find_decoder(IStream *pIStream, const GUID *pguidVendor,
+ WICDecodeOptions metadataOptions, IWICBitmapDecoder **decoder)
{
IEnumUnknown *enumdecoders;
IUnknown *unkdecoderinfo;
IWICBitmapDecoderInfo *decoderinfo;
- IWICBitmapDecoder *decoder = NULL;
GUID vendor;
HRESULT res;
ULONG num_fetched;
BOOL matches;
+ *decoder = NULL;
+
res = CreateComponentEnumerator(WICDecoder, WICComponentEnumerateDefault, &enumdecoders);
- if (FAILED(res)) return NULL;
+ if (FAILED(res)) return res;
- while (!decoder)
+ while (!*decoder)
{
res = IEnumUnknown_Next(enumdecoders, 1, &unkdecoderinfo, &num_fetched);
@@ -170,18 +171,21 @@ static IWICBitmapDecoder *find_decoder(IStream *pIStream, const GUID *pguidVendo
if (SUCCEEDED(res) && matches)
{
- res = IWICBitmapDecoderInfo_CreateInstance(decoderinfo, &decoder);
+ res = IWICBitmapDecoderInfo_CreateInstance(decoderinfo, decoder);
/* FIXME: should use QueryCapability to choose a decoder */
if (SUCCEEDED(res))
{
- res = IWICBitmapDecoder_Initialize(decoder, pIStream, metadataOptions);
+ res = IWICBitmapDecoder_Initialize(*decoder, pIStream, metadataOptions);
if (FAILED(res))
{
- IWICBitmapDecoder_Release(decoder);
- decoder = NULL;
+ IWICBitmapDecoder_Release(*decoder);
+ IWICBitmapDecoderInfo_Release(decoderinfo);
+ IUnknown_Release(unkdecoderinfo);
+ *decoder = NULL;
+ return res;
}
}
}
@@ -197,7 +201,7 @@ static IWICBitmapDecoder *find_decoder(IStream *pIStream, const GUID *pguidVendo
IEnumUnknown_Release(enumdecoders);
- return decoder;
+ return WINCODEC_ERR_COMPONENTNOTFOUND;
}
static HRESULT WINAPI ImagingFactory_CreateDecoderFromStream(
@@ -211,9 +215,9 @@ static HRESULT WINAPI ImagingFactory_CreateDecoderFromStream(
metadataOptions, ppIDecoder);
if (pguidVendor)
- decoder = find_decoder(pIStream, pguidVendor, metadataOptions);
+ res = find_decoder(pIStream, pguidVendor, metadataOptions, &decoder);
if (!decoder)
- decoder = find_decoder(pIStream, NULL, metadataOptions);
+ res = find_decoder(pIStream, NULL, metadataOptions, &decoder);
if (decoder)
{
@@ -228,17 +232,17 @@ static HRESULT WINAPI ImagingFactory_CreateDecoderFromStream(
BYTE data[4];
ULONG bytesread;
- WARN("failed to load from a stream\n");
+ WARN("failed to load from a stream %#x\n", res);
seek.QuadPart = 0;
- res = IStream_Seek(pIStream, seek, STREAM_SEEK_SET, NULL);
- if (SUCCEEDED(res))
- res = IStream_Read(pIStream, data, 4, &bytesread);
- if (SUCCEEDED(res))
- WARN("first %i bytes of stream=%x %x %x %x\n", bytesread, data[0], data[1], data[2], data[3]);
+ if (IStream_Seek(pIStream, seek, STREAM_SEEK_SET, NULL) == S_OK)
+ {
+ if (IStream_Read(pIStream, data, 4, &bytesread) == S_OK)
+ WARN("first %i bytes of stream=%x %x %x %x\n", bytesread, data[0], data[1], data[2], data[3]);
+ }
}
*ppIDecoder = NULL;
- return WINCODEC_ERR_COMPONENTNOTFOUND;
+ return res;
}
}
--
2.19.0

View File

@@ -1,63 +0,0 @@
From 828277c6706d2362f49c2a85b5f98ee224c0f059 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Tue, 4 Oct 2016 18:39:40 +0800
Subject: windowscodecs: PNG decoder should return
WINCODEC_ERR_UNKNOWNIMAGEFORMAT when image loading fails.
---
dlls/windowscodecs/pngformat.c | 2 +-
dlls/windowscodecs/tests/pngformat.c | 4 ----
2 files changed, 1 insertion(+), 5 deletions(-)
diff --git a/dlls/windowscodecs/pngformat.c b/dlls/windowscodecs/pngformat.c
index 26b5fd52bc..e5ad7876aa 100644
--- a/dlls/windowscodecs/pngformat.c
+++ b/dlls/windowscodecs/pngformat.c
@@ -622,7 +622,7 @@ static HRESULT WINAPI PngDecoder_Initialize(IWICBitmapDecoder *iface, IStream *p
ppng_destroy_read_struct(&This->png_ptr, &This->info_ptr, &This->end_info);
HeapFree(GetProcessHeap(), 0, row_pointers);
This->png_ptr = NULL;
- hr = E_FAIL;
+ hr = WINCODEC_ERR_UNKNOWNIMAGEFORMAT;
goto end;
}
ppng_set_error_fn(This->png_ptr, jmpbuf, user_error_fn, user_warning_fn);
diff --git a/dlls/windowscodecs/tests/pngformat.c b/dlls/windowscodecs/tests/pngformat.c
index 4b84ccebb1..3a0ea28ead 100644
--- a/dlls/windowscodecs/tests/pngformat.c
+++ b/dlls/windowscodecs/tests/pngformat.c
@@ -726,7 +726,6 @@ static void test_color_formats(void)
hr = create_decoder(buf, sizeof(buf), &decoder);
if (!is_valid_png_type_depth(td[i].color_type, td[i].bit_depth, TRUE))
-todo_wine
ok(hr == WINCODEC_ERR_UNKNOWNIMAGEFORMAT, "%d: wrong error %#x\n", i, hr);
else
todo_wine_if(td[i].todo_load)
@@ -755,7 +754,6 @@ next_1:
hr = create_decoder(buf, sizeof(buf), &decoder);
if (!is_valid_png_type_depth(td[i].color_type, td[i].bit_depth, TRUE))
-todo_wine
ok(hr == WINCODEC_ERR_UNKNOWNIMAGEFORMAT, "%d: wrong error %#x\n", i, hr);
else
todo_wine_if(td[i].todo_load)
@@ -784,7 +782,6 @@ next_2:
hr = create_decoder(buf, sizeof(buf), &decoder);
if (!is_valid_png_type_depth(td[i].color_type, td[i].bit_depth, FALSE))
-todo_wine
ok(hr == WINCODEC_ERR_UNKNOWNIMAGEFORMAT, "%d: wrong error %#x\n", i, hr);
else
todo_wine_if(td[i].todo_load)
@@ -812,7 +809,6 @@ next_3:
hr = create_decoder(buf, sizeof(buf), &decoder);
if (!is_valid_png_type_depth(td[i].color_type, td[i].bit_depth, FALSE))
-todo_wine
ok(hr == WINCODEC_ERR_UNKNOWNIMAGEFORMAT, "%d: wrong error %#x\n", i, hr);
else
todo_wine_if(td[i].todo_load)
--
2.16.2