Compare commits

..

70 Commits
v9.13 ... v9.18

Author SHA1 Message Date
Alistair Leslie-Hughes
1212b7ddff Release v9.18 2024-09-22 09:06:09 +10:00
Alistair Leslie-Hughes
16dce52124 Updated ntdll-WRITECOPY patchset
The current state even after multiple iterations, the whole
WRITECOPY implemenet needs differently.  Upstream will need to
do this.

wine-staging will currently allow Chrome based application to run.
2024-09-21 10:43:22 +10:00
Alistair Leslie-Hughes
8a4e32eb32 Updated vkd3d-latest patchset 2024-09-21 09:44:13 +10:00
Alistair Leslie-Hughes
1baaa8fbfc Updated vkd3d-latest patchset 2024-09-20 07:47:19 +10:00
Alistair Leslie-Hughes
f09458658e Rebase against 7037201214729c25d2439818012c156a3991cdb7. 2024-09-20 07:43:46 +10:00
Alistair Leslie-Hughes
e68e4dbb75 Updated ntdll-WRITECOPY patchset
These patches aren't in the correct directory and are really
never going to be accepted upstream.  So until upstream fixes
the WRITE stuff, these might have to stay awhile.

Battle.net requires these patches to function.
2024-09-18 12:18:41 +10:00
Alistair Leslie-Hughes
2e768aee87 Updated vkd3d-latest patchset 2024-09-18 12:18:41 +10:00
Alistair Leslie-Hughes
b6944be810 Updated vkd3d-latest patchset 2024-09-12 09:00:19 +10:00
Alistair Leslie-Hughes
ce31cba943 Rebase against 0cdc3b092cbe13b8a029e12fda32b5f5ef04641e. 2024-09-12 08:59:57 +10:00
Alistair Leslie-Hughes
52f5128abc Updated vkd3d-latest patchset 2024-09-11 10:30:18 +10:00
Alistair Leslie-Hughes
d7706d345c Rebase against ee5bd3bab82903b26e360d077c93af4a26158367. 2024-09-11 09:57:51 +10:00
Alistair Leslie-Hughes
27b121f293 Release v9.17 2024-09-07 09:32:33 +10:00
Alistair Leslie-Hughes
ab9df8f932 Updated vkd3d-latest patchset 2024-09-07 08:48:33 +10:00
Alistair Leslie-Hughes
4127a50f6b Rebase against 30c135fe8662e7bcbafaa187914f28fdf9c052ff. 2024-09-07 08:47:06 +10:00
Alistair Leslie-Hughes
deb7042324 Rebase against 8d2977ec12e234880199bc07daf49870d0aa64ec. 2024-09-03 07:34:49 +10:00
Alistair Leslie-Hughes
21a71e43b2 Updated odbc32-fixes patchset
Correct finding Environment Handle.
Check for error before converting type.
2024-08-31 13:44:42 +10:00
Elizabeth Figura
fdd5079133 Rebase against 055bddab4f14a1f73e887b88b86408d654382c2b. 2024-08-30 17:38:53 -05:00
Alistair Leslie-Hughes
acfbb64262 Updated vkd3d-latest patchset 2024-08-29 08:00:18 +10:00
Alistair Leslie-Hughes
041773cac4 Rebase against e3d2620bdf6f8e91a5ccf5904f256a55a5af137e. 2024-08-29 07:37:28 +10:00
Alistair Leslie-Hughes
f43640039b Updated odbc32-fixes patchset
Correct the convert of v3 to v2 for SQLColAttribute/W functions.
By default just pass the field id through.
2024-08-28 07:58:13 +10:00
Alistair Leslie-Hughes
8999a04fd6 Updated cmd-launch-association patchset
Re-enabled.
2024-08-27 08:01:53 +10:00
Alistair Leslie-Hughes
3c0ae5d07c Updated vkd3d-latest patchset
Squash and rebase to latest.
2024-08-27 07:57:01 +10:00
Alistair Leslie-Hughes
294e058f4b Updated odbc32-fixes patchset
There is only a small subset of columns fields that need converting
from 3 to 2.  Let all the other pass and we can deal with fallout later.
2024-08-27 07:55:14 +10:00
Alistair Leslie-Hughes
edbcee8c11 Rebase against b01131ce82ad8306d719f9919e6249af2db5322d. 2024-08-27 07:53:21 +10:00
Alistair Leslie-Hughes
6c5cb54635 Release v9.16 2024-08-24 13:19:31 +10:00
Alistair Leslie-Hughes
03b53697da Updated dinput-scancode patchset 2024-08-24 12:46:03 +10:00
Elizabeth Figura
c901884ac0 ntdll-WRITECOPY: Remove patch 0010.
This is a hack specifically meant for upstream Wine; it was never meant to apply to Wine-Staging.

This very patch set is supposed to be a more complete and holistic hack/implementation of the same logic.

This hack only works for CEF, and breaks the existing tests that are fixed by the rest of ntdll-WRITECOPY.
2024-08-22 19:20:23 -05:00
Elizabeth Figura
5fad8dd101 Rebase against 6a7bfbab10d653f6724e2917e0552515520e4fb3. 2024-08-22 19:07:19 -05:00
Elizabeth Figura
ae46f56f2c ntdll-WRITECOPY: Install existing signal handlers earlier instead of using a special early signal handler. 2024-08-22 18:49:16 -05:00
Alistair Leslie-Hughes
5eeb4b76d6 Updated vkd3d-latest patchset 2024-08-21 08:05:40 +10:00
Alistair Leslie-Hughes
b9a08f8300 Rebase against 6e15604c48acd63dd8095a4ce2fd011cb3be96db. 2024-08-21 07:52:15 +10:00
Alistair Leslie-Hughes
41367bc540 Updated vkd3d-latest patchset 2024-08-20 07:49:47 +10:00
Alistair Leslie-Hughes
e780e2e62d Rebase against ba66d9c71519176bd499eb846ed11fb0ea421118. 2024-08-20 07:43:11 +10:00
Alistair Leslie-Hughes
a90554bb04 Rebase against 16a6b0ad65e9b8cdbb68fc9125951483781ca616. 2024-08-16 08:26:55 +10:00
Alistair Leslie-Hughes
7104b9b6ba Rebase against 75f8de6bd41c945abe230e8fd1d8645f30b7667f. 2024-08-15 08:35:27 +10:00
Alistair Leslie-Hughes
51d8ac0717 Rebase against eef229cc1eb77c3236ab4e210a6a276b65173e39.
Fixes regression with latest odbc32.
2024-08-14 07:58:19 +10:00
Alistair Leslie-Hughes
4af1f11315 Rebase against d98f067294918aa5cfeadb576652dd8fd1757c38. 2024-08-13 11:58:33 +10:00
Elizabeth Figura
cd2cce28cc eventfd_synchronization: Fix compile warnings.
Why, GCC, did you think this was a good idea?
2024-08-12 16:55:29 -05:00
Elizabeth Figura
761b7f72d0 dinput-regression-fix: Remove patch.
This is not the correct fix for the regression, and the regression is not in fact a regression.
2024-08-12 16:50:26 -05:00
Alistair Leslie-Hughes
92374493ee Release v9.15 2024-08-11 15:10:36 +10:00
Alistair Leslie-Hughes
a713da9181 Added add printdlg-properties_btn patchset 2024-08-11 15:03:10 +10:00
Alistair Leslie-Hughes
75f3eede59 Added dinput-regression-fix patchset 2024-08-11 15:00:14 +10:00
Alistair Leslie-Hughes
a7f29f1236 Rebase against 9c69ccf8ef2995548ef5fee9d0b68f68dec5dd62.
Added two patches to fix upstream regression with ODBC32.
2024-08-10 14:50:18 +10:00
Alistair Leslie-Hughes
1143543d4a Updated vkd3d-latest patchset 2024-08-09 07:54:11 +10:00
Alistair Leslie-Hughes
4cfe8f056a Rebase against 7df297968a932437c5ac50c67376f05265179cca. 2024-08-09 07:53:43 +10:00
Alistair Leslie-Hughes
c23ee1bf3b Updated winemapi-user-xdg-mail patchset
Corrected TRACE message.
2024-08-08 06:17:31 +10:00
Alistair Leslie-Hughes
d2636c432f Rebase against a891fcf66751921cf81db294b09a696c6b6999b8. 2024-08-07 16:02:00 +10:00
Alistair Leslie-Hughes
7624463e7c Updated eventfd_synchronization patchset
Move #define _GNU_SOURCE to after the config.h
2024-08-01 07:03:21 +10:00
Alistair Leslie-Hughes
06d80381a4 Rebase against 1dfac2a252d0036c3bae08bf47f00582343a80fb. 2024-07-31 11:38:10 +10:00
Alistair Leslie-Hughes
a59a98678f Release v9.14 2024-07-29 07:45:51 +10:00
Alistair Leslie-Hughes
db14a7bed3 Remove odbc-remove-unixodbc patchset
odbc32-fixes has all the changes required to make ODBC v2 drivers work.
2024-07-29 07:43:13 +10:00
Alistair Leslie-Hughes
6883402dec Update wine URL 2024-07-27 11:51:06 +10:00
Alistair Leslie-Hughes
b98458cadc Updated ntdll-WRITECOPY patchset
Check return value pointer.
2024-07-27 08:00:00 +10:00
Alistair Leslie-Hughes
37551c99a2 Updated workflow wine respository 2024-07-26 09:43:55 +10:00
Alistair Leslie-Hughes
bdc041f704 Updated vkd3d-latest patchset 2024-07-26 09:41:57 +10:00
Alistair Leslie-Hughes
d4f4b330b8 Rebase against 0c1c8c295b14626c2cb3c2fac65e1f29b1ea874e. 2024-07-25 11:33:20 +10:00
Alistair Leslie-Hughes
9b107c62cb Updated odbc32-fixes patchset
Fix some bad logic
2024-07-21 09:57:39 +10:00
Alistair Leslie-Hughes
9eb00790f0 Updated odbc32-fixes patchset 2024-07-20 13:18:39 +10:00
Alistair Leslie-Hughes
82ccf59f15 Rebase against 8d259957a2470190e109b1175cf61f4d95427fce. 2024-07-20 12:43:58 +10:00
Alistair Leslie-Hughes
2c482721e3 Updated odbc32-fixes patchset
Small correction to version.
2024-07-19 07:42:36 +10:00
Alistair Leslie-Hughes
215e6efd27 Updated odbc32-fixes patchset
Reordered the Alloc/Free handle patches together.

