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
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d935a41e61 | ||
|
31acabe792 | ||
|
1a2b47b084 | ||
|
2e9f238732 | ||
|
cf32a7092b | ||
|
4303e3ee3b | ||
|
49ed7ae4a0 | ||
|
eff142bc57 | ||
|
bd2608b12c | ||
|
acb054627a | ||
|
f07f287395 | ||
|
8703ad8375 | ||
|
1f500db5b7 | ||
|
1deec9df95 | ||
|
a8e296715c | ||
|
43d5c1e0f5 |
@@ -94,17 +94,17 @@ proper implementation. In the event that this happens, we add the patches to
|
||||
wine-staging instead, and keep them updated and maintained as well as attempt to
|
||||
clean them up to be upstreamed. We also both write and verify patches which fix
|
||||
various bugs that may not have patches, and in turn allow them run better using
|
||||
WINE. This includes testing on various hardware, games, and applications.
|
||||
WINE. This includes testing on various hardware, games and applications.
|
||||
|
||||
Any expenses for applications, games, or hardware which we do not own comes out
|
||||
of pocket. In order to alleviate these expenses, we are now accepting donations.
|
||||
This in turn allows us to continue to perform testing, provide fixes, and get
|
||||
them upstreamed, ultimately aiming to provide a better experience for all WINE
|
||||
users. All of our work is provided publicly for free and can be found at
|
||||
<https://github.com/wine-staging/wine-staging>. We do not expect to be paid for
|
||||
<https://gitlab.winehq.org/wine/wine-staging>. We do not expect to be paid for
|
||||
any of the work provided, nor will donators receive any special benefits or
|
||||
compensation.
|
||||
|
||||
Donations are recieved through Patreon. Anyone interested may donate here:
|
||||
|
||||
https://www.patreon.com/winestaging
|
||||
https://www.patreon.com/winestaging
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 846f2603e9d2a3a3b5a56b0e1140bb49a95053a6 Mon Sep 17 00:00:00 2001
|
||||
From ec18233558b62aa736b5ecf20d2f7487e2823286 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
|
||||
@@ -15,7 +15,7 @@ Subject: [PATCH] server: Create server objects for eventfd-based
|
||||
create mode 100644 server/esync.h
|
||||
|
||||
diff --git a/server/Makefile.in b/server/Makefile.in
|
||||
index c81a2112632..da20dff9f56 100644
|
||||
index 3b9446fe224..776faec63e4 100644
|
||||
--- a/server/Makefile.in
|
||||
+++ b/server/Makefile.in
|
||||
@@ -11,6 +11,7 @@ C_SRCS = \
|
||||
@@ -28,7 +28,7 @@ index c81a2112632..da20dff9f56 100644
|
||||
file.c \
|
||||
diff --git a/server/esync.c b/server/esync.c
|
||||
new file mode 100644
|
||||
index 00000000000..b9dbfa322bc
|
||||
index 00000000000..35b4833fd4c
|
||||
--- /dev/null
|
||||
+++ b/server/esync.c
|
||||
@@ -0,0 +1,318 @@
|
||||
@@ -158,7 +158,7 @@ index 00000000000..b9dbfa322bc
|
||||
+ NULL, /* satisfied */
|
||||
+ no_signal, /* signal */
|
||||
+ no_get_fd, /* get_fd */
|
||||
+ no_map_access, /* map_access */
|
||||
+ default_map_access, /* map_access */
|
||||
+ default_get_sd, /* get_sd */
|
||||
+ default_set_sd, /* set_sd */
|
||||
+ default_get_full_name, /* get_full_name */
|
||||
@@ -403,10 +403,10 @@ index a134d811d82..3436b0871b4 100644
|
||||
set_current_time();
|
||||
init_scheduler();
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 6bfcda213a4..6b0e0e6f6e4 100644
|
||||
index 99df502e398..9e15ada5bd0 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -3738,7 +3738,6 @@ struct handle_info
|
||||
@@ -3777,7 +3777,6 @@ struct handle_info
|
||||
obj_handle_t handle; /* process handle */
|
||||
@END
|
||||
|
||||
@@ -414,7 +414,7 @@ index 6bfcda213a4..6b0e0e6f6e4 100644
|
||||
/* Iterate thread list for process */
|
||||
@REQ(get_next_thread)
|
||||
obj_handle_t process; /* process handle */
|
||||
@@ -3749,3 +3748,27 @@ struct handle_info
|
||||
@@ -3788,3 +3787,27 @@ struct handle_info
|
||||
@REPLY
|
||||
obj_handle_t handle; /* next thread handle */
|
||||
@END
|
||||
@@ -443,5 +443,5 @@ index 6bfcda213a4..6b0e0e6f6e4 100644
|
||||
+ unsigned int shm_idx;
|
||||
+@END
|
||||
--
|
||||
2.35.1
|
||||
2.38.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From c204c9ed2a8504868c3cbf487e7a29c4e7254d3f Mon Sep 17 00:00:00 2001
|
||||
From 271f43a1fafb19e1404b05ec597b504ecad74784 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,10 +16,10 @@ 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 185bc563e68..d7c757cab32 100644
|
||||
index 07688a5fcf6..4e490c475a2 100644
|
||||
--- a/dlls/ntdll/Makefile.in
|
||||
+++ b/dlls/ntdll/Makefile.in
|
||||
@@ -46,6 +46,7 @@ C_SRCS = \
|
||||
@@ -47,6 +47,7 @@ C_SRCS = \
|
||||
unix/cdrom.c \
|
||||
unix/debug.c \
|
||||
unix/env.c \
|
||||
@@ -346,7 +346,7 @@ 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 10884a7a673..28cc48e04bf 100644
|
||||
index 35f2e5f986f..4d95c29ab24 100644
|
||||
--- a/dlls/ntdll/unix/loader.c
|
||||
+++ b/dlls/ntdll/unix/loader.c
|
||||
@@ -89,6 +89,7 @@
|
||||
@@ -357,8 +357,8 @@ index 10884a7a673..28cc48e04bf 100644
|
||||
#include "wine/list.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
@@ -2082,6 +2083,7 @@ static void start_main_thread(void)
|
||||
signal_init_thread( teb );
|
||||
@@ -2188,6 +2189,7 @@ static void start_main_thread(void)
|
||||
signal_alloc_thread( teb );
|
||||
dbg_init();
|
||||
startup_info_size = server_init_process();
|
||||
+ esync_init();
|
||||
@@ -366,7 +366,7 @@ index 10884a7a673..28cc48e04bf 100644
|
||||
init_cpu_info();
|
||||
init_files();
|
||||
diff --git a/dlls/ntdll/unix/server.c b/dlls/ntdll/unix/server.c
|
||||
index 6a3224d8385..de65f936a59 100644
|
||||
index b7d8733f2bc..8cd5f0474e6 100644
|
||||
--- a/dlls/ntdll/unix/server.c
|
||||
+++ b/dlls/ntdll/unix/server.c
|
||||
@@ -106,7 +106,7 @@ sigset_t server_block_set; /* signals to block during server calls */
|
||||
@@ -378,7 +378,7 @@ index 6a3224d8385..de65f936a59 100644
|
||||
|
||||
/* atomically exchange a 64-bit value */
|
||||
static inline LONG64 interlocked_xchg64( LONG64 *dest, LONG64 val )
|
||||
@@ -803,7 +803,7 @@ void wine_server_send_fd( int fd )
|
||||
@@ -834,7 +834,7 @@ void wine_server_send_fd( int fd )
|
||||
*
|
||||
* Receive a file descriptor passed from the server.
|
||||
*/
|
||||
@@ -388,7 +388,7 @@ index 6a3224d8385..de65f936a59 100644
|
||||
struct iovec vec;
|
||||
struct msghdr msghdr;
|
||||
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
|
||||
index 442243d8bcf..72cbf92f93c 100644
|
||||
index 9112572c67d..c5f30428f79 100644
|
||||
--- a/dlls/ntdll/unix/sync.c
|
||||
+++ b/dlls/ntdll/unix/sync.c
|
||||
@@ -64,6 +64,7 @@
|
||||
@@ -399,7 +399,7 @@ index 442243d8bcf..72cbf92f93c 100644
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(sync);
|
||||
|
||||
@@ -262,6 +263,9 @@ NTSTATUS WINAPI NtCreateSemaphore( HANDLE *handle, ACCESS_MASK access, const OBJ
|
||||
@@ -273,6 +274,9 @@ NTSTATUS WINAPI NtCreateSemaphore( HANDLE *handle, ACCESS_MASK access, const OBJ
|
||||
if (max <= 0 || initial < 0 || initial > max) return STATUS_INVALID_PARAMETER;
|
||||
if ((ret = alloc_object_attributes( attr, &objattr, &len ))) return ret;
|
||||
|
||||
@@ -422,5 +422,5 @@ index b9dbfa322bc..99e57eca44c 100644
|
||||
int do_esync(void)
|
||||
{
|
||||
--
|
||||
2.34.1
|
||||
2.38.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 161ae4c64b5e3bd33771671f518c482a6a66700b Mon Sep 17 00:00:00 2001
|
||||
From 614c13aed3d20a772c3ccd26547fa93a56fcc40b Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Sun, 10 Jun 2018 19:08:18 -0500
|
||||
Subject: [PATCH] server: Implement esync_map_access().
|
||||
@@ -8,10 +8,10 @@ Subject: [PATCH] server: Implement esync_map_access().
|
||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/server/esync.c b/server/esync.c
|
||||
index 1703608263f..20f149cdad3 100644
|
||||
index eca9b6aa67d..3a334b3b330 100644
|
||||
--- a/server/esync.c
|
||||
+++ b/server/esync.c
|
||||
@@ -114,6 +114,7 @@ struct esync
|
||||
@@ -112,6 +112,7 @@ struct esync
|
||||
};
|
||||
|
||||
static void esync_dump( struct object *obj, int verbose );
|
||||
@@ -19,16 +19,16 @@ index 1703608263f..20f149cdad3 100644
|
||||
static void esync_destroy( struct object *obj );
|
||||
|
||||
const struct object_ops esync_ops =
|
||||
@@ -128,7 +129,7 @@ const struct object_ops esync_ops =
|
||||
@@ -126,7 +127,7 @@ const struct object_ops esync_ops =
|
||||
NULL, /* satisfied */
|
||||
no_signal, /* signal */
|
||||
no_get_fd, /* get_fd */
|
||||
- no_map_access, /* map_access */
|
||||
- default_map_access, /* map_access */
|
||||
+ esync_map_access, /* map_access */
|
||||
default_get_sd, /* get_sd */
|
||||
default_set_sd, /* set_sd */
|
||||
default_get_full_name, /* get_full_name */
|
||||
@@ -148,6 +149,16 @@ static void esync_dump( struct object *obj, int verbose )
|
||||
@@ -146,6 +147,16 @@ static void esync_dump( struct object *obj, int verbose )
|
||||
fprintf( stderr, "esync fd=%d\n", esync->fd );
|
||||
}
|
||||
|
||||
@@ -46,5 +46,5 @@ index 1703608263f..20f149cdad3 100644
|
||||
{
|
||||
struct esync *esync = (struct esync *)obj;
|
||||
--
|
||||
2.28.0
|
||||
2.38.1
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
From 6e5861b34f4359129d0ebec199e2106db4b7be43 Mon Sep 17 00:00:00 2001
|
||||
From eba9e414d60a33dfde7e7b978fcdddbaf9bfe5b6 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Wed, 21 Oct 2020 16:03:21 -0500
|
||||
Subject: [PATCH 08/88] winegstreamer: Allow videoconvert to parallelize.
|
||||
Subject: [PATCH] winegstreamer: Allow videoconvert to parallelize.
|
||||
|
||||
Not sure if this should be called a hack. It's not the *best* solution to the problem, but it's not a wrong one either.
|
||||
|
||||
@@ -11,10 +11,10 @@ Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
|
||||
index 0a6cf927187..5f3b4375b4c 100644
|
||||
index 0573c99858b..5df08dc5fd7 100644
|
||||
--- a/dlls/winegstreamer/wg_parser.c
|
||||
+++ b/dlls/winegstreamer/wg_parser.c
|
||||
@@ -1189,6 +1189,9 @@ static void pad_added_cb(GstElement *element, GstPad *pad, gpointer user)
|
||||
@@ -760,6 +760,9 @@ static void pad_added_cb(GstElement *element, GstPad *pad, gpointer user)
|
||||
if (!(vconv = create_element("videoconvert", "base")))
|
||||
goto out;
|
||||
|
||||
@@ -25,5 +25,5 @@ index 0a6cf927187..5f3b4375b4c 100644
|
||||
if (!(flip = create_element("videoflip", "good")))
|
||||
goto out;
|
||||
--
|
||||
2.34.1
|
||||
2.37.2
|
||||
|
||||
|
@@ -1,8 +1,7 @@
|
||||
From 9986fba2a9fd7f37a9d27a0257c8b20f59c56d8f Mon Sep 17 00:00:00 2001
|
||||
From bd90f10550e2de898517d0a41b94f76f23fc9601 Mon Sep 17 00:00:00 2001
|
||||
From: Derek Lesho <dlesho@codeweavers.com>
|
||||
Date: Fri, 19 Mar 2021 17:01:54 -0400
|
||||
Subject: [PATCH 25/88] winegstreamer: Report streams backwards in media
|
||||
source.
|
||||
Subject: [PATCH] winegstreamer: Report streams backwards in media source.
|
||||
|
||||
Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
|
||||
---
|
||||
@@ -10,10 +9,10 @@ Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
|
||||
index bccbf888a4a..2ed31666cad 100644
|
||||
index 43beb71838a..d39b01b8578 100644
|
||||
--- a/dlls/winegstreamer/media_source.c
|
||||
+++ b/dlls/winegstreamer/media_source.c
|
||||
@@ -1491,7 +1491,7 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
|
||||
@@ -1480,7 +1480,7 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
|
||||
descriptors = malloc(object->stream_count * sizeof(IMFStreamDescriptor *));
|
||||
for (i = 0; i < object->stream_count; i++)
|
||||
{
|
||||
@@ -23,5 +22,5 @@ index bccbf888a4a..2ed31666cad 100644
|
||||
|
||||
if (FAILED(hr = MFCreatePresentationDescriptor(object->stream_count, descriptors, &object->pres_desc)))
|
||||
--
|
||||
2.34.1
|
||||
2.37.2
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
From 856636245cd3de1bc91d76146e18fef864ec7065 Mon Sep 17 00:00:00 2001
|
||||
From 1913dfb174c48d60d0b81aba3fb9f03b5cef78c2 Mon Sep 17 00:00:00 2001
|
||||
From: Derek Lesho <dlesho@codeweavers.com>
|
||||
Date: Fri, 4 Dec 2020 16:17:11 -0500
|
||||
Subject: [PATCH 38/88] winegstreamer: In the default configuration, select one
|
||||
Subject: [PATCH] winegstreamer: In the default configuration, select one
|
||||
stream of each major type.
|
||||
|
||||
---
|
||||
@@ -9,10 +9,10 @@ Subject: [PATCH 38/88] winegstreamer: In the default configuration, select one
|
||||
1 file changed, 21 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
|
||||
index 2ed31666cad..c97348cc2d6 100644
|
||||
index d39b01b8578..de6a2c2b232 100644
|
||||
--- a/dlls/winegstreamer/media_source.c
|
||||
+++ b/dlls/winegstreamer/media_source.c
|
||||
@@ -1397,6 +1397,7 @@ static const IMFMediaSourceVtbl IMFMediaSource_vtbl =
|
||||
@@ -1386,6 +1386,7 @@ static const IMFMediaSourceVtbl IMFMediaSource_vtbl =
|
||||
|
||||
static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_source **out_media_source)
|
||||
{
|
||||
@@ -20,7 +20,7 @@ index 2ed31666cad..c97348cc2d6 100644
|
||||
IMFStreamDescriptor **descriptors = NULL;
|
||||
unsigned int stream_count = UINT_MAX;
|
||||
struct media_source *object;
|
||||
@@ -1497,9 +1498,28 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
|
||||
@@ -1486,9 +1487,28 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
|
||||
if (FAILED(hr = MFCreatePresentationDescriptor(object->stream_count, descriptors, &object->pres_desc)))
|
||||
goto fail;
|
||||
|
||||
@@ -51,5 +51,5 @@ index 2ed31666cad..c97348cc2d6 100644
|
||||
}
|
||||
free(descriptors);
|
||||
--
|
||||
2.34.1
|
||||
2.37.2
|
||||
|
||||
|
@@ -1,18 +1,18 @@
|
||||
From 6c81e31b53f5b3f3fd798e3d3fb43f9a2df8fa5b Mon Sep 17 00:00:00 2001
|
||||
From 7649a8e89c0dff9ecba0314234bedb507c6ade87 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Wed, 15 Dec 2021 11:51:33 +0100
|
||||
Subject: [PATCH 43/88] winegstreamer: Update offset according to the size of
|
||||
the buffer read.
|
||||
Subject: [PATCH] winegstreamer: Update offset according to the size of the
|
||||
buffer read.
|
||||
|
||||
---
|
||||
dlls/winegstreamer/wg_parser.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
|
||||
index a11fc8c4f68..42c727fbd0b 100644
|
||||
index 5df08dc5fd7..6ec8e1bdbd8 100644
|
||||
--- a/dlls/winegstreamer/wg_parser.c
|
||||
+++ b/dlls/winegstreamer/wg_parser.c
|
||||
@@ -1642,7 +1642,7 @@ static void *push_data(void *arg)
|
||||
@@ -998,7 +998,7 @@ static void *push_data(void *arg)
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -22,5 +22,5 @@ index a11fc8c4f68..42c727fbd0b 100644
|
||||
buffer->duration = buffer->pts = -1;
|
||||
if ((ret = gst_pad_push(parser->my_src, buffer)) < 0)
|
||||
--
|
||||
2.34.1
|
||||
2.37.2
|
||||
|
||||
|
@@ -1,21 +1,21 @@
|
||||
From 3d8fddbac3026e1eed86f718452f833ac2d6b5c6 Mon Sep 17 00:00:00 2001
|
||||
From bdf230e4b3fedad3cf63d612dbc57e68fd33094a Mon Sep 17 00:00:00 2001
|
||||
From: Derek Lesho <dlesho@codeweavers.com>
|
||||
Date: Thu, 18 Mar 2021 15:25:17 -0400
|
||||
Subject: [PATCH 50/88] winegstreamer: Implement MF_SD_LANGUAGE.
|
||||
Subject: [PATCH] winegstreamer: Implement MF_SD_LANGUAGE.
|
||||
|
||||
---
|
||||
dlls/winegstreamer/gst_private.h | 1 +
|
||||
dlls/winegstreamer/main.c | 12 ++++++++++++
|
||||
dlls/winegstreamer/media_source.c | 20 +++++++++++++++++++-
|
||||
dlls/winegstreamer/unixlib.h | 8 ++++++++
|
||||
dlls/winegstreamer/wg_parser.c | 30 ++++++++++++++++++++++++++++++
|
||||
5 files changed, 70 insertions(+), 1 deletion(-)
|
||||
dlls/winegstreamer/wg_parser.c | 31 +++++++++++++++++++++++++++++++
|
||||
5 files changed, 71 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
|
||||
index 6e7c53782c8..49879fe416d 100644
|
||||
index c33a89afd5b..21aef431039 100644
|
||||
--- a/dlls/winegstreamer/gst_private.h
|
||||
+++ b/dlls/winegstreamer/gst_private.h
|
||||
@@ -94,6 +94,7 @@ void wg_parser_stream_notify_qos(struct wg_parser_stream *stream,
|
||||
@@ -95,6 +95,7 @@ void wg_parser_stream_notify_qos(struct wg_parser_stream *stream,
|
||||
|
||||
/* Returns the duration in 100-nanosecond units. */
|
||||
uint64_t wg_parser_stream_get_duration(struct wg_parser_stream *stream);
|
||||
@@ -24,10 +24,10 @@ index 6e7c53782c8..49879fe416d 100644
|
||||
void wg_parser_stream_seek(struct wg_parser_stream *stream, double rate,
|
||||
uint64_t start_pos, uint64_t stop_pos, DWORD start_flags, DWORD stop_flags);
|
||||
diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c
|
||||
index 316becdbc97..a9a9c72136d 100644
|
||||
index 2efa3bd26ac..2b9f10e7b37 100644
|
||||
--- a/dlls/winegstreamer/main.c
|
||||
+++ b/dlls/winegstreamer/main.c
|
||||
@@ -253,6 +253,18 @@ uint64_t wg_parser_stream_get_duration(struct wg_parser_stream *stream)
|
||||
@@ -271,6 +271,18 @@ uint64_t wg_parser_stream_get_duration(struct wg_parser_stream *stream)
|
||||
return params.duration;
|
||||
}
|
||||
|
||||
@@ -47,10 +47,10 @@ index 316becdbc97..a9a9c72136d 100644
|
||||
uint64_t start_pos, uint64_t stop_pos, DWORD start_flags, DWORD stop_flags)
|
||||
{
|
||||
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
|
||||
index fd6479d9879..11040ac159a 100644
|
||||
index 042c635ae93..7c58dce5e27 100644
|
||||
--- a/dlls/winegstreamer/media_source.c
|
||||
+++ b/dlls/winegstreamer/media_source.c
|
||||
@@ -1492,7 +1492,25 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
|
||||
@@ -1482,7 +1482,25 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
|
||||
descriptors = malloc(object->stream_count * sizeof(IMFStreamDescriptor *));
|
||||
for (i = 0; i < object->stream_count; i++)
|
||||
{
|
||||
@@ -78,10 +78,10 @@ index fd6479d9879..11040ac159a 100644
|
||||
|
||||
if (FAILED(hr = MFCreatePresentationDescriptor(object->stream_count, descriptors, &object->pres_desc)))
|
||||
diff --git a/dlls/winegstreamer/unixlib.h b/dlls/winegstreamer/unixlib.h
|
||||
index 17b5c606014..fdcecfc96d5 100644
|
||||
index 9c53ecbfbc3..0c0fec0e966 100644
|
||||
--- a/dlls/winegstreamer/unixlib.h
|
||||
+++ b/dlls/winegstreamer/unixlib.h
|
||||
@@ -254,6 +254,13 @@ struct wg_parser_stream_get_duration_params
|
||||
@@ -249,6 +249,13 @@ struct wg_parser_stream_get_duration_params
|
||||
UINT64 duration;
|
||||
};
|
||||
|
||||
@@ -95,27 +95,27 @@ index 17b5c606014..fdcecfc96d5 100644
|
||||
struct wg_parser_stream_seek_params
|
||||
{
|
||||
struct wg_parser_stream *stream;
|
||||
@@ -290,6 +297,7 @@ enum unix_funcs
|
||||
@@ -309,6 +316,7 @@ enum unix_funcs
|
||||
unix_wg_parser_stream_notify_qos,
|
||||
|
||||
unix_wg_parser_stream_get_duration,
|
||||
+ unix_wg_parser_stream_get_language,
|
||||
unix_wg_parser_stream_seek,
|
||||
|
||||
unix_wg_parser_stream_drain,
|
||||
unix_wg_transform_create,
|
||||
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
|
||||
index 06e07b874bf..dc655b275bd 100644
|
||||
index 6ec8e1bdbd8..6fa712dd1fb 100644
|
||||
--- a/dlls/winegstreamer/wg_parser.c
|
||||
+++ b/dlls/winegstreamer/wg_parser.c
|
||||
@@ -110,6 +110,7 @@ struct wg_parser_stream
|
||||
@@ -109,6 +109,7 @@ struct wg_parser_stream
|
||||
bool flushing, eos, enabled, has_caps;
|
||||
|
||||
uint64_t duration;
|
||||
+ gchar *language_code;
|
||||
};
|
||||
|
||||
static enum wg_audio_format wg_audio_format_from_gst(GstAudioFormat format)
|
||||
@@ -871,6 +872,14 @@ static NTSTATUS wg_parser_stream_get_duration(void *args)
|
||||
static NTSTATUS wg_parser_get_stream_count(void *args)
|
||||
@@ -350,6 +351,14 @@ static NTSTATUS wg_parser_stream_get_duration(void *args)
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ index 06e07b874bf..dc655b275bd 100644
|
||||
static NTSTATUS wg_parser_stream_seek(void *args)
|
||||
{
|
||||
GstSeekType start_type = GST_SEEK_TYPE_SET, stop_type = GST_SEEK_TYPE_SET;
|
||||
@@ -1321,6 +1330,9 @@ static void free_stream(struct wg_parser_stream *stream)
|
||||
@@ -723,6 +732,9 @@ static void free_stream(struct wg_parser_stream *stream)
|
||||
pthread_cond_destroy(&stream->event_cond);
|
||||
pthread_cond_destroy(&stream->event_empty_cond);
|
||||
|
||||
@@ -140,7 +140,7 @@ index 06e07b874bf..dc655b275bd 100644
|
||||
free(stream);
|
||||
}
|
||||
|
||||
@@ -1931,6 +1943,22 @@ static gboolean src_event_cb(GstPad *pad, GstObject *parent, GstEvent *event)
|
||||
@@ -1187,6 +1199,22 @@ static gboolean src_event_cb(GstPad *pad, GstObject *parent, GstEvent *event)
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -160,25 +160,26 @@ index 06e07b874bf..dc655b275bd 100644
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static HRESULT wg_parser_connect_inner(struct wg_parser *parser)
|
||||
static NTSTATUS wg_parser_connect(void *args)
|
||||
{
|
||||
GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE("wine_src",
|
||||
@@ -2066,6 +2094,7 @@ static NTSTATUS wg_parser_connect(void *args)
|
||||
pthread_cond_wait(&parser->init_cond, &parser->mutex);
|
||||
}
|
||||
}
|
||||
GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE("quartz_src",
|
||||
@@ -1315,6 +1343,8 @@ static NTSTATUS wg_parser_connect(void *args)
|
||||
* attempting to read anything), but we don't want to waste CPU time
|
||||
* trying to decode them. */
|
||||
stream->enabled = true;
|
||||
+
|
||||
+ stream->language_code = query_language(stream->their_src);
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&parser->mutex);
|
||||
@@ -2561,6 +2590,7 @@ const unixlib_entry_t __wine_unix_call_funcs[] =
|
||||
@@ -1631,6 +1661,7 @@ const unixlib_entry_t __wine_unix_call_funcs[] =
|
||||
X(wg_parser_stream_notify_qos),
|
||||
|
||||
X(wg_parser_stream_get_duration),
|
||||
+ X(wg_parser_stream_get_language),
|
||||
X(wg_parser_stream_seek),
|
||||
|
||||
X(wg_parser_stream_drain),
|
||||
X(wg_transform_create),
|
||||
--
|
||||
2.34.1
|
||||
2.37.2
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
From 5ebda711a9d8b5e3194464eab3fecf52ed3c8b59 Mon Sep 17 00:00:00 2001
|
||||
From 56ad22a46d27fdc5313aff459f6334bb0051e21a Mon Sep 17 00:00:00 2001
|
||||
From: Nikolay Sivov <nsivov@codeweavers.com>
|
||||
Date: Wed, 12 Jan 2022 22:48:35 +0300
|
||||
Subject: [PATCH 55/88] winegstreamer: Add MFVideoFormat_ARGB32 output for the
|
||||
Subject: [PATCH] winegstreamer: Add MFVideoFormat_ARGB32 output for the
|
||||
source.
|
||||
|
||||
(cherry picked from commit 9812591f0003c5c611faa59ab9b3cb73a85be637)
|
||||
@@ -12,10 +12,10 @@ CW-Bug-Id: #19975
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
|
||||
index e5f25eed63a..9d5a8b831b9 100644
|
||||
index de6a2c2b232..042c635ae93 100644
|
||||
--- a/dlls/winegstreamer/media_source.c
|
||||
+++ b/dlls/winegstreamer/media_source.c
|
||||
@@ -873,7 +873,7 @@ static HRESULT new_media_stream(struct media_source *source,
|
||||
@@ -855,7 +855,7 @@ static HRESULT new_media_stream(struct media_source *source,
|
||||
static HRESULT media_stream_init_desc(struct media_stream *stream)
|
||||
{
|
||||
IMFMediaTypeHandler *type_handler = NULL;
|
||||
@@ -24,7 +24,7 @@ index e5f25eed63a..9d5a8b831b9 100644
|
||||
struct wg_format format;
|
||||
DWORD type_count = 0;
|
||||
unsigned int i;
|
||||
@@ -892,6 +892,7 @@ static HRESULT media_stream_init_desc(struct media_stream *stream)
|
||||
@@ -874,6 +874,7 @@ static HRESULT media_stream_init_desc(struct media_stream *stream)
|
||||
&MFVideoFormat_YUY2,
|
||||
&MFVideoFormat_IYUV,
|
||||
&MFVideoFormat_I420,
|
||||
@@ -33,5 +33,5 @@ index e5f25eed63a..9d5a8b831b9 100644
|
||||
|
||||
IMFMediaType *base_type = mf_media_type_from_wg_format(&format);
|
||||
--
|
||||
2.34.1
|
||||
2.37.2
|
||||
|
||||
|
@@ -1,2 +1 @@
|
||||
Fixes: [49692] Multiple applications need a Media Foundation media source implementation
|
||||
Disabled: True
|
||||
|
@@ -1,114 +0,0 @@
|
||||
From bef93835ceb4a482c348b0aa6e62ce4fee5e3f35 Mon Sep 17 00:00:00 2001
|
||||
From: Zhenbo Li <litimetal@gmail.com>
|
||||
Date: Tue, 1 Jul 2014 19:45:43 +0800
|
||||
Subject: [PATCH] mshtml: Add IHTMLLocation::hash property's getter
|
||||
implementation.
|
||||
|
||||
---
|
||||
dlls/mshtml/htmllocation.c | 11 ++++++--
|
||||
dlls/mshtml/tests/htmldoc.c | 53 ++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 61 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/mshtml/htmllocation.c b/dlls/mshtml/htmllocation.c
|
||||
index 8f7800ff2a3..2b42939a39f 100644
|
||||
--- a/dlls/mshtml/htmllocation.c
|
||||
+++ b/dlls/mshtml/htmllocation.c
|
||||
@@ -524,8 +524,15 @@ static HRESULT WINAPI HTMLLocation_get_search(IHTMLLocation *iface, BSTR *p)
|
||||
static HRESULT WINAPI HTMLLocation_put_hash(IHTMLLocation *iface, BSTR v)
|
||||
{
|
||||
HTMLLocation *This = impl_from_IHTMLLocation(iface);
|
||||
- FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
- return E_NOTIMPL;
|
||||
+
|
||||
+ TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
+
|
||||
+ if(!This->window || !This->window->base.outer_window) {
|
||||
+ FIXME("No window available\n");
|
||||
+ return E_FAIL;
|
||||
+ }
|
||||
+
|
||||
+ return navigate_url(This->window->base.outer_window, v, This->window->base.outer_window->uri, 0);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLLocation_get_hash(IHTMLLocation *iface, BSTR *p)
|
||||
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
|
||||
index ff050863b6f..2c118d89d1d 100644
|
||||
--- a/dlls/mshtml/tests/htmldoc.c
|
||||
+++ b/dlls/mshtml/tests/htmldoc.c
|
||||
@@ -5963,6 +5963,56 @@ static void test_Persist(IHTMLDocument2 *doc, IMoniker *mon)
|
||||
}
|
||||
}
|
||||
|
||||
+static void test_put_hash(IHTMLDocument2 *doc, const WCHAR *new_hash)
|
||||
+{
|
||||
+ static WCHAR nav_url_buff[256];
|
||||
+ IHTMLLocation *location;
|
||||
+ BSTR str;
|
||||
+ WCHAR *psharp;
|
||||
+ HRESULT hres;
|
||||
+
|
||||
+ trace("put_hash, url = %s, new hash = %s\n", debugstr_w(nav_url), debugstr_w(new_hash));
|
||||
+
|
||||
+ location = NULL;
|
||||
+ hres = IHTMLDocument2_get_location(doc, &location);
|
||||
+ ok(hres == S_OK, "get_location failed: %08lx\n", hres);
|
||||
+ ok(location != NULL, "location == NULL\n");
|
||||
+
|
||||
+ SET_EXPECT(TranslateUrl);
|
||||
+ SET_EXPECT(Exec_ShellDocView_67);
|
||||
+ SET_EXPECT(FireBeforeNavigate2);
|
||||
+ SET_EXPECT(FireDocumentComplete);
|
||||
+ SET_EXPECT(FireNavigateComplete2);
|
||||
+
|
||||
+ /* Edit nav_url */
|
||||
+ wcscpy(nav_url_buff, nav_url);
|
||||
+ psharp = wcschr(nav_url_buff, '#');
|
||||
+ if (psharp)
|
||||
+ *psharp = '\0';
|
||||
+ wcscat(nav_url_buff, new_hash);
|
||||
+ nav_url = nav_url_buff;
|
||||
+
|
||||
+ str = SysAllocString(new_hash);
|
||||
+ hres = IHTMLLocation_put_hash(location, str);
|
||||
+ ok (hres == S_OK, "put_hash failed: %08lx\n", hres);
|
||||
+ SysFreeString(str);
|
||||
+
|
||||
+ CHECK_CALLED(TranslateUrl);
|
||||
+ CHECK_CALLED_BROKEN(Exec_ShellDocView_67); /* Broken on Win7 and 8 */
|
||||
+ CHECK_CALLED(FireBeforeNavigate2);
|
||||
+ CHECK_CALLED(FireDocumentComplete);
|
||||
+ CHECK_CALLED(FireNavigateComplete2);
|
||||
+
|
||||
+
|
||||
+ /* Check the result */
|
||||
+ hres = IHTMLLocation_get_hash(location, &str);
|
||||
+ ok(hres == S_OK, "get_hash failed: %08lx\n", hres);
|
||||
+ ok(!wcscmp(str, new_hash), "expected %s, got %s\n", debugstr_w(new_hash), debugstr_w(str));
|
||||
+ SysFreeString(str);
|
||||
+
|
||||
+ IHTMLLocation_Release(location);
|
||||
+}
|
||||
+
|
||||
static void test_put_href(IHTMLDocument2 *doc, BOOL use_replace, const WCHAR *href, const WCHAR *new_nav_url, BOOL is_js,
|
||||
BOOL is_hash, DWORD dwl_flags)
|
||||
{
|
||||
@@ -6148,7 +6198,7 @@ static void test_load_history(IHTMLDocument2 *doc)
|
||||
ok(hres == S_OK, "Could not get IPersistHistory iface: %08lx\n", hres);
|
||||
|
||||
prev_url = nav_url;
|
||||
- nav_url = L"http://test.winehq.org/tests/winehq_snapshot/#test";
|
||||
+ nav_url = L"http://test.winehq.org/tests/winehq_snapshot/#hash_test";
|
||||
nav_serv_url = L"http://test.winehq.org/tests/winehq_snapshot/";
|
||||
|
||||
SET_EXPECT(Exec_ShellDocView_138);
|
||||
@@ -8017,6 +8067,7 @@ static void test_HTMLDocument_http(BOOL with_wbapp)
|
||||
nav_url = nav_serv_url = L"http://test.winehq.org/tests/winehq_snapshot/"; /* for valid prev nav_url */
|
||||
if(support_wbapp) {
|
||||
test_put_href(doc, FALSE, L"#test", L"http://test.winehq.org/tests/winehq_snapshot/#test", FALSE, TRUE, 0);
|
||||
+ test_put_hash(doc, L"#hash_test");
|
||||
test_travellog(doc);
|
||||
test_refresh(doc);
|
||||
}
|
||||
--
|
||||
2.34.1
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [32967] Add IHTMLLocation::hash property's getter implementation
|
@@ -1,4 +1,4 @@
|
||||
From 85a401a87c2550aab3b2eb85e518ac43ed2ff533 Mon Sep 17 00:00:00 2001
|
||||
From 6059fc95c799ed70419bb170c99ddb11507e66f9 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Tue, 11 Jun 2019 15:27:50 +1000
|
||||
Subject: [PATCH] mshtml: Improve IOleInPlaceActiveObject TranslateAccelerator
|
||||
@@ -9,13 +9,13 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=37058
|
||||
1 file changed, 22 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c
|
||||
index 274db8c22b..ba02e811cc 100644
|
||||
index a9bd8a3d558..444551778e1 100644
|
||||
--- a/dlls/mshtml/oleobj.c
|
||||
+++ b/dlls/mshtml/oleobj.c
|
||||
@@ -1024,8 +1024,28 @@ static HRESULT WINAPI OleInPlaceActiveObject_ContextSensitiveHelp(IOleInPlaceAct
|
||||
static HRESULT WINAPI OleInPlaceActiveObject_TranslateAccelerator(IOleInPlaceActiveObject *iface, LPMSG lpmsg)
|
||||
@@ -1413,8 +1413,28 @@ static HRESULT WINAPI DocObjOleInPlaceActiveObject_ContextSensitiveHelp(IOleInPl
|
||||
static HRESULT WINAPI DocObjOleInPlaceActiveObject_TranslateAccelerator(IOleInPlaceActiveObject *iface, LPMSG lpmsg)
|
||||
{
|
||||
HTMLDocument *This = impl_from_IOleInPlaceActiveObject(iface);
|
||||
HTMLDocumentObj *This = HTMLDocumentObj_from_IOleInPlaceActiveObject(iface);
|
||||
- FIXME("(%p)->(%p)\n", This, lpmsg);
|
||||
- return E_NOTIMPL;
|
||||
+ HRESULT hres = S_FALSE;
|
||||
@@ -42,7 +42,7 @@ index 274db8c22b..ba02e811cc 100644
|
||||
+ return hres;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI OleInPlaceActiveObject_OnFrameWindowActivate(IOleInPlaceActiveObject *iface,
|
||||
static HRESULT WINAPI DocObjOleInPlaceActiveObject_OnFrameWindowActivate(IOleInPlaceActiveObject *iface,
|
||||
--
|
||||
2.17.1
|
||||
2.37.2
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From d28a26a59e9837191cc48854d5dad16eba532f04 Mon Sep 17 00:00:00 2001
|
||||
From 5814a4b9c7d4dec027b0c2dd29822664aa56ada1 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Tue, 14 Jan 2020 21:39:23 +0300
|
||||
Subject: [PATCH] ntdll: Increase step after failed map attempt in
|
||||
@@ -9,10 +9,10 @@ Subject: [PATCH] ntdll: Increase step after failed map attempt in
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
|
||||
index d79e3de662e..f8f317a6483 100644
|
||||
index 84a4e331ad7..a63882023e6 100644
|
||||
--- a/dlls/ntdll/unix/virtual.c
|
||||
+++ b/dlls/ntdll/unix/virtual.c
|
||||
@@ -1073,6 +1073,7 @@ static void* try_map_free_area( void *base, void *end, ptrdiff_t step,
|
||||
@@ -1327,6 +1327,7 @@ static void* try_map_free_area( void *base, void *end, ptrdiff_t step,
|
||||
step == 0)
|
||||
break;
|
||||
start = (char *)start + step;
|
||||
@@ -21,5 +21,5 @@ index d79e3de662e..f8f317a6483 100644
|
||||
|
||||
return NULL;
|
||||
--
|
||||
2.26.2
|
||||
2.38.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 266f5082387ec92cb79a2ec3ce71d956cf05190d Mon Sep 17 00:00:00 2001
|
||||
From b1e6d32e7dc3bac93419f3a573f509ee6e1177b2 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Thu, 23 Jul 2020 18:40:39 +0300
|
||||
Subject: [PATCH] ntdll: Increase free ranges view block size on 64 bit.
|
||||
@@ -8,10 +8,10 @@ Subject: [PATCH] ntdll: Increase free ranges view block size on 64 bit.
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
|
||||
index f8f317a6483..4ca033b0e19 100644
|
||||
index a63882023e6..83909f57d4a 100644
|
||||
--- a/dlls/ntdll/unix/virtual.c
|
||||
+++ b/dlls/ntdll/unix/virtual.c
|
||||
@@ -183,7 +183,11 @@ static BYTE *pages_vprot;
|
||||
@@ -205,7 +205,11 @@ static BYTE *pages_vprot;
|
||||
#endif
|
||||
|
||||
static struct file_view *view_block_start, *view_block_end, *next_free_view;
|
||||
@@ -24,5 +24,5 @@ index f8f317a6483..4ca033b0e19 100644
|
||||
static void *preload_reserve_end;
|
||||
static BOOL force_exec_prot; /* whether to force PROT_EXEC on all PROT_READ mmaps */
|
||||
--
|
||||
2.26.2
|
||||
2.38.1
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,25 +1,25 @@
|
||||
From bcc882f5d1980cbf353891d1e1686e97c068f8c7 Mon Sep 17 00:00:00 2001
|
||||
From d29a79d8cca2220c838fbbea6ea81b9f73070ba5 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Tue, 2 Jun 2020 21:06:33 +0300
|
||||
Subject: [PATCH] ntdll: Exclude natively mapped areas from free areas list.
|
||||
|
||||
---
|
||||
dlls/ntdll/unix/virtual.c | 137 ++++++++++++++++++++++++++++++--------
|
||||
1 file changed, 109 insertions(+), 28 deletions(-)
|
||||
dlls/ntdll/unix/virtual.c | 118 ++++++++++++++++++++++++++++++++------
|
||||
1 file changed, 100 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
|
||||
index 4899fc7b443..cee739bd942 100644
|
||||
index 4bce8f2f806..3c1bf6edc30 100644
|
||||
--- a/dlls/ntdll/unix/virtual.c
|
||||
+++ b/dlls/ntdll/unix/virtual.c
|
||||
@@ -143,6 +143,7 @@ struct file_view
|
||||
#define VPROT_WRITEWATCH 0x40
|
||||
/* per-mapping protection flags */
|
||||
@@ -125,6 +125,7 @@ struct file_view
|
||||
#define VPROT_SYSTEM 0x0200 /* system view (underlying mmap not under our control) */
|
||||
+#define VPROT_NATIVE 0x0400
|
||||
#define VPROT_PLACEHOLDER 0x0400
|
||||
#define VPROT_FROMPLACEHOLDER 0x0800
|
||||
+#define VPROT_NATIVE 0x1000
|
||||
|
||||
/* Conversion from VPROT_* to Win32 flags */
|
||||
static const BYTE VIRTUAL_Win32Flags[16] =
|
||||
@@ -1081,7 +1082,9 @@ static void dump_view( struct file_view *view )
|
||||
@@ -1119,7 +1120,9 @@ static void dump_view( struct file_view *view )
|
||||
BYTE prot = get_page_vprot( addr );
|
||||
|
||||
TRACE( "View: %p - %p", addr, addr + view->size - 1 );
|
||||
@@ -28,26 +28,18 @@ index 4899fc7b443..cee739bd942 100644
|
||||
+ TRACE(" (native)\n");
|
||||
+ else if (view->protect & VPROT_SYSTEM)
|
||||
TRACE( " (builtin image)\n" );
|
||||
else if (view->protect & SEC_IMAGE)
|
||||
TRACE( " (image)\n" );
|
||||
@@ -1216,6 +1219,16 @@ static struct file_view *find_view_range( const void *addr, size_t size )
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+struct alloc_area
|
||||
+{
|
||||
+ char *map_area_start, *map_area_end, *result;
|
||||
+ size_t size;
|
||||
+ ptrdiff_t step;
|
||||
+ int unix_prot;
|
||||
+ BOOL top_down;
|
||||
else if (view->protect & VPROT_PLACEHOLDER)
|
||||
TRACE( " (placeholder)\n" );
|
||||
@@ -1274,6 +1277,8 @@ struct alloc_area
|
||||
int unix_prot;
|
||||
BOOL top_down;
|
||||
UINT_PTR align_mask;
|
||||
+ char *native_mapped;
|
||||
+ size_t native_mapped_size;
|
||||
+};
|
||||
};
|
||||
|
||||
/***********************************************************************
|
||||
* try_map_free_area
|
||||
@@ -1223,21 +1236,27 @@ static struct file_view *find_view_range( const void *addr, size_t size )
|
||||
@@ -1282,21 +1287,28 @@ struct alloc_area
|
||||
* Try mmaping some expected free memory region, eventually stepping and
|
||||
* retrying inside it, and return where it actually succeeded, or NULL.
|
||||
*/
|
||||
@@ -56,6 +48,7 @@ index 4899fc7b443..cee739bd942 100644
|
||||
+static void* try_map_free_area( struct alloc_area *area, void *base, void *end, void *start )
|
||||
{
|
||||
+ ptrdiff_t step = area->step;
|
||||
+ UINT_PTR abs_step = step > 0 ? step : -step;
|
||||
void *ptr;
|
||||
|
||||
- while (start && base <= start && (char*)start + size <= (char*)end)
|
||||
@@ -71,54 +64,40 @@ index 4899fc7b443..cee739bd942 100644
|
||||
+ strerror(errno), start, (char *)start + area->size, area->unix_prot );
|
||||
return NULL;
|
||||
}
|
||||
+ if (!area->native_mapped && step)
|
||||
+ if (!area->native_mapped && step && abs_step < (granularity_mask + 1) * 2)
|
||||
+ {
|
||||
+ area->native_mapped = start;
|
||||
+ area->native_mapped_size = step > 0 ? step : -step;
|
||||
+ area->native_mapped_size = abs_step;
|
||||
+ area->native_mapped_size = min(area->native_mapped_size, (char *)end - (char *)start);
|
||||
+ }
|
||||
if ((step > 0 && (char *)end - (char *)start < step) ||
|
||||
(step < 0 && (char *)start - (char *)base < -step) ||
|
||||
step == 0)
|
||||
@@ -1666,15 +1685,6 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
|
||||
}
|
||||
|
||||
|
||||
-struct alloc_area
|
||||
-{
|
||||
- char *map_area_start, *map_area_end, *result;
|
||||
- size_t size;
|
||||
- ptrdiff_t step;
|
||||
- int unix_prot;
|
||||
- BOOL top_down;
|
||||
-};
|
||||
-
|
||||
static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size, void *arg )
|
||||
{
|
||||
char *intersect_start, *intersect_end;
|
||||
@@ -1700,8 +1710,8 @@ static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size,
|
||||
@@ -1797,9 +1809,9 @@ static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size,
|
||||
assert(intersect_start <= intersect_end);
|
||||
if (area->map_area_end - intersect_end >= area->size)
|
||||
{
|
||||
alloc_start = ROUND_ADDR( (char *)area->map_area_end - size, granularity_mask );
|
||||
- alloc_start = ROUND_ADDR( (char *)area->map_area_end - size, align_mask );
|
||||
- if ((area->result = try_map_free_area( intersect_end, alloc_start + size, area->step,
|
||||
- alloc_start, area->size, area->unix_prot )))
|
||||
+ alloc_start = ROUND_ADDR( (char *)area->map_area_end - area->size, align_mask );
|
||||
+ if ((area->result = try_map_free_area( area, intersect_end,
|
||||
+ alloc_start + size, alloc_start )))
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1736,8 +1746,8 @@ static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size,
|
||||
|
||||
@@ -1838,8 +1850,8 @@ static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size,
|
||||
if (intersect_start - area->map_area_start >= area->size)
|
||||
{
|
||||
alloc_start = ROUND_ADDR( area->map_area_start + align_mask, align_mask );
|
||||
- if ((area->result = try_map_free_area( area->map_area_start, intersect_start, area->step,
|
||||
- area->map_area_start, area->size, area->unix_prot )))
|
||||
- alloc_start, area->size, area->unix_prot )))
|
||||
+ if ((area->result = try_map_free_area( area, area->map_area_start,
|
||||
+ intersect_start, area->map_area_start )))
|
||||
+ intersect_start, alloc_start )))
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1792,8 +1802,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
|
||||
@@ -1900,8 +1912,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
|
||||
if (start >= area->map_area_end || start < area->map_area_start)
|
||||
return NULL;
|
||||
|
||||
@@ -128,7 +107,7 @@ index 4899fc7b443..cee739bd942 100644
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1802,8 +1811,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
|
||||
@@ -1911,8 +1922,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
|
||||
|| area->map_area_end - start < area->size)
|
||||
return NULL;
|
||||
|
||||
@@ -138,7 +117,7 @@ index 4899fc7b443..cee739bd942 100644
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1813,6 +1821,7 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
|
||||
@@ -1922,6 +1932,7 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
|
||||
char *reserve_start, *reserve_end;
|
||||
struct alloc_area area;
|
||||
char *base, *end;
|
||||
@@ -146,20 +125,9 @@ index 4899fc7b443..cee739bd942 100644
|
||||
int ranges_inc;
|
||||
|
||||
TRACE("limit %p, size %p, top_down %#x.\n", limit, (void *)size, top_down);
|
||||
@@ -1868,16 +1877,67 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
|
||||
{
|
||||
/* range is split in two by the preloader reservation, try first part. */
|
||||
if ((area.result = alloc_free_area_in_range( &area, base, reserve_start )))
|
||||
- return area.result;
|
||||
+ break;
|
||||
/* then fall through to try second part. */
|
||||
base = reserve_end;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1991,7 +2002,58 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
|
||||
if ((area.result = alloc_free_area_in_range( &area, base, end )))
|
||||
- return area.result;
|
||||
+ break;
|
||||
break;
|
||||
}
|
||||
- return NULL;
|
||||
+
|
||||
@@ -217,7 +185,7 @@ index 4899fc7b443..cee739bd942 100644
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
@@ -1931,6 +1991,17 @@ static NTSTATUS map_fixed_area( void *base, size_t size, unsigned int vprot )
|
||||
@@ -2045,6 +2107,17 @@ static NTSTATUS map_fixed_area( void *base, size_t size, unsigned int vprot )
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -235,21 +203,20 @@ index 4899fc7b443..cee739bd942 100644
|
||||
/***********************************************************************
|
||||
* map_view
|
||||
*
|
||||
@@ -1954,7 +2025,12 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
|
||||
else if (!(ptr = alloc_free_area( (void*)(get_zero_bits_mask( zero_bits )
|
||||
& (UINT_PTR)user_space_limit), size, top_down, get_unix_prot( vprot ) )))
|
||||
@@ -2097,7 +2170,11 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
|
||||
}
|
||||
else if (!(ptr = alloc_free_area( (void *)limit, size, top_down, get_unix_prot( vprot ), align_mask )))
|
||||
{
|
||||
- return STATUS_NO_MEMORY;
|
||||
+ WARN("Allocation failed, clearing native views.\n");
|
||||
+
|
||||
+ clear_native_views();
|
||||
+ if (!(ptr = alloc_free_area( (void*)(get_zero_bits_mask( zero_bits )
|
||||
+ & (UINT_PTR)user_space_limit), size, top_down, get_unix_prot( vprot ) )))
|
||||
+ if (!(ptr = alloc_free_area( (void *)limit, size, top_down, get_unix_prot( vprot ), align_mask )))
|
||||
+ return STATUS_NO_MEMORY;
|
||||
}
|
||||
status = create_view( view_ret, ptr, size, vprot );
|
||||
if (status != STATUS_SUCCESS) unmap_area( ptr, size );
|
||||
@@ -3646,7 +3722,12 @@ void virtual_set_force_exec( BOOL enable )
|
||||
@@ -3835,7 +3912,12 @@ void virtual_set_force_exec( BOOL enable )
|
||||
WINE_RB_FOR_EACH_ENTRY( view, &views_tree, struct file_view, entry )
|
||||
{
|
||||
/* file mappings are always accessible */
|
||||
@@ -264,5 +231,5 @@ index 4899fc7b443..cee739bd942 100644
|
||||
mprotect_range( view->base, view->size, commit, 0 );
|
||||
}
|
||||
--
|
||||
2.30.2
|
||||
2.38.1
|
||||
|
||||
|
@@ -1,2 +1,3 @@
|
||||
Fixes: [48175] AION (64 bit) - crashes in crysystem.dll.CryFree() due to high memory pointers allocated
|
||||
Fixes: [46568] 64-bit msxml6.dll from Microsoft Core XML Services 6.0 redist package fails to load (Wine doesn't respect 44-bit user-mode VA limitation from Windows < 8.1)
|
||||
Depends: ntdll-Placeholders
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user