Rebase against 3660176e09bc02e71586b4cf42f58c9498481af6.

This commit is contained in:
Alistair Leslie-Hughes 2021-10-07 09:15:30 +11:00
parent 7750a01cea
commit c61d12592b
24 changed files with 365 additions and 428 deletions

View File

@ -1,4 +1,4 @@
From 4d8244be2c89fe601d75bd17631d87f504dcd63a Mon Sep 17 00:00:00 2001
From 4b23aac811b441d63bc451bb2126d2da04734201 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Wed, 13 Jun 2018 10:44:49 -0500
Subject: [PATCH] configure: Check for sys/eventfd.h, ppoll(), and shm_open().
@ -13,10 +13,10 @@ Although perhaps we shouldn't since the server doesn't do this.
3 files changed, 89 insertions(+)
diff --git a/configure b/configure
index 97b5dcfb38b..367008886d7 100755
index c99ee5858e7..e1cc8737eb1 100755
--- a/configure
+++ b/configure
@@ -7543,6 +7543,7 @@ for ac_header in \
@@ -7525,6 +7525,7 @@ for ac_header in \
sys/cdio.h \
sys/epoll.h \
sys/event.h \
@ -24,15 +24,15 @@ index 97b5dcfb38b..367008886d7 100755
sys/filio.h \
sys/ioctl.h \
sys/ipc.h \
@@ -18009,6 +18010,7 @@ for ac_func in \
@@ -17912,6 +17913,7 @@ for ac_func in \
port_create \
posix_fadvise \
posix_fallocate \
+ ppoll \
prctl \
proc_pidinfo \
readlink \
@@ -18402,6 +18404,72 @@ fi
sched_yield \
@@ -18257,6 +18259,72 @@ fi
;;
esac
@ -106,10 +106,10 @@ index 97b5dcfb38b..367008886d7 100755
then
if ${LDAP_CFLAGS:+false} :; then :
diff --git a/configure.ac b/configure.ac
index 0e65c78a81d..a3c9a627117 100644
index bf9e8103606..adddfacc6fd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -510,6 +510,7 @@ AC_CHECK_HEADERS(\
@@ -498,6 +498,7 @@ AC_CHECK_HEADERS(\
sys/cdio.h \
sys/epoll.h \
sys/event.h \
@ -117,15 +117,15 @@ index 0e65c78a81d..a3c9a627117 100644
sys/filio.h \
sys/ioctl.h \
sys/ipc.h \
@@ -2212,6 +2213,7 @@ AC_CHECK_FUNCS(\
@@ -2173,6 +2174,7 @@ AC_CHECK_FUNCS(\
port_create \
posix_fadvise \
posix_fallocate \
+ ppoll \
prctl \
proc_pidinfo \
readlink \
@@ -2262,6 +2264,16 @@ case $host_os in
renameat \
@@ -2215,6 +2217,16 @@ case $host_os in
;;
esac
@ -143,10 +143,10 @@ index 0e65c78a81d..a3c9a627117 100644
if test "x$with_ldap" != "xno"
then
diff --git a/include/config.h.in b/include/config.h.in
index f66444fd715..bf8fc85e6c5 100644
index fc3749895a3..608a255f1f7 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -507,6 +507,9 @@
@@ -486,6 +486,9 @@
/* Define to 1 if you have the `posix_fallocate' function. */
#undef HAVE_POSIX_FALLOCATE
@ -156,7 +156,7 @@ index f66444fd715..bf8fc85e6c5 100644
/* Define to 1 if you have the `prctl' function. */
#undef HAVE_PRCTL
@@ -585,6 +588,9 @@
@@ -561,6 +564,9 @@
/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
#undef HAVE_SG_IO_HDR_T_INTERFACE_ID
@ -166,7 +166,7 @@ index f66444fd715..bf8fc85e6c5 100644
/* Define if sigaddset is supported */
#undef HAVE_SIGADDSET
@@ -749,6 +755,9 @@
@@ -716,6 +722,9 @@
/* Define to 1 if you have the <sys/epoll.h> header file. */
#undef HAVE_SYS_EPOLL_H

View File

@ -1,339 +0,0 @@
From 6ecb74571f99faaaf558bf10fc7f626c0c58dc24 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 13 Jun 2015 05:03:54 +0200
Subject: [PATCH] iphlpapi: Fallback to system ping when ICMP permissions are
not present.
Based on an idea by Bruno Jesus.
---
dlls/iphlpapi/icmp.c | 256 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 250 insertions(+), 6 deletions(-)
diff --git a/dlls/iphlpapi/icmp.c b/dlls/iphlpapi/icmp.c
index 8e425ea68ed..1f55356c047 100644
--- a/dlls/iphlpapi/icmp.c
+++ b/dlls/iphlpapi/icmp.c
@@ -5,6 +5,7 @@
* RW Hall, 1999, based on public domain code PING.C by Mike Muus (1983)
* and later works (c) 1989 Regents of Univ. of California - see copyright
* notice at end of source-code.
+ * Copyright 2015 Sebastian Lackner
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -32,6 +33,7 @@
*/
#include "config.h"
+#include "wine/port.h"
#include <sys/types.h>
#ifdef HAVE_SYS_SOCKET_H
@@ -52,7 +54,9 @@
#endif
#include <stdarg.h>
#include <string.h>
+#include <stdio.h>
#include <errno.h>
+#include <fcntl.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
@@ -62,6 +66,9 @@
#ifdef HAVE_SYS_POLL_H
# include <sys/poll.h>
#endif
+#ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+#endif
#define USE_WS_PREFIX
@@ -213,6 +220,7 @@ DWORD WINAPI Icmp6SendEcho2(
*/
HANDLE WINAPI IcmpCreateFile(VOID)
{
+ static int once;
icmp_t* icp;
int sid=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
@@ -222,15 +230,14 @@ HANDLE WINAPI IcmpCreateFile(VOID)
non-privileged ICMP via SOCK_DGRAM type. */
sid=socket(AF_INET,SOCK_DGRAM,IPPROTO_ICMP);
}
- if (sid < 0) {
- ERR_(winediag)("Failed to use ICMP (network ping), this requires special permissions.\n");
- SetLastError(ERROR_ACCESS_DENIED);
- return INVALID_HANDLE_VALUE;
+ if (sid < 0 && !once++) {
+ FIXME_(winediag)("Failed to use ICMP (network ping), this requires special permissions.\n");
+ FIXME_(winediag)("Falling back to system 'ping' command as a workaround.\n");
}
icp=HeapAlloc(GetProcessHeap(), 0, sizeof(*icp));
if (icp==NULL) {
- close(sid);
+ if (sid >= 0) close(sid);
SetLastError(IP_NO_RESOURCES);
return INVALID_HANDLE_VALUE;
}
@@ -252,11 +259,242 @@ BOOL WINAPI IcmpCloseHandle(HANDLE IcmpHandle)
return FALSE;
}
- close( icp->sid );
+ if (icp->sid >= 0) close(icp->sid);
HeapFree(GetProcessHeap (), 0, icp);
return TRUE;
}
+static DWORD system_icmp(
+ IPAddr DestinationAddress,
+ LPVOID RequestData,
+ WORD RequestSize,
+ PIP_OPTION_INFORMATION RequestOptions,
+ LPVOID ReplyBuffer,
+ DWORD ReplySize,
+ DWORD Timeout
+ )
+{
+#ifdef HAVE_FORK
+ ICMP_ECHO_REPLY *reply = ReplyBuffer;
+ char ntoa_buffer[16]; /* 4*3 digits + 3 '.' + 1 '\0' */
+ char size_buffer[6]; /* 5 digits + '\0' */
+ char tos_buffer[4]; /* 3 digits + '\0' */
+ char ttl_buffer[4]; /* 3 digits + '\0' */
+ char time_buffer[11]; /* 10 digits + '\0' */
+ int i, pos, res, status, argc;
+ const char *argv[20];
+ struct in_addr addr;
+ int pipe_out[2];
+ pid_t pid, wpid;
+ char *ptr, *eol;
+ char buf[127];
+
+ /* Assemble the ping commandline */
+ argc = 0;
+ argv[argc++] = "ping";
+ argv[argc++] = "-c"; /* only send a single ping */
+ argv[argc++] = "1";
+ argv[argc++] = "-n"; /* numeric output only */
+ argv[argc++] = "-s"; /* request size */
+ sprintf(size_buffer, "%u", (RequestSize >= 16) ? RequestSize : 16);
+ argv[argc++] = size_buffer;
+ argv[argc++] = "-W"; /* timeout */
+#ifdef __linux__
+ /* The linux 'ping' utlity expects a time in seconds */
+ Timeout = (Timeout + 999) / 1000;
+#endif
+ sprintf(time_buffer, "%u", Timeout);
+ argv[argc++] = time_buffer;
+
+ if (RequestOptions)
+ {
+ #ifdef __linux__
+ argv[argc++] = "-Q"; /* tos option */
+ #else
+ argv[argc++] = "-z"; /* tos option */
+ #endif
+ sprintf(tos_buffer, "%u", RequestOptions->Tos);
+ argv[argc++] = tos_buffer;
+ #ifdef __linux__
+ /* TTL can only be specified for multicast addresses on FreeBSD/MacOS */
+ argv[argc++] = "-t"; /* ttl option */
+ sprintf(ttl_buffer, "%u", RequestOptions->Ttl);
+ argv[argc++] = ttl_buffer;
+ #endif
+ }
+
+ addr.s_addr = DestinationAddress;
+ if (!(ptr = inet_ntoa(addr)))
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return 0;
+ }
+ strcpy(ntoa_buffer, ptr);
+ argv[argc++] = ntoa_buffer;
+ argv[argc] = NULL;
+
+ /* Dump commandline for debugging purposes */
+ TRACE("Ping commandline: ");
+ for (i = 0; i < argc; i++)
+ {
+ TRACE("%s ", debugstr_a(argv[i]));
+ }
+ TRACE("\n");
+
+ /* Prefill the reply struct with fallback values */
+ memset(reply, 0, sizeof(*reply));
+ reply->Address = DestinationAddress;
+ reply->RoundTripTime = 40;
+ reply->Options.Ttl = 120;
+
+ /* Create communication pipes */
+#ifdef HAVE_PIPE2
+ if (pipe2(pipe_out, O_CLOEXEC) < 0)
+#endif
+ {
+ if (pipe(pipe_out) < 0)
+ {
+ SetLastError(ERROR_OUTOFMEMORY);
+ return 0;
+ }
+ fcntl(pipe_out[0], F_SETFD, FD_CLOEXEC);
+ fcntl(pipe_out[1], F_SETFD, FD_CLOEXEC);
+ }
+
+ /* Fork child process */
+ pid = fork();
+ if (pid == -1)
+ {
+ close(pipe_out[0]);
+ close(pipe_out[1]);
+ SetLastError(ERROR_OUTOFMEMORY);
+ return 0;
+ }
+
+ /* Child process */
+ if (pid == 0)
+ {
+ static char lang_env[] = "LANG=C";
+
+ dup2(pipe_out[1], 1);
+ close(pipe_out[0]);
+ close(pipe_out[1]);
+ close(0);
+ close(2);
+
+ putenv(lang_env);
+ execvp(argv[0], (char **)argv);
+ _exit(1);
+ }
+
+ close(pipe_out[1]);
+
+ /* Wait for child and read output */
+ pos = 0;
+ do
+ {
+ if (pos >= sizeof(buf) - 1)
+ {
+ ERR("line too long, dropping buffer\n");
+ pos = 0;
+ }
+
+ /* read next block */
+ do
+ {
+ res = read(pipe_out[0], &buf[pos], (sizeof(buf) - 1) - pos);
+ }
+ while (res < 0 && errno == EINTR);
+ if (res < 0)
+ {
+ ERR("read failed: %s\n", strerror(errno));
+ break;
+ }
+
+ pos += res;
+ while (pos)
+ {
+ eol = memchr(buf, '\n', pos);
+ if (!eol) break;
+ *eol = 0;
+
+ TRACE("Received line: %s\n", debugstr_a(buf));
+
+ /* Interpret address */
+ if ((ptr = strstr(buf, "from ")))
+ {
+ int a, b, c, d;
+ if (sscanf(ptr + 5, "%u.%u.%u.%u", &a, &b, &c, &d) >= 4)
+ {
+ reply->Address = a | (b << 8) | (c << 16) | (d << 24);
+ addr.s_addr = reply->Address;
+ TRACE("Got address %s\n", inet_ntoa(addr));
+ }
+ }
+
+ /* Interpret ttl */
+ if ((ptr = strstr(buf, "ttl=")))
+ {
+ int val;
+ if (sscanf(ptr + 4, "%u", &val) >= 1)
+ {
+ reply->Options.Ttl = val;
+ TRACE("Got ttl %u\n", val);
+ }
+ }
+
+ /* Interpret time */
+ if ((ptr = strstr(buf, "time=")))
+ {
+ float val;
+ if (sscanf(ptr + 5, "%f", &val) >= 1)
+ {
+ reply->RoundTripTime = (unsigned int)(val + 0.5);
+ TRACE("Got rtt = %u\n", reply->RoundTripTime);
+ }
+ }
+
+ memmove(buf, eol + 1, pos - (eol + 1 - buf));
+ pos -= (eol + 1 - buf);
+ }
+ }
+ while (res > 0);
+ close(pipe_out[0]);
+
+ /* reap the child process */
+ do
+ {
+ wpid = waitpid(pid, &status, 0);
+ }
+ while (wpid < 0 && errno == EINTR);
+
+ /* fill out remaining struct fields */
+ if (wpid >= 0 && WIFEXITED(status) && WEXITSTATUS(status) == 0)
+ {
+ if (ReplySize < RequestSize + sizeof(*reply))
+ {
+ reply->Status = IP_BUF_TOO_SMALL;
+ reply->DataSize = 0;
+ reply->Data = NULL;
+ }
+ else
+ {
+ reply->Status = 0;
+ reply->DataSize = RequestSize;
+ reply->Data = (char *)reply + sizeof(*reply);
+ memcpy(reply->Data, RequestData, RequestSize);
+ }
+ return 1;
+ }
+
+ SetLastError(IP_REQ_TIMED_OUT);
+ return 0;
+#else
+ ERR("no fork support on this platform\n");
+ SetLastError(ERROR_NOT_SUPPORTED);
+ return 0;
+#endif
+}
/***********************************************************************
* IcmpSendEcho (IPHLPAPI.@)
@@ -310,6 +548,12 @@ DWORD WINAPI IcmpSendEcho(
return 0;
}
+ if (icp->sid < 0) {
+ WARN("using system ping command since SOCK_RAW was not supported.\n");
+ return system_icmp(DestinationAddress, RequestData, RequestSize,
+ RequestOptions, ReplyBuffer, ReplySize, Timeout);
+ }
+
/* Prepare the request */
id=getpid() & 0xFFFF;
seq=InterlockedIncrement(&icmp_sequence) & 0xFFFF;
--
2.27.0

View File

@ -1 +0,0 @@
Fixes: [8332] Fallback to system ping command when CAP_NET_RAW is not available

View File

@ -0,0 +1,37 @@
From c7cefd4d7ba969969ad31baa4e05c3968c5ae01c Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 7 Oct 2021 09:00:38 +1100
Subject: [PATCH 01/17] Revert "winegstreamer: Trace the unfiltered caps in
sink_query_cb()."
This reverts commit fd6315eb8f6809b89b7449f4b9dd01453de32eda.
---
dlls/winegstreamer/wg_parser.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index 0c23ae6d351..9a382cb724c 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -1006,7 +1006,6 @@ static gboolean sink_query_cb(GstPad *pad, GstObject *parent, GstQuery *query)
case GST_QUERY_CAPS:
{
GstCaps *caps, *filter, *temp;
- gchar *str;
gst_query_parse_caps(query, &filter);
@@ -1017,10 +1016,6 @@ static gboolean sink_query_cb(GstPad *pad, GstObject *parent, GstQuery *query)
if (!caps)
return FALSE;
- str = gst_caps_to_string(caps);
- GST_LOG("Stream caps are \"%s\".", str);
- g_free(str);
-
if (filter)
{
temp = gst_caps_intersect(caps, filter);
--
2.33.0

View File

@ -0,0 +1,33 @@
From 8750208931f96be6f30a13f033658eb92a51a8ef Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 7 Oct 2021 09:00:39 +1100
Subject: [PATCH 02/17] Revert "winegstreamer: Avoid seeking past the end of an
IMFByteStream."
This reverts commit 3efb72de5aca01d3d979ce697728e51bc3e99901.
---
dlls/winegstreamer/media_source.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
index 6ecd345cb73..dab85e4689d 100644
--- a/dlls/winegstreamer/media_source.c
+++ b/dlls/winegstreamer/media_source.c
@@ -639,14 +639,6 @@ static DWORD CALLBACK read_thread(void *arg)
else if (offset + size >= file_size)
size = file_size - offset;
- /* Some IMFByteStreams (including the standard file-based stream) return
- * an error when reading past the file size. */
- if (!size)
- {
- wg_parser_push_data(source->wg_parser, data, 0);
- continue;
- }
-
if (!array_reserve(&data, &buffer_size, size, 1))
{
free(data);
--
2.33.0

View File

@ -0,0 +1,52 @@
From 111eb77f0dc9fcf241167dec1656818e7a636f0a Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 7 Oct 2021 09:00:39 +1100
Subject: [PATCH 03/17] Revert "winegstreamer: Avoid passing a NULL buffer to
wg_parser_push_data() in the case of a zero-length read."
This reverts commit 585acfa04188f85fb9138e57d56dd44b870dca41.
---
dlls/winegstreamer/media_source.c | 7 ++-----
dlls/winegstreamer/quartz_parser.c | 5 +----
2 files changed, 3 insertions(+), 9 deletions(-)
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
index dab85e4689d..703bdd7c57d 100644
--- a/dlls/winegstreamer/media_source.c
+++ b/dlls/winegstreamer/media_source.c
@@ -613,12 +613,9 @@ static DWORD CALLBACK read_thread(void *arg)
{
struct media_source *source = arg;
IMFByteStream *byte_stream = source->byte_stream;
- size_t buffer_size = 4096;
+ size_t buffer_size = 0;
uint64_t file_size;
- void *data;
-
- if (!(data = malloc(buffer_size)))
- return 0;
+ void *data = NULL;
IMFByteStream_GetLength(byte_stream, &file_size);
diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c
index 6d79d2ef129..b6655d5da3c 100644
--- a/dlls/winegstreamer/quartz_parser.c
+++ b/dlls/winegstreamer/quartz_parser.c
@@ -786,12 +786,9 @@ static DWORD CALLBACK read_thread(void *arg)
{
struct parser *filter = arg;
LONGLONG file_size, unused;
- size_t buffer_size = 4096;
+ size_t buffer_size = 0;
void *data = NULL;
- if (!(data = malloc(buffer_size)))
- return 0;
-
IAsyncReader_Length(filter->reader, &file_size, &unused);
TRACE("Starting read thread for filter %p.\n", filter);
--
2.33.0

View File

@ -0,0 +1,122 @@
From 6b2ebf10c196d3ced85546af54599071d750bb1d Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 7 Oct 2021 09:00:40 +1100
Subject: [PATCH 04/17] Revert "winegstreamer: Use array_reserve() to
reallocate read buffers."
This reverts commit 59997c355fdc9cb5857c767b3bf16c9513b3d1f3.
---
dlls/winegstreamer/gst_private.h | 2 --
dlls/winegstreamer/main.c | 27 ---------------------------
dlls/winegstreamer/media_source.c | 8 ++++----
dlls/winegstreamer/quartz_parser.c | 8 ++++----
4 files changed, 8 insertions(+), 37 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
index 986c8ca695d..ebe0bf6f50d 100644
--- a/dlls/winegstreamer/gst_private.h
+++ b/dlls/winegstreamer/gst_private.h
@@ -38,8 +38,6 @@
#include "unixlib.h"
-bool array_reserve(void **elements, size_t *capacity, size_t count, size_t size) DECLSPEC_HIDDEN;
-
static inline const char *debugstr_time(REFERENCE_TIME time)
{
ULONGLONG abstime = time >= 0 ? time : -time;
diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c
index d6f19fb4ad1..c799aa06d1b 100644
--- a/dlls/winegstreamer/main.c
+++ b/dlls/winegstreamer/main.c
@@ -31,33 +31,6 @@ static unixlib_handle_t unix_handle;
WINE_DEFAULT_DEBUG_CHANNEL(quartz);
-bool array_reserve(void **elements, size_t *capacity, size_t count, size_t size)
-{
- unsigned int new_capacity, max_capacity;
- void *new_elements;
-
- if (count <= *capacity)
- return TRUE;
-
- max_capacity = ~(SIZE_T)0 / size;
- if (count > max_capacity)
- return FALSE;
-
- new_capacity = max(4, *capacity);
- while (new_capacity < count && new_capacity <= max_capacity / 2)
- new_capacity *= 2;
- if (new_capacity < count)
- new_capacity = max_capacity;
-
- if (!(new_elements = realloc(*elements, new_capacity * size)))
- return FALSE;
-
- *elements = new_elements;
- *capacity = new_capacity;
-
- return TRUE;
-}
-
struct wg_parser *wg_parser_create(enum wg_parser_type type, bool unlimited_buffering)
{
struct wg_parser_create_params params =
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
index 703bdd7c57d..da898f20f66 100644
--- a/dlls/winegstreamer/media_source.c
+++ b/dlls/winegstreamer/media_source.c
@@ -613,7 +613,7 @@ static DWORD CALLBACK read_thread(void *arg)
{
struct media_source *source = arg;
IMFByteStream *byte_stream = source->byte_stream;
- size_t buffer_size = 0;
+ uint32_t buffer_size = 0;
uint64_t file_size;
void *data = NULL;
@@ -636,10 +636,10 @@ static DWORD CALLBACK read_thread(void *arg)
else if (offset + size >= file_size)
size = file_size - offset;
- if (!array_reserve(&data, &buffer_size, size, 1))
+ if (size > buffer_size)
{
- free(data);
- return 0;
+ buffer_size = size;
+ data = realloc(data, size);
}
ret_size = 0;
diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c
index b6655d5da3c..6ae1a99a14a 100644
--- a/dlls/winegstreamer/quartz_parser.c
+++ b/dlls/winegstreamer/quartz_parser.c
@@ -786,7 +786,7 @@ static DWORD CALLBACK read_thread(void *arg)
{
struct parser *filter = arg;
LONGLONG file_size, unused;
- size_t buffer_size = 0;
+ uint32_t buffer_size = 0;
void *data = NULL;
IAsyncReader_Length(filter->reader, &file_size, &unused);
@@ -807,10 +807,10 @@ static DWORD CALLBACK read_thread(void *arg)
else if (offset + size >= file_size)
size = file_size - offset;
- if (!array_reserve(&data, &buffer_size, size, 1))
+ if (size > buffer_size)
{
- free(data);
- return 0;
+ buffer_size = size;
+ data = realloc(data, size);
}
hr = IAsyncReader_SyncRead(filter->reader, offset, size, data);
--
2.33.0

View File

@ -0,0 +1,44 @@
From 611e86da3f0b7050cd10c6fa693e31d7f37d7a8a Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 7 Oct 2021 09:00:41 +1100
Subject: [PATCH 05/17] Revert "winegstreamer: Handle zero-length reads in
src_getrange_cb()."
This reverts commit 8e9d7b031f7b0c93471cfbffe8f720c34623a273.
---
dlls/winegstreamer/wg_parser.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index 9a382cb724c..72dfab8f3d6 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -1272,7 +1272,7 @@ static GstFlowReturn src_getrange_cb(GstPad *pad, GstObject *parent,
GstMapInfo map_info;
bool ret;
- GST_LOG("pad %p, offset %" G_GINT64_MODIFIER "u, size %u, buffer %p.", pad, offset, size, *buffer);
+ GST_LOG("pad %p, offset %" G_GINT64_MODIFIER "u, length %u, buffer %p.", pad, offset, size, *buffer);
if (offset == GST_BUFFER_OFFSET_NONE)
offset = parser->next_pull_offset;
@@ -1281,16 +1281,6 @@ static GstFlowReturn src_getrange_cb(GstPad *pad, GstObject *parent,
if (!*buffer)
*buffer = new_buffer = gst_buffer_new_and_alloc(size);
- if (!size)
- {
- /* asfreader occasionally asks for zero bytes. gst_buffer_map() will
- * return NULL in this case. Avoid confusing the read thread by asking
- * it for zero bytes. */
- gst_buffer_set_size(*buffer, 0);
- GST_LOG("Returning empty buffer.");
- return GST_FLOW_OK;
- }
-
gst_buffer_map(*buffer, &map_info, GST_MAP_WRITE);
pthread_mutex_lock(&parser->mutex);
--
2.33.0

View File

@ -1,7 +1,7 @@
From 9519e2c9a353d51703831646c3e95bd0eb488846 Mon Sep 17 00:00:00 2001
From cbb33659c8d97084e41648dd6d093508d493ffd8 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 6 Oct 2021 08:38:11 +1100
Subject: [PATCH 01/12] Revert "winegstreamer: Convert the Unix library to the
Subject: [PATCH 06/17] Revert "winegstreamer: Convert the Unix library to the
__wine_unix_call interface."
This reverts commit 4ba31162c37ea237763e650f6242535d86ffb170.

View File

@ -1,7 +1,7 @@
From d524440204163e2ad00ccb94886f299c3afa9e3c Mon Sep 17 00:00:00 2001
From 3f0ae88023b048aa9ae2d942a7d38a305a70fde2 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 6 Oct 2021 08:38:12 +1100
Subject: [PATCH 02/12] Revert "winegstreamer: Return void from
Subject: [PATCH 07/17] Revert "winegstreamer: Return void from
wg_parser_stream_seek()."
This reverts commit 494039d0d0df8fd5b2b3442caac7bd6c0c7433c0.

View File

@ -1,7 +1,7 @@
From 6725238dfb2de2144fccfc83f0f4fbf96aba4b6c Mon Sep 17 00:00:00 2001
From 2060f5090f7b51b46d791b6f7997857ea7dd2797 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 6 Oct 2021 08:38:12 +1100
Subject: [PATCH 03/12] Revert "winegstreamer: Move Unix library definitions
Subject: [PATCH 08/17] Revert "winegstreamer: Move Unix library definitions
into a separate header."
This reverts commit 84b870bb1fcac27288ed70d28de6a1c2649e9fe6.

View File

@ -1,7 +1,7 @@
From 673582fbfd99f1d1837127bac4bb7dab01d9f84b Mon Sep 17 00:00:00 2001
From a0f69a9083c84afe21f397fdb4c7511cff4706cd Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 2 Oct 2021 10:35:45 +1000
Subject: [PATCH 04/12] Revert "winegstreamer: Remove the no longer used
Subject: [PATCH 09/17] Revert "winegstreamer: Remove the no longer used
start_dispatch_thread() declaration."
This reverts commit a87abdbe85779adf6a2a7897bd88984587880693.

View File

@ -1,7 +1,7 @@
From c583b4715063e2b961724779c963fffb4098ec75 Mon Sep 17 00:00:00 2001
From 49bb1f9a0024f79c5fc4bd015e87a94d9b088f3b Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 2 Oct 2021 10:35:46 +1000
Subject: [PATCH 05/12] Revert "winegstreamer: Set unlimited buffering using a
Subject: [PATCH 10/17] Revert "winegstreamer: Set unlimited buffering using a
flag for wg_parser_create()."
This reverts commit 45690320f933d68f613f95f0330098426fc5a08f.

View File

@ -1,7 +1,7 @@
From 8c3c3aead2c71f69d4b132f897f2a746e56b9e3c Mon Sep 17 00:00:00 2001
From a609f821cebb9005b52f5642c74d2e5d7a6a62c4 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 2 Oct 2021 10:35:47 +1000
Subject: [PATCH 06/12] Revert "winegstreamer: Initialize GStreamer in
Subject: [PATCH 11/17] Revert "winegstreamer: Initialize GStreamer in
wg_parser_create()."
This reverts commit 3643f73ab61f05ddc9a637f8613c933dda0dd232.

View File

@ -1,7 +1,7 @@
From edbd61fcdce0925f6efe4cc91bad006fbeb2ab2f Mon Sep 17 00:00:00 2001
From 145dfaf9d560e16658710819e2b598e135ccb554 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 2 Oct 2021 10:35:47 +1000
Subject: [PATCH 07/12] Revert "winegstreamer: Use a single wg_parser_create()
Subject: [PATCH 12/17] Revert "winegstreamer: Use a single wg_parser_create()
entry point."
This reverts commit eab189810d9c40c698bd049d9af647e195cd5993.

View File

@ -1,7 +1,7 @@
From 9e4429f355fda7b1d3572aa849de2c3d2326885b Mon Sep 17 00:00:00 2001
From d32ea8a60ed0666a860e3bb6d8bb0c2f11fc80bd Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sun, 19 Sep 2021 13:07:56 +1000
Subject: [PATCH 08/12] Revert "winegstreamer: Fix return code in init_gst
Subject: [PATCH 13/17] Revert "winegstreamer: Fix return code in init_gst
failure case."
This reverts commit b9a7e961cdd39203866be38e90b1d901595d54ba.

View File

@ -1,7 +1,7 @@
From 47c589a15c0a20a6643fc61eab0772e60bb7d6e9 Mon Sep 17 00:00:00 2001
From cfc2e7689ca9832750e81e11bcff48715a8de778 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sun, 19 Sep 2021 13:08:02 +1000
Subject: [PATCH 09/12] Revert "winegstreamer: Allocate source media buffers in
Subject: [PATCH 14/17] Revert "winegstreamer: Allocate source media buffers in
the PE components."
This reverts commit 8b7390f80d866435f06f2571a93bcd67c0947673.

View File

@ -1,7 +1,7 @@
From 4fc216dc84f0d25c1bfe828f0ab01747536dc6f7 Mon Sep 17 00:00:00 2001
From 7ef1cf5893b686861b1704c9b87e2aa7ae29ce11 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sun, 19 Sep 2021 13:08:03 +1000
Subject: [PATCH 10/12] Revert "winegstreamer: Duplicate source shutdown path
Subject: [PATCH 15/17] Revert "winegstreamer: Duplicate source shutdown path
into constructor with leak fixes."
This reverts commit 67734bfce31d6032cee1a8980a9022665e9e18fa.

View File

@ -1,7 +1,7 @@
From b1c93d216b7319beeb1588c427408809cd0f66ff Mon Sep 17 00:00:00 2001
From f47579e06833eeab21cb0ac30cd36bec8889a477 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sun, 19 Sep 2021 13:08:04 +1000
Subject: [PATCH 11/12] Revert "winegstreamer: Properly clean up from failure
Subject: [PATCH 16/17] Revert "winegstreamer: Properly clean up from failure
in wg_parser_connect()."
This reverts commit 721b1eb2ebe5c3eaab8ac3fb1e4f4648cbee5b4d.

View File

@ -1,7 +1,7 @@
From c7efccc7753bbda48493a7ff94fea0b72eb398c6 Mon Sep 17 00:00:00 2001
From d5ab02f7aaba148ecc74926d3fdda6484e74a646 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sun, 19 Sep 2021 13:08:05 +1000
Subject: [PATCH 12/12] Revert "winegstreamer: Factor out more of the init_gst
Subject: [PATCH 17/17] Revert "winegstreamer: Factor out more of the init_gst
callback into wg_parser_connect()."
This reverts commit 830efe873a967dbbb0c9a65be6a66b124a5fa826.

View File

@ -1,4 +1,4 @@
From 0d7dd662276c859955251d2cbeef0d60195d6574 Mon Sep 17 00:00:00 2001
From eb4503d43fbe4282eb8bf3036bc0a7a0f299691c Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 16 Jan 2014 20:56:49 -0700
Subject: [PATCH] ntdll: Add support for junction point creation.
@ -14,13 +14,13 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
create mode 100644 include/ntifs.h
diff --git a/configure.ac b/configure.ac
index 855f0848eec..41ab0c1d8e4 100644
index ecc9f1c8af5..2b68bdde1d2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2215,6 +2215,8 @@ AC_CHECK_FUNCS(\
@@ -2175,6 +2175,8 @@ AC_CHECK_FUNCS(\
posix_fallocate \
prctl \
proc_pidinfo \
readlink \
+ renameat \
+ renameat2 \
sched_yield \
@ -152,7 +152,7 @@ index 46037546e6e..7a01e947e13 100644
test_mailslot_name();
}
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index 38c03d114ed..683bd67385d 100644
index 98fcc075c45..6ffa1473199 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -36,6 +36,7 @@
@ -215,7 +215,7 @@ index 38c03d114ed..683bd67385d 100644
/* get space from the current directory data buffer, allocating a new one if necessary */
static void *get_dir_data_space( struct dir_data *data, unsigned int size )
{
@@ -5922,6 +5954,116 @@ static void ignore_server_ioctl_struct_holes( ULONG code, const void *in_buffer,
@@ -5936,6 +5968,116 @@ static void ignore_server_ioctl_struct_holes( ULONG code, const void *in_buffer,
}
@ -332,7 +332,7 @@ index 38c03d114ed..683bd67385d 100644
/******************************************************************************
* NtFsControlFile (NTDLL.@)
*/
@@ -6004,6 +6146,23 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap
@@ -6018,6 +6160,23 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap
break;
}
@ -357,10 +357,10 @@ index 38c03d114ed..683bd67385d 100644
TRACE("FSCTL_SET_SPARSE: Ignoring request\n");
io->Information = 0;
diff --git a/include/Makefile.in b/include/Makefile.in
index 43a4fd98a42..99cab5a18f6 100644
index eac1c2e0570..25b00f9e52b 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -545,6 +545,7 @@ SOURCES = \
@@ -546,6 +546,7 @@ SOURCES = \
ntdef.h \
ntdsapi.h \
ntgdi.h \

View File

@ -1,4 +1,4 @@
From 9d760a7c86cff579f870d78d0d5b4a6624b22324 Mon Sep 17 00:00:00 2001
From c0f79c570c9b54d7ea42af6c9e8a2e25b83a6c01 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@wine-staging.com>
Date: Sun, 22 Nov 2020 22:37:33 -0700
Subject: [PATCH] ntdll: Allow set_file_times_precise to work on reparse
@ -11,11 +11,11 @@ Subject: [PATCH] ntdll: Allow set_file_times_precise to work on reparse
3 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/configure.ac b/configure.ac
index 4b7d72063d8..0a15b7b92ff 100644
index 2b68bdde1d2..bf9e8103606 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2224,7 +2224,8 @@ AC_CHECK_FUNCS(\
symlink \
@@ -2183,7 +2183,8 @@ AC_CHECK_FUNCS(\
sigprocmask \
sysinfo \
tcdrain \
- thr_kill2
@ -65,7 +65,7 @@ index 490d5160761..2449ee54799 100644
CloseHandle(handle);
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index 2ee9288f500..2f0ec520288 100644
index efde4dd41f1..d60a3c44b00 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -1728,6 +1728,14 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr )
@ -98,20 +98,20 @@ index 2ee9288f500..2f0ec520288 100644
#ifdef __APPLE__
- if (!&futimens) return FALSE;
+ if (!&utimensat || !&futimens) return FALSE;
#endif
- if (futimens( fd, tv ) == -1) *status = errno_to_status( errno );
- else *status = STATUS_SUCCESS;
+#endif
+#if defined(HAVE_UTIMENSAT)
+ /* futimens does not work on O_PATH|O_NOFOLLOW (O_SYMLINK) file descriptors, so if fd is for a
+ * symlink then use utimensat with an empty path (.) and do not follow the link. */
+ if (utimensat(fd, ".", tv, AT_SYMLINK_NOFOLLOW) == 0) *status = STATUS_SUCCESS;
+ else
+#endif
#endif
- if (futimens( fd, tv ) == -1) *status = errno_to_status( errno );
- else *status = STATUS_SUCCESS;
+ if (futimens(fd, tv) == 0) *status = STATUS_SUCCESS;
+ else *status = errno_to_status( errno );
return TRUE;
#else
return FALSE;
--
2.30.2
2.33.0

View File

@ -51,7 +51,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "ed38d12833bb1957a915ac63128957dacf2bc245"
echo "3660176e09bc02e71586b4cf42f58c9498481af6"
}
# Show version information
@ -128,7 +128,6 @@ patch_enable_all ()
enable_imm32_message_on_focus="$1"
enable_include_winsock="$1"
enable_inseng_Implementation="$1"
enable_iphlpapi_System_Ping="$1"
enable_kernel32_CopyFileEx="$1"
enable_kernel32_Debugger="$1"
enable_kernel32_Job_Tests="$1"
@ -424,9 +423,6 @@ patch_enable ()
inseng-Implementation)
enable_inseng_Implementation="$2"
;;
iphlpapi-System_Ping)
enable_iphlpapi_System_Ping="$2"
;;
kernel32-CopyFileEx)
enable_kernel32_CopyFileEx="$2"
;;
@ -2330,18 +2326,6 @@ if test "$enable_inseng_Implementation" -eq 1; then
patch_apply inseng-Implementation/0001-inseng-Implement-CIF-reader-and-download-functions.patch
fi
# Patchset iphlpapi-System_Ping
# |
# | This patchset fixes the following Wine bugs:
# | * [#8332] Fallback to system ping command when CAP_NET_RAW is not available
# |
# | Modified files:
# | * dlls/iphlpapi/icmp.c
# |
if test "$enable_iphlpapi_System_Ping" -eq 1; then
patch_apply iphlpapi-System_Ping/0001-iphlpapi-Fallback-to-system-ping-when-ICMP-permissio.patch
fi
# Patchset kernel32-CopyFileEx
# |
# | This patchset fixes the following Wine bugs:
@ -2447,18 +2431,23 @@ fi
# | dlls/winegstreamer/wg_parser.c
# |
if test "$enable_mfplat_reverts" -eq 1; then
patch_apply mfplat-reverts/0001-Revert-winegstreamer-Convert-the-Unix-library-to-the.patch
patch_apply mfplat-reverts/0002-Revert-winegstreamer-Return-void-from-wg_parser_stre.patch
patch_apply mfplat-reverts/0003-Revert-winegstreamer-Move-Unix-library-definitions-i.patch
patch_apply mfplat-reverts/0004-Revert-winegstreamer-Remove-the-no-longer-used-start.patch
patch_apply mfplat-reverts/0005-Revert-winegstreamer-Set-unlimited-buffering-using-a.patch
patch_apply mfplat-reverts/0006-Revert-winegstreamer-Initialize-GStreamer-in-wg_pars.patch
patch_apply mfplat-reverts/0007-Revert-winegstreamer-Use-a-single-wg_parser_create-e.patch
patch_apply mfplat-reverts/0008-Revert-winegstreamer-Fix-return-code-in-init_gst-fai.patch
patch_apply mfplat-reverts/0009-Revert-winegstreamer-Allocate-source-media-buffers-i.patch
patch_apply mfplat-reverts/0010-Revert-winegstreamer-Duplicate-source-shutdown-path-.patch
patch_apply mfplat-reverts/0011-Revert-winegstreamer-Properly-clean-up-from-failure-.patch
patch_apply mfplat-reverts/0012-Revert-winegstreamer-Factor-out-more-of-the-init_gst.patch
patch_apply mfplat-reverts/0001-Revert-winegstreamer-Trace-the-unfiltered-caps-in-si.patch
patch_apply mfplat-reverts/0002-Revert-winegstreamer-Avoid-seeking-past-the-end-of-a.patch
patch_apply mfplat-reverts/0003-Revert-winegstreamer-Avoid-passing-a-NULL-buffer-to-.patch
patch_apply mfplat-reverts/0004-Revert-winegstreamer-Use-array_reserve-to-reallocate.patch
patch_apply mfplat-reverts/0005-Revert-winegstreamer-Handle-zero-length-reads-in-src.patch
patch_apply mfplat-reverts/0006-Revert-winegstreamer-Convert-the-Unix-library-to-the.patch
patch_apply mfplat-reverts/0007-Revert-winegstreamer-Return-void-from-wg_parser_stre.patch
patch_apply mfplat-reverts/0008-Revert-winegstreamer-Move-Unix-library-definitions-i.patch
patch_apply mfplat-reverts/0009-Revert-winegstreamer-Remove-the-no-longer-used-start.patch
patch_apply mfplat-reverts/0010-Revert-winegstreamer-Set-unlimited-buffering-using-a.patch
patch_apply mfplat-reverts/0011-Revert-winegstreamer-Initialize-GStreamer-in-wg_pars.patch
patch_apply mfplat-reverts/0012-Revert-winegstreamer-Use-a-single-wg_parser_create-e.patch
patch_apply mfplat-reverts/0013-Revert-winegstreamer-Fix-return-code-in-init_gst-fai.patch
patch_apply mfplat-reverts/0014-Revert-winegstreamer-Allocate-source-media-buffers-i.patch
patch_apply mfplat-reverts/0015-Revert-winegstreamer-Duplicate-source-shutdown-path-.patch
patch_apply mfplat-reverts/0016-Revert-winegstreamer-Properly-clean-up-from-failure-.patch
patch_apply mfplat-reverts/0017-Revert-winegstreamer-Factor-out-more-of-the-init_gst.patch
fi
# Patchset mfplat-streaming-support

View File

@ -1 +1 @@
ed38d12833bb1957a915ac63128957dacf2bc245
3660176e09bc02e71586b4cf42f58c9498481af6