Fixed an issue with the Driver patchset (Thanks Daniel Lehman)
2024-07-18 16:30:12 +10:00
Alistair Leslie-Hughes
05d08d31c0 Updated vkd3d-latest patchset 2024-07-18 10:07:39 +10:00
Alistair Leslie-Hughes
73441d6d9b Updated odbc32-fixes patchset
More updates to support ODBC 2.0.
2024-07-18 10:00:20 +10:00
Alistair Leslie-Hughes
39ad9d8625 Rebase against ca938c795c0c7a2fa11384414809d9a328e3e96f. 2024-07-18 09:59:41 +10:00
Alistair Leslie-Hughes
fe62b910f5 Rebase against 88a28aa5757ae74d9997b470d70216f10974247f. 2024-07-17 08:25:49 +10:00
Alistair Leslie-Hughes
1d529ee294 Updated odbc32-fixes patchset
Fixes when writing based of the column handle.  Just check if we have been set
seem enough for now.
2024-07-16 10:11:19 +10:00
Alistair Leslie-Hughes
67a860f344 Rebase against 8070ed27bc4bb8c9c43c20734d340b62b379fcfc. 2024-07-16 09:23:21 +10:00
Alistair Leslie-Hughes
6bab3a7617 Updated odbc32-fixes patchset
Update patch to match latest MR patch

Enable the patchset.
2024-07-16 08:58:13 +10:00
Alistair Leslie-Hughes
3c0f797ca6 Added dxgi_getFrameStatistics patchset 2024-07-15 10:06:14 +10:00
Alistair Leslie-Hughes
577974c563 Updated vkd3d-latest patchset
Squash to previous wine-staging release.
2024-07-15 10:04:37 +10:00
141 changed files with 14197 additions and 23212 deletions

View File

@@ -36,7 +36,7 @@ jobs:
mkdir $GITHUB_WORKSPACE/wine
cd wine
git init
git fetch git://source.winehq.org/git/wine.git $($GITHUB_WORKSPACE/staging/patchinstall.py --upstream-commit) --depth=1
git fetch https://gitlab.winehq.org/wine/wine.git $($GITHUB_WORKSPACE/staging/patchinstall.py --upstream-commit) --depth=1
git checkout $($GITHUB_WORKSPACE/staging/patchinstall.py --upstream-commit)
- name: Run patchinstall.py --all

View File

@@ -1,15 +1,15 @@
From 6a4be6a3089d37ff825853d2644d826d80d59e4f Mon Sep 17 00:00:00 2001
From 601da0ae0c6b22f37d20e6e0f10558093277eca9 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Thu, 2 Oct 2014 19:44:31 +0200
Subject: [PATCH] ntdll: Print a warning message specifying the wine-staging
branch name and version.
---
dlls/ntdll/loader.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
dlls/ntdll/loader.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index bad1492e138..6f80e7b3a28 100644
index 5f84ca7e23b..fabf394fbe5 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -43,6 +43,7 @@ WINE_DECLARE_DEBUG_CHANNEL(relay);
@@ -20,7 +20,7 @@ index bad1492e138..6f80e7b3a28 100644
#ifdef _WIN64
#define DEFAULT_SECURITY_COOKIE_64 (((ULONGLONG)0x00002b99 << 32) | 0x2ddfa232)
@@ -3823,6 +3824,7 @@ void WINAPI LdrShutdownProcess(void)
@@ -3828,6 +3829,7 @@ void WINAPI LdrShutdownProcess(void)
process_detach();
}
@@ -28,7 +28,7 @@ index bad1492e138..6f80e7b3a28 100644
/******************************************************************
* RtlExitUserProcess (NTDLL.@)
@@ -4317,6 +4319,9 @@ static void release_address_space(void)
@@ -4322,6 +4324,9 @@ static void release_address_space(void)
*/
void loader_init( CONTEXT *context, void **entry )
{
@@ -38,10 +38,13 @@ index bad1492e138..6f80e7b3a28 100644
static int attach_done;
NTSTATUS status;
ULONG_PTR cookie, port = 0;
@@ -4397,6 +4402,16 @@ void loader_init( CONTEXT *context, void **entry )
@@ -4407,7 +4412,18 @@ void loader_init( CONTEXT *context, void **entry )
arm64ec_thread_init();
#endif
wm = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress );
+ /* This hunk occasionally applies in the wrong place;
+ * add a comment here to try to prevent that. */
}
+ RtlInitUnicodeString( &staging_event_string, L"\\__wine_staging_warn_event" );
+ InitializeObjectAttributes( &staging_event_attr, &staging_event_string, OBJ_OPENIF, NULL, NULL );
+ if (NtCreateEvent( &staging_event, EVENT_ALL_ACCESS, &staging_event_attr, NotificationEvent, FALSE ) == STATUS_SUCCESS)
@@ -51,10 +54,9 @@ index bad1492e138..6f80e7b3a28 100644
+ }
+ else
+ WARN_(winediag)("wine-staging %s is a testing version containing experimental patches.\n", wine_get_version());
+
RtlAcquirePebLock();
InsertHeadList( &tls_links, &NtCurrentTeb()->TlsLinks );
RtlReleasePebLock();
NtCurrentTeb()->FlsSlots = fls_alloc_data();
--
2.43.0
2.45.2

View File

@@ -1,197 +0,0 @@
From 0173ca4b3352506b76801619ae5a05f338d6ff6e Mon Sep 17 00:00:00 2001
From: Jason Edmeades <us@edmeades.me.uk>
Date: Tue, 16 Jul 2019 13:49:18 +1000
Subject: [PATCH] cmd: Support for launching programs based on file association
cmd already handles exe, cmd, bat etc but if you run a file with another extension,
then use the associations set in the registry (for example via ftype / assoc) to
launch a program. This enables you to run test.txt and notepad to pop up, or
fred.msi for msiexec to be launched.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=18154
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=36646
---
programs/cmd/wcmdmain.c | 139 +++++++++++++++++++++++++++++-----------
1 file changed, 102 insertions(+), 37 deletions(-)
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index ce48b16d7ec..2d20ee299fa 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -1541,8 +1541,10 @@ void WCMD_run_program (WCHAR *command, BOOL called)
/* 1. If extension supplied, see if that file exists */
if (extensionsupplied) {
- if (GetFileAttributesW(thisDir) != INVALID_FILE_ATTRIBUTES) {
+ DWORD attribs = GetFileAttributesW(thisDir);
+ if (attribs != INVALID_FILE_ATTRIBUTES && !(attribs&FILE_ATTRIBUTE_DIRECTORY)) {
found = TRUE;
+ WINE_TRACE("Found as file with extension as '%s'\n", wine_dbgstr_w(thisDir));
}
}
@@ -1572,6 +1574,7 @@ void WCMD_run_program (WCHAR *command, BOOL called)
}
if (GetFileAttributesW(thisDir) != INVALID_FILE_ATTRIBUTES) {
+ WINE_TRACE("Found via search and pathext as '%s'\n", wine_dbgstr_w(thisDir));
found = TRUE;
thisExt = NULL;
}
@@ -1595,6 +1598,7 @@ void WCMD_run_program (WCHAR *command, BOOL called)
RETURN_CODE return_code;
BOOL oldinteractive = interactive;
+ WINE_TRACE("Calling batch program\n");
interactive = FALSE;
return_code = WCMD_batch(thisDir, command, NULL, INVALID_HANDLE_VALUE);
interactive = oldinteractive;
@@ -1605,48 +1609,109 @@ void WCMD_run_program (WCHAR *command, BOOL called)
if (return_code != RETURN_CODE_ABORTED && return_code != RETURN_CODE_OLD_CHAINING)
errorlevel = return_code;
return;
- } else {
- DWORD exit_code;
- /* thisDir contains the file to be launched, but with what?
- eg. a.exe will require a.exe to be launched, a.html may be iexplore */
- hinst = FindExecutableW (thisDir, NULL, temp);
- if ((INT_PTR)hinst < 32)
- console = 0;
- else
- console = SHGetFileInfoW(temp, 0, &psfi, sizeof(psfi), SHGFI_EXETYPE);
-
- ZeroMemory (&st, sizeof(STARTUPINFOW));
- st.cb = sizeof(STARTUPINFOW);
- init_msvcrt_io_block(&st);
-
- /* Launch the process and if a CUI wait on it to complete
- Note: Launching internal wine processes cannot specify a full path to exe */
- status = CreateProcessW(thisDir,
- command, NULL, NULL, TRUE, 0, NULL, NULL, &st, &pe);
- free(st.lpReserved2);
- if ((opt_c || opt_k) && !opt_s && !status
- && GetLastError()==ERROR_FILE_NOT_FOUND && command[0]=='\"') {
- /* strip first and last quote WCHARacters and try again */
- WCMD_strip_quotes(command);
- opt_s = TRUE;
- WCMD_run_program(command, called);
+ }
+
+ /* Calculate what program will be launched, and whether it is a
+ console application or not. Note the program may be different
+ from the parameter (eg running a .txt file will launch notepad.exe) */
+ hinst = FindExecutableW (thisDir, NULL, temp);
+ if ((INT_PTR)hinst < 32)
+ console = 0; /* Assume not console app by default */
+ else
+ console = SHGetFileInfoW(temp, 0, &psfi, sizeof(psfi), SHGFI_EXETYPE);
+
+
+ /* If it is not a .com or .exe, try to launch through ShellExecuteExW
+ which takes into account the association for the extension. */
+ if (ext && (wcsicmp(ext, L".exe") && wcsicmp(ext, L".com"))) {
+
+ SHELLEXECUTEINFOW shexw;
+ BOOL rc;
+ WCHAR *rawarg;
+
+ WCMD_parameter(command, 1, &rawarg, FALSE, TRUE);
+ WINE_TRACE("Launching via ShellExecuteEx\n");
+ memset(&shexw, 0x00, sizeof(shexw));
+ shexw.cbSize = sizeof(SHELLEXECUTEINFOW);
+ shexw.fMask = SEE_MASK_NO_CONSOLE | /* Run in same console as currently using */
+ SEE_MASK_NOCLOSEPROCESS; /* We need a process handle to possibly wait on */
+ shexw.lpFile = thisDir;
+ shexw.lpParameters = rawarg;
+ shexw.nShow = SW_SHOWNORMAL;
+
+ /* Try to launch the binary or its associated program */
+ rc = ShellExecuteExW(&shexw);
+
+ if (rc && (INT_PTR)shexw.hInstApp >= 32) {
+
+ WINE_TRACE("Successfully launched\n");
+
+ /* It worked... Always wait when non-interactive (cmd /c or in
+ batch program), or for console applications */
+ if (!interactive || (console && !HIWORD(console))) {
+ WINE_TRACE("Waiting for process to end\n");
+ WaitForSingleObject (shexw.hProcess, INFINITE);
+ }
+
+ GetExitCodeProcess (shexw.hProcess, &errorlevel);
+ if (errorlevel == STILL_ACTIVE) {
+ WINE_TRACE("Process still running, but returning anyway\n");
+ errorlevel = 0;
+ } else {
+ WINE_TRACE("Process ended, errorlevel %ld\n", errorlevel);
+ }
+
+ CloseHandle(pe.hProcess);
return;
+
}
+ }
- if (!status)
- break;
+ /* If its a .exe or .com or the shellexecute failed due to no association,
+ CreateProcess directly */
+ ZeroMemory (&st, sizeof(STARTUPINFOW));
+ st.cb = sizeof(STARTUPINFOW);
+ init_msvcrt_io_block(&st);
+
+ /* Launch the process and if a CUI wait on it to complete
+ Note: Launching internal wine processes cannot specify a full path to exe */
+ WINE_TRACE("Launching via CreateProcess\n");
+ status = CreateProcessW(thisDir,
+ command, NULL, NULL, TRUE, 0, NULL, NULL, &st, &pe);
+ free(st.lpReserved2);
+ if ((opt_c || opt_k) && !opt_s && !status
+ && GetLastError()==ERROR_FILE_NOT_FOUND && command[0]=='\"') {
+ /* strip first and last quote WCHARacters and try again */
+ WCMD_strip_quotes(command);
+ opt_s = TRUE;
+ WCMD_run_program(command, called);
+ return;
+ }
- /* Always wait when non-interactive (cmd /c or in batch program),
- or for console applications */
- if (!interactive || (console && !HIWORD(console)))
- WaitForSingleObject (pe.hProcess, INFINITE);
- GetExitCodeProcess (pe.hProcess, &exit_code);
- errorlevel = (exit_code == STILL_ACTIVE) ? NO_ERROR : exit_code;
+ if (!status) {
+ WINE_TRACE("Failed to launch via CreateProcess, rc %d (%ld)\n",
+ status, GetLastError());
+ break;
+ }
- CloseHandle(pe.hProcess);
- CloseHandle(pe.hThread);
- return;
+ /* Always wait when non-interactive (cmd /c or in batch program),
+ or for console applications */
+ if (!interactive || (console && !HIWORD(console))) {
+ WINE_TRACE("Waiting for process to end\n");
+ WaitForSingleObject (pe.hProcess, INFINITE);
}
+
+ GetExitCodeProcess (pe.hProcess, &errorlevel);
+ if (errorlevel == STILL_ACTIVE) {
+ WINE_TRACE("Process still running, but returning anyway\n");
+ errorlevel = 0;
+ } else {
+ WINE_TRACE("Process ended, errorlevel %ld\n", errorlevel);
+ }
+
+ CloseHandle(pe.hProcess);
+ CloseHandle(pe.hThread);
+ return;
}
}
--
2.45.2

View File

@@ -1,79 +0,0 @@
From 2f9fa2d492521d297eb87e4b6709d8349818b9c6 Mon Sep 17 00:00:00 2001
From: Jason Edmeades <us@edmeades.me.uk>
Date: Tue, 16 Jul 2019 13:51:58 +1000
Subject: [PATCH] cmd: ftype failed to clear file associations
If a file association was set (e.g. ftype fred=xxx), ftype fred= needs to clear it,
but previously it failed to do so.
---
programs/cmd/builtins.c | 6 +++---
programs/cmd/tests/test_builtins.cmd | 9 +++++++++
programs/cmd/tests/test_builtins.cmd.exp | 5 ++++-
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 1c39c35ca78..f23f9ef2046 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -4101,11 +4101,11 @@ void WCMD_assoc (const WCHAR *args, BOOL assoc) {
/* If nothing after '=' then clear value - only valid for ASSOC */
if (*newValue == 0x00) {
- if (assoc) rc = RegDeleteKeyW(key, args);
- if (assoc && rc == ERROR_SUCCESS) {
+ rc = RegDeleteTreeW(key, args);
+ if (rc == ERROR_SUCCESS) {
WINE_TRACE("HKCR Key '%s' deleted\n", wine_dbgstr_w(args));
- } else if (assoc && rc != ERROR_FILE_NOT_FOUND) {
+ } else if (rc != ERROR_FILE_NOT_FOUND) {
WCMD_print_error();
errorlevel = ERROR_FILE_NOT_FOUND;
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index d5397560bc6..14666c85cac 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -2670,6 +2670,12 @@ echo echo +++>> tmp.cmd
echo ftype footype>> tmp.cmd
cmd /c tmp.cmd
+echo --- testing association
+ftype footype=cmd.exe /c "echo '%%1'"
+echo dummy>test.foo
+test.foo
+del test.foo
+
echo --- resetting association
assoc .foo=
@@ -2701,6 +2707,9 @@ echo .foo=footype
echo footype=foo_opencmd
echo +++
echo footype=foo_opencmd
+echo --- testing association
+echo footype=cmd.exe /c "echo '%%1'"
+echo Skipped as not enough permissions
echo --- resetting association
echo original value
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
index 0102c3bcbc5..a6d97bc8248 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -1549,8 +1549,11 @@ footype=foo_opencmd
footype=foo_opencmd
+++
footype=foo_opencmd
+--- testing association
+footype=cmd.exe /c "echo '%1'"
+'@drive@@path@foobar\test.foo'@or_broken@Skipped as not enough permissions
--- resetting association
-@todo_wine@original value@or_broken@buggyXP@or_broken@!WINE_FOO!
+original value@or_broken@buggyXP@or_broken@!WINE_FOO!
------------ Testing CALL ------------
--- external script
foo@space@
--
2.43.0

View File

@@ -1,55 +0,0 @@
From 5d1a7ff33160080ad2aca22f689c5b4b446837d8 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 18 Jun 2024 09:14:56 +1000
Subject: [PATCH] cmd: Changed errorlevel type to DWORD
This stop the invalid type being passed to GetExitCodeProcess which is being reported
as an error with clang/mingw in the latest version.
---
programs/cmd/builtins.c | 2 +-
programs/cmd/wcmd.h | 2 +-
programs/cmd/wcmdmain.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 1e92e88d191..9b8cfd389b9 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -442,7 +442,7 @@ RETURN_CODE WCMD_choice (const WCHAR * args)
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), oldmode);
errorlevel = (ptr - opt_c) + 1;
- TRACE("answer: %d\n", errorlevel);
+ TRACE("answer: %ld\n", errorlevel);
free(my_command);
return errorlevel;
}
diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h
index 6c76070338c..d750aca5572 100644
--- a/programs/cmd/wcmd.h
+++ b/programs/cmd/wcmd.h
@@ -336,7 +336,7 @@ void WCMD_set_for_loop_variable(int var_idx, const WCHAR *value);
* variables and batch parameters substitution already done.
*/
extern WCHAR quals[MAXSTRING], param1[MAXSTRING], param2[MAXSTRING];
-extern int errorlevel;
+extern DWORD errorlevel;
extern BATCH_CONTEXT *context;
extern FOR_CONTEXT *forloopcontext;
extern BOOL delayedsubst;
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 2df0d7c53d3..095be784f2c 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -36,7 +36,7 @@ extern const WCHAR inbuilt[][10];
extern struct env_stack *pushd_directories;
BATCH_CONTEXT *context = NULL;
-int errorlevel;
+DWORD errorlevel;
WCHAR quals[MAXSTRING], param1[MAXSTRING], param2[MAXSTRING];
BOOL interactive;
FOR_CONTEXT *forloopcontext; /* The 'for' loop context */
--
2.43.0

View File

@@ -1,2 +0,0 @@
Fixes: [18154] cmd: Support for launching programs based on file association
Disabled: True

View File

@@ -1 +1,2 @@
Fixes: [26898] Support for DDS file format in D3DXSaveTextureToFileInMemory
Disabled: True

View File

@@ -0,0 +1,175 @@
From 77a518b61884ef4e06f4fe8b94dd5c855c5e8daf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Fri, 23 Aug 2024 08:49:13 +0200
Subject: [PATCH] dinput: Factor keyboard initialization and enumeration loops.
---
dlls/dinput/keyboard.c | 129 +++++++++++++++++++++++------------------
1 file changed, 72 insertions(+), 57 deletions(-)
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
index 8ec9dd47150..d1fa242574e 100644
--- a/dlls/dinput/keyboard.c
+++ b/dlls/dinput/keyboard.c
@@ -185,12 +185,79 @@ HRESULT keyboard_enum_device( DWORD type, DWORD flags, DIDEVICEINSTANCEW *instan
return DI_OK;
}
+static BOOL enum_object( struct keyboard *impl, const DIPROPHEADER *filter, DWORD flags, enum_object_callback callback,
+ UINT index, DIDEVICEOBJECTINSTANCEW *instance, void *data )
+{
+ if (flags != DIDFT_ALL && !(flags & DIDFT_GETTYPE( instance->dwType ))) return DIENUM_CONTINUE;
+
+ switch (filter->dwHow)
+ {
+ case DIPH_DEVICE:
+ return callback( &impl->base, index, NULL, instance, data );
+ case DIPH_BYOFFSET:
+ if (filter->dwObj != instance->dwOfs) return DIENUM_CONTINUE;
+ return callback( &impl->base, index, NULL, instance, data );
+ case DIPH_BYID:
+ if ((filter->dwObj & 0x00ffffff) != (instance->dwType & 0x00ffffff)) return DIENUM_CONTINUE;
+ return callback( &impl->base, index, NULL, instance, data );
+ }
+
+ return DIENUM_CONTINUE;
+}
+
+static HRESULT enum_objects( struct keyboard *impl, const DIPROPHEADER *filter,
+ DWORD flags, enum_object_callback callback, void *data )
+{
+ BYTE subtype = GET_DIDEVICE_SUBTYPE( impl->base.instance.dwDevType );
+ DIDEVICEOBJECTINSTANCEW instance =
+ {
+ .dwSize = sizeof(DIDEVICEOBJECTINSTANCEW),
+ .guidType = GUID_Key,
+ .dwOfs = DIK_ESCAPE,
+ .dwType = DIDFT_PSHBUTTON | DIDFT_MAKEINSTANCE( DIK_ESCAPE ),
+ };
+ DWORD index, i, dik;
+ BOOL ret;
+
+ for (i = 0, index = 0; i < 512; ++i)
+ {
+ if (!GetKeyNameTextW( i << 16, instance.tszName, ARRAY_SIZE(instance.tszName) )) continue;
+ if (!(dik = map_dik_code( i, 0, subtype, impl->base.dinput->dwVersion ))) continue;
+ instance.dwOfs = dik;
+ instance.dwType = DIDFT_PSHBUTTON | DIDFT_MAKEINSTANCE( dik );
+ ret = enum_object( impl, filter, flags, callback, index++, &instance, data );
+ if (ret != DIENUM_CONTINUE) return DIENUM_STOP;
+ }
+
+ return DIENUM_CONTINUE;
+}
+
+static BOOL init_object_properties( struct dinput_device *device, UINT index, struct hid_value_caps *caps,
+ const DIDEVICEOBJECTINSTANCEW *instance, void *data )
+{
+ struct object_properties *properties;
+ UINT dik = instance->dwOfs;
+
+ if (index == -1) return DIENUM_STOP;
+ properties = device->object_properties + index;
+
+ if (dik == DIK_NUMLOCK) properties->scan_code = 0x451de1;
+ else if (dik == DIK_PAUSE) properties->scan_code = 0x45;
+ else if (dik < 0x80) properties->scan_code = dik;
+ else properties->scan_code = (dik - 0x80) << 8 | 0x00e0;
+
+ return DIENUM_CONTINUE;
+}
+
HRESULT keyboard_create_device( struct dinput *dinput, const GUID *guid, IDirectInputDevice8W **out )
{
- DIDEVICEOBJECTINSTANCEW instance;
+ static const DIPROPHEADER filter =
+ {
+ .dwSize = sizeof(filter),
+ .dwHeaderSize = sizeof(filter),
+ .dwHow = DIPH_DEVICE,
+ };
struct keyboard *impl;
- DWORD i, index, dik;
- BYTE subtype;
HRESULT hr;
TRACE( "dinput %p, guid %s, out %p.\n", dinput, debugstr_guid( guid ), out );
@@ -207,20 +274,9 @@ HRESULT keyboard_create_device( struct dinput *dinput, const GUID *guid, IDirect
impl->base.caps.dwFirmwareRevision = 100;
impl->base.caps.dwHardwareRevision = 100;
if (dinput->dwVersion >= 0x0800) impl->base.use_raw_input = TRUE;
- subtype = GET_DIDEVICE_SUBTYPE( impl->base.instance.dwDevType );
if (FAILED(hr = dinput_device_init_device_format( &impl->base.IDirectInputDevice8W_iface ))) goto failed;
-
- for (i = 0, index = 0; i < 512; ++i)
- {
- if (!GetKeyNameTextW( i << 16, instance.tszName, ARRAY_SIZE(instance.tszName) )) continue;
- if (!(dik = map_dik_code( i, 0, subtype, impl->base.dinput->dwVersion ))) continue;
-
- if (dik == DIK_NUMLOCK) impl->base.object_properties[index++].scan_code = 0x451de1;
- else if (dik == DIK_PAUSE) impl->base.object_properties[index++].scan_code = 0x45;
- else if (dik < 0x80) impl->base.object_properties[index++].scan_code = dik;
- else impl->base.object_properties[index++].scan_code = (dik - 0x80) << 8 | 0x00e0;
- }
+ enum_objects( impl, &filter, DIDFT_BUTTON, init_object_properties, NULL );
*out = &impl->base.IDirectInputDevice8W_iface;
return DI_OK;
@@ -248,52 +304,11 @@ static HRESULT keyboard_unacquire( IDirectInputDevice8W *iface )
return DI_OK;
}
-static BOOL try_enum_object( struct dinput_device *impl, const DIPROPHEADER *filter, DWORD flags, enum_object_callback callback,
- UINT index, DIDEVICEOBJECTINSTANCEW *instance, void *data )
-{
- if (flags != DIDFT_ALL && !(flags & DIDFT_GETTYPE( instance->dwType ))) return DIENUM_CONTINUE;
-
- switch (filter->dwHow)
- {
- case DIPH_DEVICE:
- return callback( impl, index, NULL, instance, data );
- case DIPH_BYOFFSET:
- if (filter->dwObj != instance->dwOfs) return DIENUM_CONTINUE;
- return callback( impl, index, NULL, instance, data );
- case DIPH_BYID:
- if ((filter->dwObj & 0x00ffffff) != (instance->dwType & 0x00ffffff)) return DIENUM_CONTINUE;
- return callback( impl, index, NULL, instance, data );
- }
-
- return DIENUM_CONTINUE;
-}
-
static HRESULT keyboard_enum_objects( IDirectInputDevice8W *iface, const DIPROPHEADER *filter,
DWORD flags, enum_object_callback callback, void *context )
{
struct keyboard *impl = impl_from_IDirectInputDevice8W( iface );
- BYTE subtype = GET_DIDEVICE_SUBTYPE( impl->base.instance.dwDevType );
- DIDEVICEOBJECTINSTANCEW instance =
- {
- .dwSize = sizeof(DIDEVICEOBJECTINSTANCEW),
- .guidType = GUID_Key,
- .dwOfs = DIK_ESCAPE,
- .dwType = DIDFT_PSHBUTTON | DIDFT_MAKEINSTANCE( DIK_ESCAPE ),
- };
- DWORD index, i, dik;
- BOOL ret;
-
- for (i = 0, index = 0; i < 512; ++i)
- {
- if (!GetKeyNameTextW( i << 16, instance.tszName, ARRAY_SIZE(instance.tszName) )) continue;
- if (!(dik = map_dik_code( i, 0, subtype, impl->base.dinput->dwVersion ))) continue;
- instance.dwOfs = dik;
- instance.dwType = DIDFT_PSHBUTTON | DIDFT_MAKEINSTANCE( dik );
- ret = try_enum_object( &impl->base, filter, flags, callback, index++, &instance, context );
- if (ret != DIENUM_CONTINUE) return DIENUM_STOP;
- }
-
- return DIENUM_CONTINUE;
+ return enum_objects( impl, filter, flags, callback, context );
}
static HRESULT keyboard_get_property( IDirectInputDevice8W *iface, DWORD property,
--
2.43.0

View File

@@ -1,6 +1,6 @@
From b2764b3d21a64c3c194b29b9cb71379456e03b06 Mon Sep 17 00:00:00 2001
From b9f850d5ba2d36ae39a2e88b31a687e2d9745c6e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Fri, 7 Jul 2023 12:44:26 +0200
Date: Fri, 23 Aug 2024 08:51:44 +0200
Subject: [PATCH] dinput: Avoid duplicated objects in keyboard devices.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55205
@@ -9,10 +9,10 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55205
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
index cbcbf94f0f6..3fd75bb10e6 100644
index d1fa242574e..d9c73cd7367 100644
--- a/dlls/dinput/keyboard.c
+++ b/dlls/dinput/keyboard.c
@@ -265,13 +265,15 @@ static HRESULT keyboard_enum_objects( IDirectInputDevice8W *iface, const DIPROPH
@@ -216,13 +216,15 @@ static HRESULT enum_objects( struct keyboard *impl, const DIPROPHEADER *filter,
.dwOfs = DIK_ESCAPE,
.dwType = DIDFT_PSHBUTTON | DIDFT_MAKEINSTANCE( DIK_ESCAPE ),
};
@@ -28,7 +28,7 @@ index cbcbf94f0f6..3fd75bb10e6 100644
+ mapped[dik] = TRUE;
instance.dwOfs = dik;
instance.dwType = DIDFT_PSHBUTTON | DIDFT_MAKEINSTANCE( dik );
ret = try_enum_object( &impl->base, filter, flags, callback, index++, &instance, context );
ret = enum_object( impl, filter, flags, callback, index++, &instance, data );
--
2.40.1
2.43.0

View File

@@ -1,6 +1,6 @@
From bdf952bf0711a7cf22fee840197234bd413ae611 Mon Sep 17 00:00:00 2001
From c133a17f33a7cce87df6a56c7e265b1553726134 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Fri, 7 Jul 2023 12:45:04 +0200
Date: Fri, 23 Aug 2024 08:52:34 +0200
Subject: [PATCH] dinput: Enumerate lower keyboard scancodes values first.
Windows usually doesn't have scancodes higher than 0x7f, or extended
@@ -16,18 +16,18 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55205
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
index 3fd75bb10e6..1f1db883b80 100644
index d9c73cd7367..407634967de 100644
--- a/dlls/dinput/keyboard.c
+++ b/dlls/dinput/keyboard.c
@@ -256,6 +256,7 @@ static BOOL try_enum_object( struct dinput_device *impl, const DIPROPHEADER *fil
static HRESULT keyboard_enum_objects( IDirectInputDevice8W *iface, const DIPROPHEADER *filter,
DWORD flags, enum_object_callback callback, void *context )
@@ -208,6 +208,7 @@ static BOOL enum_object( struct keyboard *impl, const DIPROPHEADER *filter, DWOR
static HRESULT enum_objects( struct keyboard *impl, const DIPROPHEADER *filter,
DWORD flags, enum_object_callback callback, void *data )
{
+ static const UINT vsc_base[] = {0, 0x100, 0x80, 0x180};
struct keyboard *impl = impl_from_IDirectInputDevice8W( iface );
BYTE subtype = GET_DIDEVICE_SUBTYPE( impl->base.instance.dwDevType );
DIDEVICEOBJECTINSTANCEW instance =
@@ -266,18 +267,21 @@ static HRESULT keyboard_enum_objects( IDirectInputDevice8W *iface, const DIPROPH
{
@@ -217,18 +218,21 @@ static HRESULT enum_objects( struct keyboard *impl, const DIPROPHEADER *filter,
.dwType = DIDFT_PSHBUTTON | DIDFT_MAKEINSTANCE( DIK_ESCAPE ),
};
BOOL ret, mapped[0x100] = {0};
@@ -43,7 +43,7 @@ index 3fd75bb10e6..1f1db883b80 100644
- mapped[dik] = TRUE;
- instance.dwOfs = dik;
- instance.dwType = DIDFT_PSHBUTTON | DIDFT_MAKEINSTANCE( dik );
- ret = try_enum_object( &impl->base, filter, flags, callback, index++, &instance, context );
- ret = enum_object( impl, filter, flags, callback, index++, &instance, data );
- if (ret != DIENUM_CONTINUE) return DIENUM_STOP;
+ for (vsc = vsc_base[i]; vsc < vsc_base[i] + 0x80; vsc++)
+ {
@@ -53,12 +53,12 @@ index 3fd75bb10e6..1f1db883b80 100644
+ mapped[dik] = TRUE;
+ instance.dwOfs = dik;
+ instance.dwType = DIDFT_PSHBUTTON | DIDFT_MAKEINSTANCE( dik );
+ ret = try_enum_object( &impl->base, filter, flags, callback, index++, &instance, context );
+ ret = enum_object( impl, filter, flags, callback, index++, &instance, data );
+ if (ret != DIENUM_CONTINUE) return DIENUM_STOP;
+ }
}
return DIENUM_CONTINUE;
--
2.40.1
2.43.0

View File

@@ -0,0 +1,125 @@
From e31146d5dd91ef05298ae98f7db4868e73011865 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 23 May 2024 14:25:57 +1000
Subject: [PATCH] dxgi: Semi-stub IDXGISwapChain::GetFrameStatistics.
Not completely correct but does allow improved framerates. Mileage will vary.
---
dlls/dxgi/swapchain.c | 89 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 85 insertions(+), 4 deletions(-)
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
index 4797fcecd8d..4111a488407 100644
--- a/dlls/dxgi/swapchain.c
+++ b/dlls/dxgi/swapchain.c
@@ -587,12 +587,66 @@ static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetContainingOutput(IDXGISwapCh
return dxgi_get_output_from_window(swapchain->factory, window, output);
}
+static int get_display_frequency(void)
+{
+ DEVMODEW mode;
+ BOOL ret;
+
+ memset(&mode, 0, sizeof(mode));
+ mode.dmSize = sizeof(mode);
+ ret = EnumDisplaySettingsExW(NULL, ENUM_CURRENT_SETTINGS, &mode, 0);
+ if (ret && mode.dmFields & DM_DISPLAYFREQUENCY && mode.dmDisplayFrequency)
+ {
+ return mode.dmDisplayFrequency;
+ }
+ else
+ {
+ WARN("Failed to query display frequency, returning a fallback value.\n");
+ return 60;
+ }
+}
+
+static LARGE_INTEGER get_perf_req(void)
+{
+ LARGE_INTEGER performance_frequency;
+
+ QueryPerformanceFrequency(&performance_frequency);
+ return performance_frequency;
+}
+
static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetFrameStatistics(IDXGISwapChain4 *iface,
DXGI_FRAME_STATISTICS *stats)
{
- FIXME("iface %p, stats %p stub!\n", iface, stats);
+ struct d3d11_swapchain *swapchain = d3d11_swapchain_from_IDXGISwapChain4(iface);
+ HRESULT hr = S_OK;
+ static BOOL once = 0;
+ const LARGE_INTEGER performance_frequency = get_perf_req();
+ int display_frequency = get_display_frequency();
- return E_NOTIMPL;
+ LARGE_INTEGER count;
+ TRACE("iface %p, stats %p Semi-stub\n", iface, stats);
+
+ if (!stats)
+ return E_INVALIDARG;
+
+ QueryPerformanceCounter(&count);
+
+ stats->PresentCount = swapchain->present_count;
+ stats->PresentRefreshCount = 0;
+ stats->SyncRefreshCount = 0;
+ stats->SyncQPCTime.QuadPart = count.QuadPart;
+ stats->SyncGPUTime.QuadPart = 0;
+
+ stats->PresentRefreshCount = performance_frequency.QuadPart / display_frequency;
+ stats->SyncRefreshCount = display_frequency;
+
+ if(!once)
+ {
+ once++;
+ hr = DXGI_ERROR_FRAME_STATISTICS_DISJOINT;
+ }
+
+ return hr;
}
static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetLastPresentCount(IDXGISwapChain4 *iface,
@@ -2704,9 +2758,36 @@ static HRESULT STDMETHODCALLTYPE d3d12_swapchain_GetContainingOutput(IDXGISwapCh
static HRESULT STDMETHODCALLTYPE d3d12_swapchain_GetFrameStatistics(IDXGISwapChain4 *iface,
DXGI_FRAME_STATISTICS *stats)
{
- FIXME("iface %p, stats %p stub!\n", iface, stats);
+ struct d3d12_swapchain *swapchain = d3d12_swapchain_from_IDXGISwapChain4(iface);
+ HRESULT hr = S_OK;
+ static BOOL once = 0;
+ const LARGE_INTEGER performance_frequency = get_perf_req();
+ int display_frequency = get_display_frequency();
- return E_NOTIMPL;
+ LARGE_INTEGER count;
+ TRACE("iface %p, stats %p Semi-stub\n", iface, stats);
+
+ if (!stats)
+ return E_INVALIDARG;
+
+ QueryPerformanceCounter(&count);
+
+ stats->PresentCount = swapchain->frame_number;
+ stats->PresentRefreshCount = 0;
+ stats->SyncRefreshCount = 0;
+ stats->SyncQPCTime.QuadPart = count.QuadPart;
+ stats->SyncGPUTime.QuadPart = 0;
+
+ stats->PresentRefreshCount = performance_frequency.QuadPart / display_frequency;
+ stats->SyncRefreshCount = display_frequency;
+
+ if(!once)
+ {
+ once++;
+ hr = DXGI_ERROR_FRAME_STATISTICS_DISJOINT;
+ }
+
+ return hr;
}
static HRESULT STDMETHODCALLTYPE d3d12_swapchain_GetLastPresentCount(IDXGISwapChain4 *iface,
--
2.43.0

View File

@@ -0,0 +1 @@
Fixes: [53696] d3d11: Semi-stub IDXGISwapChain::GetFrameStatistics.

View File

@@ -1,4 +1,4 @@
From d3262875b2ce7d2a6746f2139ca00e3d0f13fb33 Mon Sep 17 00:00:00 2001
From 6dbedd8d7aebe117b013c61f9549848f13619f0e 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().
@@ -7,15 +7,15 @@ We use ppoll() instead of poll() for the better time granularity.
Although perhaps we shouldn't since the server doesn't do this.
---
configure.ac | 8 ++++++++
include/config.h.in | 9 +++++++++
2 files changed, 17 insertions(+)
configure.ac | 8 ++++++++
include/config.h.in | 11 ++++++++++-
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 3be31e40cf6..0a2cdc0dfcd 100644
index 67775f9cd15..c03d4c3688b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -453,6 +453,7 @@ AC_CHECK_HEADERS(\
@@ -407,6 +407,7 @@ AC_CHECK_HEADERS(\
sys/cdio.h \
sys/epoll.h \
sys/event.h \
@@ -23,17 +23,17 @@ index 3be31e40cf6..0a2cdc0dfcd 100644
sys/extattr.h \
sys/filio.h \
sys/ipc.h \
@@ -2024,6 +2025,7 @@ AC_CHECK_FUNCS(\
@@ -2067,6 +2068,7 @@ AC_CHECK_FUNCS(\
port_create \
posix_fadvise \
posix_fallocate \
+ ppoll \
prctl \
proc_pidinfo \
sched_yield \
@@ -2049,6 +2051,12 @@ case $host_os in
;;
esac
renameat \
@@ -2087,6 +2089,12 @@ AC_SEARCH_LIBS(clock_gettime, rt,
test "$ac_res" = "none required" || AC_SUBST(RT_LIBS,"$ac_res")])
LIBS=$ac_save_LIBS
+ac_save_LIBS=$LIBS
+AC_SEARCH_LIBS(shm_open, rt,
@@ -45,30 +45,32 @@ index 3be31e40cf6..0a2cdc0dfcd 100644
AC_LINK_IFELSE([AC_LANG_PROGRAM(
[[#include <sched.h>]], [[sched_setaffinity(0, 0, 0);]])],[wine_cv_have_sched_setaffinity=yes],[wine_cv_have_sched_setaffinity=no]))
diff --git a/include/config.h.in b/include/config.h.in
index fe2fc36a914..8e8c57d711c 100644
index 1c3d4c4d62b..e9686e04a2a 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -309,6 +309,9 @@
/* Define to 1 if you have the `posix_fallocate' function. */
@@ -318,6 +318,9 @@
/* Define to 1 if you have the 'posix_fallocate' function. */
#undef HAVE_POSIX_FALLOCATE
+/* Define to 1 if you have the `ppoll' function. */
+#undef HAVE_PPOLL
+
/* Define to 1 if you have the `prctl' function. */
/* Define to 1 if you have the 'prctl' function. */
#undef HAVE_PRCTL
@@ -375,6 +378,9 @@
/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
@@ -375,7 +378,10 @@
/* Define to 1 if 'interface_id' is a member of 'sg_io_hdr_t'. */
#undef HAVE_SG_IO_HDR_T_INTERFACE_ID
-/* Define to 1 if 'si_fd' is a member of 'siginfo_t'. */
+/* Define to 1 if you have the `shm_open' function. */
+#undef HAVE_SHM_OPEN
+
/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
+/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
#undef HAVE_SIGINFO_T_SI_FD
@@ -510,6 +516,9 @@
/* Define to 1 if you have the 'sigprocmask' function. */
@@ -504,6 +510,9 @@
/* Define to 1 if you have the <sys/epoll.h> header file. */
#undef HAVE_SYS_EPOLL_H
@@ -79,5 +81,5 @@ index fe2fc36a914..8e8c57d711c 100644
#undef HAVE_SYS_EVENT_H
--
2.39.0
2.45.2

View File

@@ -1,4 +1,4 @@
From f0ff0cdc5472deafb8c75f3d0d6456ddb4164878 Mon Sep 17 00:00:00 2001
From 4865ed639a87ee06ffcf6a7a74b6c97ef448e7ab Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 12:34:42 -0500
Subject: [PATCH] ntdll: Implement NtWaitForMultipleObjects().
@@ -10,20 +10,20 @@ Subject: [PATCH] ntdll: Implement NtWaitForMultipleObjects().
3 files changed, 182 insertions(+)
diff --git a/dlls/ntdll/unix/esync.c b/dlls/ntdll/unix/esync.c
index e031e9cb94f..f383221194c 100644
index e031e9cb94f..85db837f16b 100644
--- a/dlls/ntdll/unix/esync.c
+++ b/dlls/ntdll/unix/esync.c
@@ -22,6 +22,10 @@
#pragma makedep unix
#endif
@@ -24,6 +24,10 @@
#include "config.h"
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
#include "config.h"
#include <assert.h>
#include <errno.h>
#include <fcntl.h>
@@ -34,6 +38,12 @@
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
@@ -221,10 +221,10 @@ index c63491dcaad..92b609ebd27 100644
/* We have to synchronize on the fd cache mutex so that our calls to receive_fd
* don't race with theirs. It looks weird, I know.
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
index 76da038649f..1c60cd11f77 100644
index dd938c95873..4361813e628 100644
--- a/dlls/ntdll/unix/sync.c
+++ b/dlls/ntdll/unix/sync.c
@@ -1524,6 +1524,13 @@ NTSTATUS WINAPI NtWaitForMultipleObjects( DWORD count, const HANDLE *handles, BO
@@ -1588,6 +1588,13 @@ NTSTATUS WINAPI NtWaitForMultipleObjects( DWORD count, const HANDLE *handles, BO
if (!count || count > MAXIMUM_WAIT_OBJECTS) return STATUS_INVALID_PARAMETER_1;

View File

@@ -0,0 +1,126 @@
From fed04f8ef69b829fa2cf3c7051160a6f822912dd Mon Sep 17 00:00:00 2001
From: Elizabeth Figura <zfigura@codeweavers.com>
Date: Mon, 12 Aug 2024 16:54:44 -0500
Subject: [PATCH] ntdll: Compile warning fixes for esync.
---
dlls/ntdll/unix/esync.c | 26 +++++++++++++-------------
dlls/ntdll/unix/esync.h | 4 ++--
2 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/dlls/ntdll/unix/esync.c b/dlls/ntdll/unix/esync.c
index f4748e405ef..86809b610c7 100644
--- a/dlls/ntdll/unix/esync.c
+++ b/dlls/ntdll/unix/esync.c
@@ -73,29 +73,29 @@ int do_esync(void)
struct esync
{
- enum esync_type type;
+ LONG type;
int fd;
void *shm;
};
struct semaphore
{
- int max;
- int count;
+ LONG max;
+ LONG count;
};
C_ASSERT(sizeof(struct semaphore) == 8);
struct mutex
{
- DWORD tid;
- int count; /* recursion count */
+ LONG tid;
+ LONG count; /* recursion count */
};
C_ASSERT(sizeof(struct mutex) == 8);
struct event
{
- int signaled;
- int locked;
+ LONG signaled;
+ LONG locked;
};
C_ASSERT(sizeof(struct event) == 8);
@@ -182,7 +182,7 @@ static struct esync *add_to_list( HANDLE handle, enum esync_type type, int fd, v
}
}
- if (!InterlockedCompareExchange( (int *)&esync_list[entry][idx].type, type, 0 ))
+ if (!InterlockedCompareExchange( &esync_list[entry][idx].type, type, 0 ))
{
esync_list[entry][idx].fd = fd;
esync_list[entry][idx].shm = shm;
@@ -206,7 +206,7 @@ static struct esync *get_cached_object( HANDLE handle )
* message queue, etc.) */
static NTSTATUS get_object( HANDLE handle, struct esync **obj )
{
- NTSTATUS ret = STATUS_SUCCESS;
+ int ret = STATUS_SUCCESS;
enum esync_type type = 0;
unsigned int shm_idx = 0;
obj_handle_t fd_handle;
@@ -274,7 +274,7 @@ NTSTATUS esync_close( HANDLE handle )
if (entry < ESYNC_LIST_ENTRIES && esync_list[entry])
{
- if (InterlockedExchange((int *)&esync_list[entry][idx].type, 0))
+ if (InterlockedExchange(&esync_list[entry][idx].type, 0))
{
close( esync_list[entry][idx].fd );
return STATUS_SUCCESS;
@@ -370,7 +370,7 @@ static NTSTATUS open_esync( enum esync_type type, HANDLE *handle,
}
extern NTSTATUS esync_create_semaphore(HANDLE *handle, ACCESS_MASK access,
- const OBJECT_ATTRIBUTES *attr, LONG initial, LONG max)
+ const OBJECT_ATTRIBUTES *attr, int initial, int max)
{
TRACE("name %s, initial %d, max %d.\n",
attr ? debugstr_us(attr->ObjectName) : "<no name>", initial, max);
@@ -386,7 +386,7 @@ NTSTATUS esync_open_semaphore( HANDLE *handle, ACCESS_MASK access,
return open_esync( ESYNC_SEMAPHORE, handle, access, attr );
}
-NTSTATUS esync_release_semaphore( HANDLE handle, ULONG count, ULONG *prev )
+NTSTATUS esync_release_semaphore( HANDLE handle, unsigned int count, ULONG *prev )
{
struct esync *obj;
struct semaphore *semaphore;
@@ -800,7 +800,7 @@ static BOOL update_grabbed_object( struct esync *obj )
/* A value of STATUS_NOT_IMPLEMENTED returned from this function means that we
* need to delegate to server_select(). */
-static NTSTATUS __esync_wait_objects( DWORD count, const HANDLE *handles, BOOLEAN wait_any,
+static NTSTATUS __esync_wait_objects( unsigned int count, const HANDLE *handles, BOOLEAN wait_any,
BOOLEAN alertable, const LARGE_INTEGER *timeout )
{
static const LARGE_INTEGER zero;
diff --git a/dlls/ntdll/unix/esync.h b/dlls/ntdll/unix/esync.h
index 59f8809fc1a..9102cf911aa 100644
--- a/dlls/ntdll/unix/esync.h
+++ b/dlls/ntdll/unix/esync.h
@@ -23,11 +23,11 @@ extern void esync_init(void);
extern NTSTATUS esync_close( HANDLE handle );
extern NTSTATUS esync_create_semaphore(HANDLE *handle, ACCESS_MASK access,
- const OBJECT_ATTRIBUTES *attr, LONG initial, LONG max);
+ const OBJECT_ATTRIBUTES *attr, int initial, int max);
extern NTSTATUS esync_open_semaphore( HANDLE *handle, ACCESS_MASK access,
const OBJECT_ATTRIBUTES *attr );
extern NTSTATUS esync_query_semaphore( HANDLE handle, void *info, ULONG *ret_len );
-extern NTSTATUS esync_release_semaphore( HANDLE handle, ULONG count, ULONG *prev );
+extern NTSTATUS esync_release_semaphore( HANDLE handle, unsigned int count, ULONG *prev );
extern NTSTATUS esync_create_event( HANDLE *handle, ACCESS_MASK access,
const OBJECT_ATTRIBUTES *attr, EVENT_TYPE type, BOOLEAN initial );
--
2.45.2

View File

@@ -1,4 +1,4 @@
From 8f9e309dc4b3e9c7328c86cc4993b9359f0e6839 Mon Sep 17 00:00:00 2001
From 4c246e61f0de05a8b80e7a5d5ff2edcd21036fec Mon Sep 17 00:00:00 2001
From: Paul Gofman <pgofman@codeweavers.com>
Date: Mon, 25 Nov 2019 12:19:20 +0300
Subject: [PATCH] ntdll: Force virtual memory allocation order.
@@ -16,10 +16,10 @@ Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46568
1 file changed, 164 insertions(+), 246 deletions(-)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index cd1655d41b2..c0537375ab8 100644
index 1a3d527f186..ec72d692c3a 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -1241,43 +1241,15 @@ static struct file_view *find_view_range( const void *addr, size_t size )
@@ -1269,43 +1269,15 @@ static struct file_view *find_view_range( const void *addr, size_t size )
}
@@ -71,7 +71,7 @@ index cd1655d41b2..c0537375ab8 100644
/***********************************************************************
* try_map_free_area
@@ -1312,112 +1284,6 @@ static void* try_map_free_area( void *base, void *end, ptrdiff_t step,
@@ -1338,112 +1310,6 @@ static void* try_map_free_area( void *base, void *end, ptrdiff_t step,
}
@@ -184,7 +184,7 @@ index cd1655d41b2..c0537375ab8 100644
/***********************************************************************
* remove_reserved_area
*
@@ -1527,8 +1393,7 @@ static void free_view( struct file_view *view )
@@ -1553,8 +1419,7 @@ static void free_view( struct file_view *view )
*/
static void unregister_view( struct file_view *view )
{
@@ -194,7 +194,7 @@ index cd1655d41b2..c0537375ab8 100644
wine_rb_remove( &views_tree, &view->entry );
}
@@ -1556,8 +1421,7 @@ static void delete_view( struct file_view *view ) /* [in] View */
@@ -1582,8 +1447,7 @@ static void delete_view( struct file_view *view ) /* [in] View */
static void register_view( struct file_view *view )
{
wine_rb_put( &views_tree, view->base, &view->entry );
@@ -204,7 +204,7 @@ index cd1655d41b2..c0537375ab8 100644
}
@@ -1830,89 +1694,176 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
@@ -1855,89 +1719,176 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
return ptr;
}
@@ -343,7 +343,7 @@ index cd1655d41b2..c0537375ab8 100644
+static void *alloc_free_area( char *limit_low, char *limit_high, size_t size, BOOL top_down, int unix_prot, UINT_PTR align_mask )
{
- void *ptr = NULL;
- struct reserved_area *area = LIST_ENTRY( ptr, struct reserved_area, entry );
- struct reserved_area *area;
+ struct range_entry *range, *ranges_start, *ranges_end;
+ char *reserve_start, *reserve_end;
+ struct alloc_area area;
@@ -442,7 +442,7 @@ index cd1655d41b2..c0537375ab8 100644
}
/***********************************************************************
@@ -2016,48 +1967,13 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
@@ -2041,48 +1992,13 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
}
else
{
@@ -495,7 +495,7 @@ index cd1655d41b2..c0537375ab8 100644
status = create_view( view_ret, ptr, size, vprot );
if (status != STATUS_SUCCESS) unmap_area( ptr, size );
return status;
@@ -3236,6 +3152,7 @@ static unsigned int virtual_map_section( HANDLE handle, PVOID *addr_ptr, ULONG_P
@@ -3275,6 +3191,7 @@ static unsigned int virtual_map_section( HANDLE handle, PVOID *addr_ptr, ULONG_P
done:
server_leave_uninterrupted_section( &virtual_mutex, &sigset );
if (needs_close) close( unix_handle );
@@ -503,7 +503,7 @@ index cd1655d41b2..c0537375ab8 100644
return res;
}
@@ -6143,6 +6060,7 @@ NTSTATUS WINAPI NtWow64AllocateVirtualMemory64( HANDLE process, ULONG64 *ret, UL
@@ -6394,6 +6311,7 @@ NTSTATUS WINAPI NtWow64AllocateVirtualMemory64( HANDLE process, ULONG64 *ret, UL
*ret = (ULONG_PTR)base;
*size_ptr = size;
}
@@ -512,5 +512,5 @@ index cd1655d41b2..c0537375ab8 100644
}
--
2.43.0
2.45.2

View File

@@ -1,14 +1,14 @@
From d13a3f4498ddc7f10a1d435edb5c59b71dca1efc Mon Sep 17 00:00:00 2001
From 844ba5e56a7231f65b65cabf06fe44ee49876aa0 Mon Sep 17 00:00:00 2001
From: Paul Gofman <pgofman@codeweavers.com>
Date: Fri, 1 Dec 2023 14:55:20 -0600
Subject: [PATCH] ntdll: Exclude natively mapped areas from free areas list.
---
dlls/ntdll/unix/virtual.c | 104 ++++++++++++++++++++++++++++++++++----
1 file changed, 95 insertions(+), 9 deletions(-)
dlls/ntdll/unix/virtual.c | 106 ++++++++++++++++++++++++++++++++++----
1 file changed, 97 insertions(+), 9 deletions(-)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index c0537375ab8..b4d7f6a580d 100644
index ec72d692c3a..30d43afc076 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -127,6 +127,7 @@ struct file_view
@@ -28,7 +28,7 @@ index c0537375ab8..b4d7f6a580d 100644
ULONG_PTR user_space_wow_limit = 0;
struct _KUSER_SHARED_DATA *user_shared_data = (void *)0x7ffe0000;
@@ -1129,7 +1132,9 @@ static void dump_view( struct file_view *view )
@@ -1157,7 +1160,9 @@ static void dump_view( struct file_view *view )
BYTE prot = get_page_vprot( addr );
TRACE( "View: %p - %p", addr, addr + view->size - 1 );
@@ -39,7 +39,7 @@ index c0537375ab8..b4d7f6a580d 100644
TRACE( " (builtin image)\n" );
else if (view->protect & VPROT_FREE_PLACEHOLDER)
TRACE( " (placeholder)\n" );
@@ -1249,6 +1254,8 @@ struct alloc_area
@@ -1277,6 +1282,8 @@ struct alloc_area
int unix_prot;
BOOL top_down;
UINT_PTR align_mask;
@@ -48,7 +48,7 @@ index c0537375ab8..b4d7f6a580d 100644
};
/***********************************************************************
@@ -1257,9 +1264,12 @@ struct alloc_area
@@ -1285,9 +1292,14 @@ struct alloc_area
* Try mmaping some expected free memory region, eventually stepping and
* retrying inside it, and return where it actually succeeded, or NULL.
*/
@@ -60,10 +60,12 @@ index c0537375ab8..b4d7f6a580d 100644
+ size_t abs_step = step > 0 ? step : -step;
+ size_t size = area->size;
+ int unix_prot = area->unix_prot;
void *ptr;
+ void *ptr;
+
while (start && base <= start && (char*)start + size <= (char*)end)
@@ -1272,12 +1282,19 @@ static void* try_map_free_area( void *base, void *end, ptrdiff_t step,
{
if (anon_mmap_tryfixed( start, size, unix_prot, 0 ) != MAP_FAILED) return start;
@@ -1298,12 +1310,19 @@ static void* try_map_free_area( void *base, void *end, ptrdiff_t step,
strerror(errno), start, (char *)start + size, unix_prot );
return NULL;
}
@@ -84,7 +86,7 @@ index c0537375ab8..b4d7f6a580d 100644
}
return NULL;
@@ -1702,11 +1719,11 @@ static void *try_map_free_area_range( struct alloc_area *area, char *start, char
@@ -1727,11 +1746,11 @@ static void *try_map_free_area_range( struct alloc_area *area, char *start, char
{
if (end - start < area->size) return NULL;
alloc_start = ROUND_ADDR( end - area->size, area->align_mask );
@@ -98,7 +100,7 @@ index c0537375ab8..b4d7f6a580d 100644
}
static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char *end )
@@ -1796,9 +1813,10 @@ static void *alloc_free_area( char *limit_low, char *limit_high, size_t size, BO
@@ -1821,9 +1840,10 @@ static void *alloc_free_area( char *limit_low, char *limit_high, size_t size, BO
struct range_entry *range, *ranges_start, *ranges_end;
char *reserve_start, *reserve_end;
struct alloc_area area;
@@ -110,7 +112,7 @@ index c0537375ab8..b4d7f6a580d 100644
TRACE("limit %p-%p, size %p, top_down %#x.\n", limit_low, limit_high, (void *)size, top_down);
@@ -1863,6 +1881,50 @@ static void *alloc_free_area( char *limit_low, char *limit_high, size_t size, BO
@@ -1888,6 +1908,50 @@ static void *alloc_free_area( char *limit_low, char *limit_high, size_t size, BO
if ((result = alloc_free_area_in_range( &area, base, end )))
break;
}
@@ -161,7 +163,7 @@ index c0537375ab8..b4d7f6a580d 100644
return result;
}
@@ -1922,6 +1984,17 @@ failed:
@@ -1947,6 +2011,17 @@ failed:
return status;
}
@@ -179,7 +181,7 @@ index c0537375ab8..b4d7f6a580d 100644
/***********************************************************************
* map_view
*
@@ -1972,7 +2045,15 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
@@ -1997,7 +2072,15 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
if (!align_mask) align_mask = granularity_mask;
if (!(ptr = alloc_free_area( (void *)limit_low, (void *)limit_high, size, top_down, get_unix_prot( vprot ), align_mask )))
@@ -196,7 +198,7 @@ index c0537375ab8..b4d7f6a580d 100644
}
status = create_view( view_ret, ptr, size, vprot );
if (status != STATUS_SUCCESS) unmap_area( ptr, size );
@@ -4287,7 +4368,12 @@ void virtual_set_force_exec( BOOL enable )
@@ -4346,7 +4429,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 */
@@ -211,5 +213,5 @@ index c0537375ab8..b4d7f6a580d 100644
mprotect_range( view->base, view->size, commit, 0 );
}
--
2.43.0
2.45.2

View File

@@ -1,4 +1,4 @@
From 7b59a735bf21a4db50669c360666191493767909 Mon Sep 17 00:00:00 2001
From ee26472916e2196456c0c59fb8ca04ee362f148a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Mon, 3 Apr 2017 05:30:27 +0200
Subject: [PATCH] ntdll: Implement HashLinks field in LDR module data.
@@ -9,7 +9,7 @@ Subject: [PATCH] ntdll: Implement HashLinks field in LDR module data.
2 files changed, 117 insertions(+)
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index 8f418ef09a9..30f089bd64f 100644
index 8b332e479e6..08cb3d3f8ce 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -28,6 +28,7 @@
@@ -20,7 +20,7 @@ index 8f418ef09a9..30f089bd64f 100644
#include "wine/test.h"
#include "delayloadhandler.h"
@@ -4205,6 +4206,79 @@ static void test_Wow64Transition(void)
@@ -4641,6 +4642,79 @@ static void test_Wow64Transition(void)
debugstr_wn(name->SectionFileName.Buffer, name->SectionFileName.Length / sizeof(WCHAR)));
}
@@ -100,7 +100,7 @@ index 8f418ef09a9..30f089bd64f 100644
START_TEST(loader)
{
int argc;
@@ -4286,6 +4360,7 @@ START_TEST(loader)
@@ -4723,6 +4797,7 @@ START_TEST(loader)
test_InMemoryOrderModuleList();
test_LoadPackagedLibrary();
test_wow64_redirection();
@@ -109,10 +109,10 @@ index 8f418ef09a9..30f089bd64f 100644
test_dll_file( "kernel32.dll" );
test_dll_file( "advapi32.dll" );
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 714d3f17ff0..415fcbb1aa6 100644
index 5f84ca7e23b..4da48a82d74 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -133,6 +133,9 @@ struct file_id
@@ -128,6 +128,9 @@ struct file_id
BYTE ObjectId[16];
};
@@ -122,7 +122,7 @@ index 714d3f17ff0..415fcbb1aa6 100644
/* internal representation of loaded modules */
typedef struct _wine_modref
{
@@ -548,6 +551,33 @@ static void call_ldr_notifications( ULONG reason, LDR_DATA_TABLE_ENTRY *module )
@@ -556,6 +559,33 @@ static void call_ldr_notifications( ULONG reason, LDR_DATA_TABLE_ENTRY *module )
}
}
@@ -156,7 +156,7 @@ index 714d3f17ff0..415fcbb1aa6 100644
/*************************************************************************
* get_modref
*
@@ -1528,7 +1558,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name
@@ -1557,7 +1587,12 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name
&wm->ldr.InLoadOrderLinks);
InsertTailList(&NtCurrentTeb()->Peb->LdrData->InMemoryOrderModuleList,
&wm->ldr.InMemoryOrderLinks);
@@ -169,7 +169,7 @@ index 714d3f17ff0..415fcbb1aa6 100644
if (!(nt->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NX_COMPAT))
{
@@ -2226,6 +2261,7 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name,
@@ -2253,6 +2288,7 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name,
/* the module has only be inserted in the load & memory order lists */
RemoveEntryList(&wm->ldr.InLoadOrderLinks);
RemoveEntryList(&wm->ldr.InMemoryOrderLinks);
@@ -177,7 +177,7 @@ index 714d3f17ff0..415fcbb1aa6 100644
/* FIXME: there are several more dangling references
* left. Including dlls loaded by this dll before the
@@ -3908,6 +3944,7 @@ static void free_modref( WINE_MODREF *wm )
@@ -3916,6 +3952,7 @@ static void free_modref( WINE_MODREF *wm )
RemoveEntryList(&wm->ldr.InLoadOrderLinks);
RemoveEntryList(&wm->ldr.InMemoryOrderLinks);
@@ -185,7 +185,7 @@ index 714d3f17ff0..415fcbb1aa6 100644
if (wm->ldr.InInitializationOrderLinks.Flink)
RemoveEntryList(&wm->ldr.InInitializationOrderLinks);
@@ -4263,6 +4300,7 @@ void loader_init( CONTEXT *context, void **entry )
@@ -4336,6 +4373,7 @@ void loader_init( CONTEXT *context, void **entry )
ANSI_STRING ctrl_routine = RTL_CONSTANT_STRING( "CtrlRoutine" );
WINE_MODREF *kernel32;
PEB *peb = NtCurrentTeb()->Peb;
@@ -193,9 +193,9 @@ index 714d3f17ff0..415fcbb1aa6 100644
peb->LdrData = &ldr;
peb->FastPebLock = &peb_lock;
@@ -4278,6 +4316,10 @@ void loader_init( CONTEXT *context, void **entry )
RtlSetBits( peb->TlsBitmap, 0, NtCurrentTeb()->WowTebOffset ? WOW64_TLS_MAX_NUMBER : 1 );
RtlSetBits( peb->TlsBitmap, NTDLL_TLS_ERRNO, 1 );
@@ -4354,6 +4392,10 @@ void loader_init( CONTEXT *context, void **entry )
if (!(tls_dirs = RtlAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY, tls_module_count * sizeof(*tls_dirs) )))
NtTerminateProcess( GetCurrentProcess(), STATUS_NO_MEMORY );
+ /* initialize hash table */
+ for (i = 0; i < HASH_MAP_SIZE; i++)
@@ -205,5 +205,5 @@ index 714d3f17ff0..415fcbb1aa6 100644
load_global_options();
version_init();
--
2.43.0
2.45.2

View File

@@ -1,4 +1,4 @@
From 4bc218280bf7e0d697b2386ea2f71d5562bc8867 Mon Sep 17 00:00:00 2001
From bdbc1c90697424373a5248cf6c2bda589785bd37 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 creating reparse points.
@@ -13,12 +13,12 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
5 files changed, 451 insertions(+), 19 deletions(-)
diff --git a/configure.ac b/configure.ac
index 89bc831bb94..0138b5d3b9a 100644
index d380c66ff40..4314be5553c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2087,6 +2087,8 @@ AC_CHECK_FUNCS(\
@@ -2078,6 +2078,8 @@ AC_CHECK_FUNCS(\
posix_fallocate \
prctl \
proc_pidinfo \
sched_yield \
+ renameat \
+ renameat2 \
@@ -26,7 +26,7 @@ index 89bc831bb94..0138b5d3b9a 100644
setprogname \
sigprocmask \
diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in
index e17e3f72b92..66cdf11423c 100644
index 37bd6c86e31..f9a15d28ed2 100644
--- a/dlls/ntdll/Makefile.in
+++ b/dlls/ntdll/Makefile.in
@@ -4,7 +4,7 @@ UNIXLIB = ntdll.so
@@ -231,7 +231,7 @@ index 7d3618a3804..148b6058cee 100644
+ test_mailslot_name();
}
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index b8fb4f19e13..c52377264fe 100644
index ca95dd347eb..ac4de149455 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -36,6 +36,8 @@
@@ -389,7 +389,7 @@ index b8fb4f19e13..c52377264fe 100644
static BOOL fd_is_mount_point( int fd, const struct stat *st )
{
struct stat parent;
@@ -3420,6 +3540,181 @@ done:
@@ -3418,6 +3538,181 @@ done:
}
@@ -571,7 +571,7 @@ index b8fb4f19e13..c52377264fe 100644
/******************************************************************************
* lookup_unix_name
*
@@ -6266,6 +6561,13 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap
@@ -6249,6 +6544,13 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap
break;
}
@@ -602,5 +602,5 @@ index 980235abdc9..90248b4897c 100644
{
UCHAR DataBuffer[1];
--
2.43.0
2.45.2

View File

@@ -1,4 +1,4 @@
From 5306b83f69d37bf99110fc1b662fccc89552be3d Mon Sep 17 00:00:00 2001
From c2236d2048faf1e01da3130fdb81688da6829d4a Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 16 Jan 2014 21:02:11 -0700
Subject: [PATCH] server: Implement FILE_OPEN_REPARSE_POINT option.
@@ -10,10 +10,10 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
2 files changed, 142 insertions(+), 7 deletions(-)
diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c
index e1ba92a6448..04cb6760872 100644
index 1f13511fa7b..1c41e0011f3 100644
--- a/dlls/kernelbase/file.c
+++ b/dlls/kernelbase/file.c
@@ -732,6 +732,8 @@ static UINT get_nt_file_options( DWORD attributes )
@@ -769,6 +769,8 @@ static UINT get_nt_file_options( DWORD attributes )
options |= FILE_SEQUENTIAL_ONLY;
if (attributes & FILE_FLAG_WRITE_THROUGH)
options |= FILE_WRITE_THROUGH;
@@ -23,18 +23,18 @@ index e1ba92a6448..04cb6760872 100644
}
diff --git a/server/fd.c b/server/fd.c
index 8576882aaa9..0d5964b2427 100644
index 04688c5eb0d..94b8bd088ed 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -31,6 +31,7 @@
#include <stdio.h>
@@ -32,6 +32,7 @@
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
+#include <libgen.h>
#include <poll.h>
#ifdef HAVE_LINUX_MAJOR_H
#include <linux/major.h>
@@ -101,6 +102,10 @@
@@ -99,6 +100,10 @@
#include "winioctl.h"
#include "ddk/wdm.h"
@@ -45,7 +45,7 @@ index 8576882aaa9..0d5964b2427 100644
#if defined(HAVE_SYS_EPOLL_H) && defined(HAVE_EPOLL_CREATE)
# include <sys/epoll.h>
# define USE_EPOLL
@@ -1066,6 +1071,9 @@ static void device_destroy( struct object *obj )
@@ -1064,6 +1069,9 @@ static void device_destroy( struct object *obj )
list_remove( &device->entry ); /* remove it from the hash table */
}
@@ -55,7 +55,7 @@ index 8576882aaa9..0d5964b2427 100644
/****************************************************************/
/* inode functions */
@@ -1073,10 +1081,29 @@ static void unlink_closed_fd( struct inode *inode, struct closed_fd *fd )
@@ -1071,10 +1079,29 @@ static void unlink_closed_fd( struct inode *inode, struct closed_fd *fd )
{
/* make sure it is still the same file */
struct stat st;
@@ -86,7 +86,7 @@ index 8576882aaa9..0d5964b2427 100644
}
}
@@ -1115,6 +1142,59 @@ static void inode_dump( struct object *obj, int verbose )
@@ -1113,6 +1140,59 @@ static void inode_dump( struct object *obj, int verbose )
fprintf( stderr, "\n" );
}
@@ -146,7 +146,7 @@ index 8576882aaa9..0d5964b2427 100644
static void inode_destroy( struct object *obj )
{
struct inode *inode = (struct inode *)obj;
@@ -1870,6 +1950,38 @@ void get_nt_name( struct fd *fd, struct unicode_str *name )
@@ -1861,6 +1941,38 @@ void get_nt_name( struct fd *fd, struct unicode_str *name )
name->len = fd->nt_namelen;
}
@@ -185,7 +185,7 @@ index 8576882aaa9..0d5964b2427 100644
/* open() wrapper that returns a struct fd with no fd user set */
struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_name,
int flags, mode_t *mode, unsigned int access,
@@ -1930,6 +2042,15 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam
@@ -1921,6 +2033,15 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam
}
else rw_mode = O_RDONLY;
@@ -201,7 +201,7 @@ index 8576882aaa9..0d5964b2427 100644
if ((fd->unix_fd = open( name, rw_mode | (flags & ~O_TRUNC), *mode )) == -1)
{
/* if we tried to open a directory for write access, retry read-only */
@@ -1954,7 +2075,7 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam
@@ -1945,7 +2066,7 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam
fd->unix_name = NULL;
if ((path = dup_fd_name( root, name )))
{
@@ -210,7 +210,7 @@ index 8576882aaa9..0d5964b2427 100644
free( path );
}
@@ -1965,10 +2086,11 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam
@@ -1956,10 +2077,11 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam
*mode = st.st_mode;
/* only bother with an inode for normal files and directories */
@@ -223,7 +223,7 @@ index 8576882aaa9..0d5964b2427 100644
if (!inode)
{
@@ -1983,13 +2105,17 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam
@@ -1974,13 +2096,17 @@ struct fd *open_fd( struct fd *root, const char *name, struct unicode_str nt_nam
list_add_head( &inode->open, &fd->inode_entry );
closed_fd = NULL;
@@ -243,7 +243,7 @@ index 8576882aaa9..0d5964b2427 100644
{
set_error( STATUS_FILE_IS_A_DIRECTORY );
goto error;
@@ -2436,6 +2562,7 @@ static struct fd *get_handle_fd_obj( struct process *process, obj_handle_t handl
@@ -2427,6 +2553,7 @@ static struct fd *get_handle_fd_obj( struct process *process, obj_handle_t handl
static int is_dir_empty( int fd )
{
@@ -251,7 +251,7 @@ index 8576882aaa9..0d5964b2427 100644
DIR *dir;
int empty;
struct dirent *de;
@@ -2443,8 +2570,13 @@ static int is_dir_empty( int fd )
@@ -2434,8 +2561,13 @@ static int is_dir_empty( int fd )
if ((fd = dup( fd )) == -1)
return -1;
@@ -266,7 +266,7 @@ index 8576882aaa9..0d5964b2427 100644
close( fd );
return -1;
}
@@ -2456,6 +2588,7 @@ static int is_dir_empty( int fd )
@@ -2447,6 +2579,7 @@ static int is_dir_empty( int fd )
empty = 0;
}
closedir( dir );
@@ -274,7 +274,7 @@ index 8576882aaa9..0d5964b2427 100644
return empty;
}
@@ -2494,7 +2627,7 @@ static void set_fd_disposition( struct fd *fd, unsigned int flags )
@@ -2485,7 +2618,7 @@ static void set_fd_disposition( struct fd *fd, unsigned int flags )
file_set_error();
return;
}
@@ -284,5 +284,5 @@ index 8576882aaa9..0d5964b2427 100644
if (!(flags & FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE) &&
!(st.st_mode & (S_IWUSR | S_IWGRP | S_IWOTH)))
--
2.43.0
2.45.2

Some files were not shown because too many files have changed in this diff Show More