Compare commits

...

31 Commits

Author SHA1 Message Date
Elizabeth Figura
317665ee20 Rebase against e3c9d3ac76b223073253667e2447e1cbc407ac97. 2025-09-11 17:44:08 -05:00
Alistair Leslie-Hughes
3d1b6a4bc0 Added msxml3_encode_gb2312 patchset 2025-09-11 09:48:29 +10:00
Alistair Leslie-Hughes
e33772ec34 Rebase against 92e6124a9855b1c398b2822c2679df4ec3e38b83. 2025-09-11 08:23:25 +10:00
Alistair Leslie-Hughes
342cfbc5de Updated vkd3d-latest patchset 2025-09-11 07:01:32 +10:00
Alistair Leslie-Hughes
91b4afcd38 Rebase against c20abdb856139f156ceab0afbb8454e0ad79f0a4. 2025-09-10 07:47:02 +10:00
Alistair Leslie-Hughes
5f55fc20dc Updated winedevice-Default_Drivers patchset
Corrected setting subsystem.
Updated Makefile to include .spec file.
2025-09-09 18:40:22 +10:00
Alistair Leslie-Hughes
3714d05e91 Updated odbc32-fixes patchset 2025-09-08 09:54:01 +10:00
Alistair Leslie-Hughes
39778538c2 Added d3dx9_animation_TrackDesc patchset 2025-09-07 07:47:55 +10:00
Elizabeth Figura
0c15cda214 Rebase against e6df334f178a9b0058fdee0326c5901082efd0d2. 2025-09-06 16:20:19 -05:00
Alistair Leslie-Hughes
858b0697d2 Updated vkd3d-latest patchset 2025-09-03 08:10:33 +10:00
Alistair Leslie-Hughes
0394bb10be Rebase against a3385359f06e291a46364381b2a4ddea81d7cc45. 2025-09-02 07:45:17 +10:00
Alistair Leslie-Hughes
e004127f41 Release v10.14 2025-08-30 10:40:08 +10:00
Alistair Leslie-Hughes
5cba568c93 Updated vkd3d-latest patchset 2025-08-30 10:30:19 +10:00
Elizabeth Figura
e2610f8a45 Rebase against 5fd9826b8cdcb9130b0bf6943a2a5cd7c7499370. 2025-08-28 16:19:59 -05:00
Alistair Leslie-Hughes
e250393ba4 Rebase against 4a7d6576f0a8507097e3894a579061b568db6ac6. 2025-08-28 07:33:47 +10:00
Alistair Leslie-Hughes
ce66dea197 Rebase against 7dcdd7a6549793e8a6469816a5c25226e2d73e9c. 2025-08-24 09:05:15 +10:00
Alistair Leslie-Hughes
7cd95e9f79 Updated vkd3d-latest patchset
Squashed.

Updated to vkd3d 1.17+
2025-08-22 08:09:57 +10:00
Alistair Leslie-Hughes
c605cf204a Rebase against 288a40d05c8cddf62d0b12524a90d2d4f5ce114d. 2025-08-20 07:53:40 +10:00
Alistair Leslie-Hughes
a8f798fc3c Rebase against 2e4974af42a96dfcd426be5e40faecd9853401d1. 2025-08-19 07:45:52 +10:00
Alistair Leslie-Hughes
a8a6d7b0ed Release v10.13 2025-08-16 13:28:15 +10:00
Alistair Leslie-Hughes
f09ef9a3ca Added oleaut32_typelib_dispatch patchset 2025-08-16 13:27:01 +10:00
Alistair Leslie-Hughes
a877872a9a Updated vkd3d-latest patchset 2025-08-15 08:07:30 +10:00
Alistair Leslie-Hughes
e2390e2637 Updated vkd3d-latest patchset 2025-08-07 07:20:57 +10:00
Alistair Leslie-Hughes
999c6a11d6 Updated vkd3d-latest patchset 2025-08-01 07:19:16 +10:00
Alistair Leslie-Hughes
dde6218e4e Updated vkd3d-latest patchset 2025-07-30 08:46:43 +10:00
Alistair Leslie-Hughes
6336965159 Updated vkd3d-latest patchset 2025-07-24 07:31:47 +10:00
Alistair Leslie-Hughes
18084e82a7 Updated oleaut32-default-pic-size definition 2025-07-22 07:38:47 +10:00
Elizabeth Figura
89d2f58ebd Rebase against 7c7b3e43047a26789f1cbd5b3a04a37a3d08e2bd. 2025-07-21 16:35:21 -05:00
Elizabeth Figura
1db546cd7e Rebase against e44737278a4487cb8a75f81cedbe7393c5f716cc. 2025-07-18 18:05:19 -05:00
Elizabeth Figura
5e73b4fe8b Rebase against 182e2887b7c01d464f296bd7aa1335f147d8e514. 2025-07-18 17:50:06 -05:00
Alistair Leslie-Hughes
54295e8aaa Rebase against e1af2ae201c9853133ef3af1dafe15fe992fed92. 2025-07-16 12:47:09 +10:00
77 changed files with 10004 additions and 24349 deletions

View File

@@ -1,4 +1,4 @@
From 3dc4a148d7c91afea8f589f47daca82c5c27b7c1 Mon Sep 17 00:00:00 2001
From efd5485d5026fceb01c7a25bb47a780505adea68 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
@@ -9,7 +9,7 @@ Subject: [PATCH] ntdll: Print a warning message specifying the wine-staging
1 file changed, 19 insertions(+)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 74eb1b7f500..95639558155 100644
index c20d6a5d87b..717f321bc6e 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 74eb1b7f500..95639558155 100644
#ifdef _WIN64
#define DEFAULT_SECURITY_COOKIE_64 (((ULONGLONG)0x00002b99 << 32) | 0x2ddfa232)
@@ -3870,6 +3871,7 @@ void WINAPI LdrShutdownProcess(void)
@@ -3879,6 +3880,7 @@ void WINAPI LdrShutdownProcess(void)
process_detach();
}
@@ -28,7 +28,7 @@ index 74eb1b7f500..95639558155 100644
/******************************************************************
* RtlExitUserProcess (NTDLL.@)
@@ -4366,6 +4368,9 @@ static void release_address_space(void)
@@ -4388,6 +4390,9 @@ static void release_address_space(void)
*/
void loader_init( CONTEXT *context, void **entry )
{
@@ -38,9 +38,9 @@ index 74eb1b7f500..95639558155 100644
static int attach_done;
NTSTATUS status;
ULONG_PTR cookie, port = 0;
@@ -4455,6 +4460,20 @@ void loader_init( CONTEXT *context, void **entry )
arm64ec_thread_init();
#endif
@@ -4485,6 +4490,20 @@ void loader_init( CONTEXT *context, void **entry )
}
wm = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress );
+ /* This hunk occasionally applies in the wrong place;
+ * add a comment here to try to prevent that. */
@@ -60,5 +60,5 @@ index 74eb1b7f500..95639558155 100644
NtCurrentTeb()->FlsSlots = fls_alloc_data();
--
2.47.2
2.51.0

View File

@@ -1,245 +0,0 @@
From 0fbce9fe4b69f27b7df82c6517c364aab57de63b Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Fri, 30 Jul 2021 15:57:29 +1000
Subject: [PATCH 1/2] d3dx11_43: Implement D3DX11GetImageInfoFromMemory
Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=50210
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/d3dx11_42/Makefile.in | 1 +
dlls/d3dx11_43/Makefile.in | 1 +
dlls/d3dx11_43/main.c | 9 --
dlls/d3dx11_43/texture.c | 167 +++++++++++++++++++++++++++++++++++++
4 files changed, 169 insertions(+), 9 deletions(-)
diff --git a/dlls/d3dx11_42/Makefile.in b/dlls/d3dx11_42/Makefile.in
index 7fcce18a8e1..78ca5f707a7 100644
--- a/dlls/d3dx11_42/Makefile.in
+++ b/dlls/d3dx11_42/Makefile.in
@@ -2,6 +2,7 @@ EXTRADEFS = -DD3DX11_SDK_VERSION=42
MODULE = d3dx11_42.dll
IMPORTLIB = d3dx11_42
IMPORTS = d3dcompiler
+DELAYIMPORTS = windowscodecs
PARENTSRC = ../d3dx11_43
EXTRADLLFLAGS = -Wb,--prefer-native
diff --git a/dlls/d3dx11_43/Makefile.in b/dlls/d3dx11_43/Makefile.in
index ccd4319ace2..6854c73ebcb 100644
--- a/dlls/d3dx11_43/Makefile.in
+++ b/dlls/d3dx11_43/Makefile.in
@@ -2,6 +2,7 @@ EXTRADEFS = -DD3DX11_SDK_VERSION=43
MODULE = d3dx11_43.dll
IMPORTLIB = d3dx11
IMPORTS = d3dcompiler
+DELAYIMPORTS = windowscodecs
EXTRADLLFLAGS = -Wb,--prefer-native
diff --git a/dlls/d3dx11_43/main.c b/dlls/d3dx11_43/main.c
index 5dad027864f..00c1db35e42 100644
--- a/dlls/d3dx11_43/main.c
+++ b/dlls/d3dx11_43/main.c
@@ -66,12 +66,3 @@ HRESULT WINAPI D3DX11GetImageInfoFromFileW(const WCHAR *filename, ID3DX11ThreadP
return E_NOTIMPL;
}
-
-HRESULT WINAPI D3DX11GetImageInfoFromMemory(const void *src_data, SIZE_T src_data_size, ID3DX11ThreadPump *pump,
- D3DX11_IMAGE_INFO *img_info, HRESULT *hresult)
-{
- FIXME("src_data %p, src_data_size %Iu, pump %p, img_info %p, hresult %p stub!\n",
- src_data, src_data_size, pump, img_info, hresult);
-
- return E_NOTIMPL;
-}
diff --git a/dlls/d3dx11_43/texture.c b/dlls/d3dx11_43/texture.c
index 81ac8ee6db7..bbf937cdab0 100644
--- a/dlls/d3dx11_43/texture.c
+++ b/dlls/d3dx11_43/texture.c
@@ -15,14 +15,181 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define COBJMACROS
#include "d3dx11.h"
#include "d3dcompiler.h"
+#include "wincodec.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
+HRESULT WINAPI WICCreateImagingFactory_Proxy(UINT sdk_version, IWICImagingFactory **imaging_factory);
+
+static const struct
+{
+ const GUID *wic_container_guid;
+ D3DX11_IMAGE_FILE_FORMAT d3dx_file_format;
+}
+file_formats[] =
+{
+ { &GUID_ContainerFormatBmp, D3DX11_IFF_BMP },
+ { &GUID_ContainerFormatJpeg, D3DX11_IFF_JPG },
+ { &GUID_ContainerFormatPng, D3DX11_IFF_PNG },
+ { &GUID_ContainerFormatDds, D3DX11_IFF_DDS },
+ { &GUID_ContainerFormatTiff, D3DX11_IFF_TIFF },
+ { &GUID_ContainerFormatGif, D3DX11_IFF_GIF },
+ { &GUID_ContainerFormatWmp, D3DX11_IFF_WMP },
+};
+
+static D3DX11_IMAGE_FILE_FORMAT wic_container_guid_to_file_format(GUID *container_format)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(file_formats); ++i)
+ {
+ if (IsEqualGUID(file_formats[i].wic_container_guid, container_format))
+ return file_formats[i].d3dx_file_format;
+ }
+ return D3DX11_IFF_FORCE_DWORD;
+}
+
+static D3D11_RESOURCE_DIMENSION wic_dimension_to_d3dx11_dimension(WICDdsDimension wic_dimension)
+{
+ switch (wic_dimension)
+ {
+ case WICDdsTexture1D:
+ return D3D11_RESOURCE_DIMENSION_TEXTURE1D;
+ case WICDdsTexture2D:
+ case WICDdsTextureCube:
+ return D3D11_RESOURCE_DIMENSION_TEXTURE2D;
+ case WICDdsTexture3D:
+ return D3D11_RESOURCE_DIMENSION_TEXTURE3D;
+ default:
+ return D3D11_RESOURCE_DIMENSION_UNKNOWN;
+ }
+}
+
+static const DXGI_FORMAT to_be_converted_format[] =
+{
+ DXGI_FORMAT_UNKNOWN,
+ DXGI_FORMAT_R8_UNORM,
+ DXGI_FORMAT_R8G8_UNORM,
+ DXGI_FORMAT_B5G6R5_UNORM,
+ DXGI_FORMAT_B4G4R4A4_UNORM,
+ DXGI_FORMAT_B5G5R5A1_UNORM,
+ DXGI_FORMAT_B8G8R8X8_UNORM,
+ DXGI_FORMAT_B8G8R8A8_UNORM
+};
+
+static DXGI_FORMAT get_d3dx11_dds_format(DXGI_FORMAT format)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(to_be_converted_format); ++i)
+ {
+ if (format == to_be_converted_format[i])
+ return DXGI_FORMAT_R8G8B8A8_UNORM;
+ }
+ return format;
+}
+
+HRESULT WINAPI D3DX11GetImageInfoFromMemory(const void *src_data, SIZE_T src_data_size, ID3DX11ThreadPump *pump,
+ D3DX11_IMAGE_INFO *img_info, HRESULT *hresult)
+{
+ IWICImagingFactory *factory = NULL;
+ IWICDdsDecoder *dds_decoder = NULL;
+ IWICBitmapDecoder *decoder = NULL;
+ WICDdsParameters dds_params;
+ IWICStream *stream = NULL;
+ GUID container_format;
+ HRESULT hr;
+
+ TRACE("src_data %p, src_data_size %Iu, pump %p, img_info %p, hresult %p.\n",
+ src_data, src_data_size, pump, img_info, hresult);
+
+ if (!src_data || !src_data_size || !img_info)
+ return E_FAIL;
+ if (pump)
+ FIXME("Thread pump is not supported yet.\n");
+
+ WICCreateImagingFactory_Proxy(WINCODEC_SDK_VERSION, &factory);
+ IWICImagingFactory_CreateStream(factory, &stream);
+ hr = IWICStream_InitializeFromMemory(stream, (BYTE *)src_data, src_data_size);
+ if (FAILED(hr))
+ {
+ WARN("Failed to initialize stream.\n");
+ goto end;
+ }
+ hr = IWICImagingFactory_CreateDecoderFromStream(factory, (IStream *)stream, NULL, 0, &decoder);
+ if (FAILED(hr))
+ goto end;
+
+ hr = IWICBitmapDecoder_GetContainerFormat(decoder, &container_format);
+ if (FAILED(hr))
+ goto end;
+ img_info->ImageFileFormat = wic_container_guid_to_file_format(&container_format);
+ if (img_info->ImageFileFormat == D3DX11_IFF_FORCE_DWORD)
+ {
+ hr = E_FAIL;
+ WARN("Unsupported image file format %s.\n", debugstr_guid(&container_format));
+ goto end;
+ }
+
+ if (img_info->ImageFileFormat == D3DX11_IFF_DDS)
+ {
+ hr = IWICBitmapDecoder_QueryInterface(decoder, &IID_IWICDdsDecoder, (void **)&dds_decoder);
+ if (FAILED(hr))
+ goto end;
+ hr = IWICDdsDecoder_GetParameters(dds_decoder, &dds_params);
+ if (FAILED(hr))
+ goto end;
+ img_info->Width = dds_params.Width;
+ img_info->Height = dds_params.Height;
+ img_info->ArraySize = dds_params.ArraySize;
+ img_info->Depth = dds_params.Depth;
+ img_info->MipLevels = dds_params.MipLevels;
+ img_info->ResourceDimension = wic_dimension_to_d3dx11_dimension(dds_params.Dimension);
+ img_info->Format = get_d3dx11_dds_format(dds_params.DxgiFormat);
+ img_info->MiscFlags = 0;
+ if (dds_params.Dimension == WICDdsTextureCube)
+ {
+ img_info->MiscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE;
+ img_info->ArraySize *= 6;
+ }
+ }
+ else
+ {
+ FIXME("Unsupported image format %d\n", img_info->ImageFileFormat);
+ img_info->Width = 1;
+ img_info->Height = 1;
+ img_info->ArraySize = 1;
+ img_info->Depth = 1;
+ img_info->MipLevels = 1;
+ img_info->ResourceDimension = D3D11_RESOURCE_DIMENSION_TEXTURE2D;
+ img_info->Format = DXGI_FORMAT_R8G8B8A8_UNORM;
+ img_info->MiscFlags = 0;
+ }
+
+end:
+ if (dds_decoder)
+ IWICDdsDecoder_Release(dds_decoder);
+ if (decoder)
+ IWICBitmapDecoder_Release(decoder);
+ if (stream)
+ IWICStream_Release(stream);
+ if (factory)
+ IWICImagingFactory_Release(factory);
+
+ if (hr != S_OK)
+ {
+ WARN("Invalid or unsupported image file.\n");
+ return E_FAIL;
+ }
+ return S_OK;
+}
+
HRESULT WINAPI D3DX11CreateShaderResourceViewFromMemory(ID3D11Device *device, const void *data,
SIZE_T data_size, D3DX11_IMAGE_LOAD_INFO *load_info, ID3DX11ThreadPump *pump,
ID3D11ShaderResourceView **view, HRESULT *hresult)
--
2.40.1

View File

@@ -1,56 +0,0 @@
From 30d677139afe2af3f72c68ba11f1bbaead6f1c11 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 2 Aug 2023 08:24:11 +1000
Subject: [PATCH] d3dx11_43: D3DX11GetImageInfoFromMemory - Only use frame for
non DDS images
---
dlls/d3dx11_43/texture.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/dlls/d3dx11_43/texture.c b/dlls/d3dx11_43/texture.c
index 10dedf30c0f..f3f7d350131 100644
--- a/dlls/d3dx11_43/texture.c
+++ b/dlls/d3dx11_43/texture.c
@@ -295,6 +295,7 @@ static const GUID *dxgi_format_to_wic_guid(DXGI_FORMAT format)
HRESULT WINAPI D3DX11GetImageInfoFromMemory(const void *src_data, SIZE_T src_data_size, ID3DX11ThreadPump *pump,
D3DX11_IMAGE_INFO *img_info, HRESULT *hresult)
{
+ IWICBitmapFrameDecode *frame = NULL;
IWICImagingFactory *factory = NULL;
IWICDdsDecoder *dds_decoder = NULL;
IWICBitmapDecoder *decoder = NULL;
@@ -358,9 +359,18 @@ HRESULT WINAPI D3DX11GetImageInfoFromMemory(const void *src_data, SIZE_T src_dat
}
else
{
- FIXME("Unsupported image format %d\n", img_info->ImageFileFormat);
- img_info->Width = 1;
- img_info->Height = 1;
+ unsigned int frame_count;
+
+ hr = IWICBitmapDecoder_GetFrameCount(decoder, &frame_count);
+ if (FAILED(hr) || !frame_count)
+ goto end;
+ hr = IWICBitmapDecoder_GetFrame(decoder, 0, &frame);
+ if (FAILED(hr))
+ goto end;
+ hr = IWICBitmapFrameDecode_GetSize(frame, &img_info->Width, &img_info->Height);
+ if (FAILED(hr))
+ goto end;
+
img_info->ArraySize = 1;
img_info->Depth = 1;
img_info->MipLevels = 1;
@@ -372,6 +382,8 @@ HRESULT WINAPI D3DX11GetImageInfoFromMemory(const void *src_data, SIZE_T src_dat
end:
if (dds_decoder)
IWICDdsDecoder_Release(dds_decoder);
+ if (frame)
+ IWICBitmapFrameDecode_Release(frame);
if (decoder)
IWICBitmapDecoder_Release(decoder);
if (stream)
--
2.40.1

View File

@@ -1,4 +1,3 @@
Fixes: [50210] - Implement D3DX11GetImageInfoFromMemory
Fixes: [45533] - Implement D3DX11CreateTextureFromMemory
# This patchset will need to wait until the new wined3dx dll implemented.
Disabled: true

View File

@@ -0,0 +1,93 @@
From 78fcd523dff585ce007405bd75d459aa2c4fb13a Mon Sep 17 00:00:00 2001
From: Connor McAdams <cmcadams@codeweavers.com>
Date: Wed, 3 Sep 2025 13:04:51 -0400
Subject: [PATCH] d3dx9: Implement
ID3DXAnimationController::RegisterAnimationSet().
Signed-off-by: Connor McAdams <cmcadams@codeweavers.com>
---
dlls/d3dx9_36/animation.c | 34 ++++++++++++++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/dlls/d3dx9_36/animation.c b/dlls/d3dx9_36/animation.c
index 8a38c05ed0c..1bb775bc44a 100644
--- a/dlls/d3dx9_36/animation.c
+++ b/dlls/d3dx9_36/animation.c
@@ -29,8 +29,13 @@ struct d3dx9_animation_controller
LONG ref;
UINT max_outputs;
+
+ ID3DXAnimationSet **animation_sets;
+ UINT num_sets;
UINT max_sets;
+
UINT max_tracks;
+
UINT max_events;
};
@@ -75,6 +80,14 @@ static ULONG WINAPI d3dx9_animation_controller_Release(ID3DXAnimationController
if (!refcount)
{
+ unsigned int i;
+
+ for (i = 0; i < animation->max_sets; i++)
+ {
+ if (animation->animation_sets[i])
+ animation->animation_sets[i]->lpVtbl->Release(animation->animation_sets[i]);
+ }
+ free(animation->animation_sets);
free(animation);
}
@@ -129,9 +142,17 @@ static HRESULT WINAPI d3dx9_animation_controller_RegisterAnimationOutput(ID3DXAn
static HRESULT WINAPI d3dx9_animation_controller_RegisterAnimationSet(ID3DXAnimationController *iface,
ID3DXAnimationSet *anim_set)
{
+ struct d3dx9_animation_controller *animation = impl_from_ID3DXAnimationController(iface);
+
FIXME("iface %p, anim_set %p stub.\n", iface, anim_set);
- return E_NOTIMPL;
+ if (!anim_set || animation->num_sets >= animation->max_sets)
+ return D3DERR_INVALIDCALL;
+
+ animation->animation_sets[animation->num_sets++] = anim_set;
+ anim_set->lpVtbl->AddRef(anim_set);
+
+ return D3D_OK;
}
static HRESULT WINAPI d3dx9_animation_controller_UnregisterAnimationSet(ID3DXAnimationController *iface,
@@ -144,9 +165,11 @@ static HRESULT WINAPI d3dx9_animation_controller_UnregisterAnimationSet(ID3DXAni
static UINT WINAPI d3dx9_animation_controller_GetNumAnimationSets(ID3DXAnimationController *iface)
{
+ struct d3dx9_animation_controller *animation = impl_from_ID3DXAnimationController(iface);
+
FIXME("iface %p stub.\n", iface);
- return 0;
+ return animation->num_sets;
}
static HRESULT WINAPI d3dx9_animation_controller_GetAnimationSet(ID3DXAnimationController *iface,
@@ -459,6 +482,13 @@ HRESULT WINAPI D3DXCreateAnimationController(UINT max_outputs, UINT max_sets,
object->ID3DXAnimationController_iface.lpVtbl = &d3dx9_animation_controller_vtbl;
object->ref = 1;
object->max_outputs = max_outputs;
+
+ object->animation_sets = calloc(max_sets, sizeof(*object->animation_sets));
+ if (!object->animation_sets)
+ {
+ free(object);
+ return E_OUTOFMEMORY;
+ }
object->max_sets = max_sets;
object->max_tracks = max_tracks;
object->max_events = max_events;
--
2.50.1

View File

@@ -0,0 +1,85 @@
From ee45504fb838a5e7bfeec350c6a7c5a318400c68 Mon Sep 17 00:00:00 2001
From: Connor McAdams <cmcadams@codeweavers.com>
Date: Wed, 3 Sep 2025 13:31:04 -0400
Subject: [PATCH] d3dx9: Implement
ID3DXAnimationController::{Get,Set}TrackDesc().
Signed-off-by: Connor McAdams <cmcadams@codeweavers.com>
---
dlls/d3dx9_36/animation.c | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/dlls/d3dx9_36/animation.c b/dlls/d3dx9_36/animation.c
index 1bb775bc44a..6ded652930a 100644
--- a/dlls/d3dx9_36/animation.c
+++ b/dlls/d3dx9_36/animation.c
@@ -23,6 +23,11 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
+struct d3dx9_track
+{
+ D3DXTRACK_DESC desc;
+};
+
struct d3dx9_animation_controller
{
ID3DXAnimationController ID3DXAnimationController_iface;
@@ -34,6 +39,7 @@ struct d3dx9_animation_controller
UINT num_sets;
UINT max_sets;
+ struct d3dx9_track *tracks;
UINT max_tracks;
UINT max_events;
@@ -269,17 +275,29 @@ static HRESULT WINAPI d3dx9_animation_controller_SetTrackEnable(ID3DXAnimationCo
static HRESULT WINAPI d3dx9_animation_controller_SetTrackDesc(ID3DXAnimationController *iface,
UINT track, D3DXTRACK_DESC *desc)
{
+ struct d3dx9_animation_controller *animation = impl_from_ID3DXAnimationController(iface);
+
FIXME("iface %p, track %u, desc %p stub.\n", iface, track, desc);
- return E_NOTIMPL;
+ if (track > animation->max_tracks || !desc)
+ return D3DERR_INVALIDCALL;
+
+ animation->tracks[track].desc = *desc;
+ return D3D_OK;
}
static HRESULT WINAPI d3dx9_animation_controller_GetTrackDesc(ID3DXAnimationController *iface,
UINT track, D3DXTRACK_DESC *desc)
{
+ struct d3dx9_animation_controller *animation = impl_from_ID3DXAnimationController(iface);
+
FIXME("iface %p, track %u, desc %p stub.\n", iface, track, desc);
- return E_NOTIMPL;
+ if (track > animation->max_tracks || !desc)
+ return D3DERR_INVALIDCALL;
+
+ *desc = animation->tracks[track].desc;
+ return D3D_OK;
}
static HRESULT WINAPI d3dx9_animation_controller_SetPriorityBlend(ID3DXAnimationController *iface,
@@ -490,6 +508,14 @@ HRESULT WINAPI D3DXCreateAnimationController(UINT max_outputs, UINT max_sets,
return E_OUTOFMEMORY;
}
object->max_sets = max_sets;
+
+ object->tracks = calloc(max_tracks, sizeof(*object->tracks));
+ if (!object->tracks)
+ {
+ free(object->animation_sets);
+ free(object);
+ return E_OUTOFMEMORY;
+ }
object->max_tracks = max_tracks;
object->max_events = max_events;
--
2.50.1

View File

@@ -0,0 +1,93 @@
From fa933a9493c8b4a2e9626c1815bb5ef4309627b4 Mon Sep 17 00:00:00 2001
From: Connor McAdams <cmcadams@codeweavers.com>
Date: Wed, 3 Sep 2025 13:33:16 -0400
Subject: [PATCH] d3dx9: Implement
ID3DXAnimationController::{Get,Set}TrackAnimationSet().
Signed-off-by: Connor McAdams <cmcadams@codeweavers.com>
---
dlls/d3dx9_36/animation.c | 38 ++++++++++++++++++++++++++++++++++++--
1 file changed, 36 insertions(+), 2 deletions(-)
diff --git a/dlls/d3dx9_36/animation.c b/dlls/d3dx9_36/animation.c
index 6ded652930a..ccd16778c3e 100644
--- a/dlls/d3dx9_36/animation.c
+++ b/dlls/d3dx9_36/animation.c
@@ -26,6 +26,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
struct d3dx9_track
{
D3DXTRACK_DESC desc;
+ int set_idx;
};
struct d3dx9_animation_controller
@@ -219,17 +220,47 @@ static double WINAPI d3dx9_animation_controller_GetTime(ID3DXAnimationController
static HRESULT WINAPI d3dx9_animation_controller_SetTrackAnimationSet(ID3DXAnimationController *iface,
UINT track, ID3DXAnimationSet *anim_set)
{
+ struct d3dx9_animation_controller *animation = impl_from_ID3DXAnimationController(iface);
+ unsigned int i;
+ int idx;
+
FIXME("iface %p, track %u, anim_set %p stub.\n", iface, track, anim_set);
- return E_NOTIMPL;
+ if (track > animation->max_tracks || !anim_set || (animation->tracks[track].set_idx >= 0))
+ return D3DERR_INVALIDCALL;
+
+ idx = -1;
+ for (i = 0; i < animation->num_sets; i++)
+ {
+ if (animation->animation_sets[i] == anim_set)
+ {
+ idx = i;
+ break;
+ }
+ }
+
+ animation->tracks[track].set_idx = idx;
+
+ return idx >= 0 ? D3D_OK : D3DERR_INVALIDCALL;
}
static HRESULT WINAPI d3dx9_animation_controller_GetTrackAnimationSet(ID3DXAnimationController *iface,
UINT track, ID3DXAnimationSet **anim_set)
{
+ struct d3dx9_animation_controller *animation = impl_from_ID3DXAnimationController(iface);
+ int set_idx;
+
FIXME("iface %p, track %u, anim_set %p stub.\n", iface, track, anim_set);
- return E_NOTIMPL;
+ if (track > animation->max_tracks || !anim_set)
+ return D3DERR_INVALIDCALL;
+
+ set_idx = animation->tracks[track].set_idx;
+ *anim_set = set_idx >= 0 ? animation->animation_sets[set_idx] : NULL;
+
+ if (*anim_set)
+ (*anim_set)->lpVtbl->AddRef(*anim_set);
+ return D3D_OK;
}
static HRESULT WINAPI d3dx9_animation_controller_SetTrackPriority(ID3DXAnimationController *iface,
@@ -486,6 +517,7 @@ HRESULT WINAPI D3DXCreateAnimationController(UINT max_outputs, UINT max_sets,
UINT max_tracks, UINT max_events, ID3DXAnimationController **controller)
{
struct d3dx9_animation_controller *object;
+ unsigned int i;
TRACE("max_outputs %u, max_sets %u, max_tracks %u, max_events %u, controller %p.\n",
max_outputs, max_sets, max_tracks, max_events, controller);
@@ -516,6 +548,8 @@ HRESULT WINAPI D3DXCreateAnimationController(UINT max_outputs, UINT max_sets,
free(object);
return E_OUTOFMEMORY;
}
+ for (i = 0; i < max_tracks; ++i)
+ object->tracks[i].set_idx = -1;
object->max_tracks = max_tracks;
object->max_events = max_events;
--
2.50.1

View File

@@ -0,0 +1 @@
Fixes: [48598] d3dx9: Improve ID3DXAnimationController Animation set support.

View File

@@ -1,14 +1,14 @@
From 05dfee93e261b38037c370611ab0f63a2785a08c Mon Sep 17 00:00:00 2001
From 956a8db76088ebaa82e0093ab0e62ed1ed2aa69b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 27 Feb 2016 00:04:10 +0100
Subject: [PATCH] krnl386.exe16: Emulate GDT and LDT access.
---
dlls/krnl386.exe16/instr.c | 65 ++++++++++++++++++++++++++++++++------
1 file changed, 56 insertions(+), 9 deletions(-)
dlls/krnl386.exe16/instr.c | 57 +++++++++++++++++++++++++++++++++-----
1 file changed, 50 insertions(+), 7 deletions(-)
diff --git a/dlls/krnl386.exe16/instr.c b/dlls/krnl386.exe16/instr.c
index 666ef71363f..c6d05b7a0c9 100644
index 6af3ca30d59..bc05db6a719 100644
--- a/dlls/krnl386.exe16/instr.c
+++ b/dlls/krnl386.exe16/instr.c
@@ -60,7 +60,8 @@ static inline void *get_stack( CONTEXT *context )
@@ -21,7 +21,7 @@ index 666ef71363f..c6d05b7a0c9 100644
{
WORD limit;
BYTE *base;
@@ -68,19 +69,41 @@ struct idtr
@@ -68,12 +69,30 @@ struct idtr
#pragma pack(pop)
static LDT_ENTRY idt[256];
@@ -32,43 +32,30 @@ index 666ef71363f..c6d05b7a0c9 100644
+static BOOL emulate_idtr( BYTE *data, unsigned int data_size, unsigned int *offset )
{
- struct idtr ret;
#if defined(__i386__) && defined(__GNUC__)
+ struct dtr ret;
__asm__( "sidtl %0" : "=m" (ret) );
- return ret;
+ *offset = data - ret.base;
+ return (*offset <= ret.limit + 1 - data_size);
+#else
+ return FALSE;
+#endif
+}
+
+static BOOL emulate_gdtr( BYTE *data, unsigned int data_size, unsigned int *offset )
+{
+#if defined(__i386__) && defined(__GNUC__)
+ struct dtr ret;
+ __asm__( "sgdtl %0" : "=m" (ret) );
+ *offset = data - ret.base;
+ return (*offset <= ret.limit + 1 - data_size);
#else
- ret.base = (BYTE *)idt;
- ret.limit = sizeof(idt) - 1;
+ return FALSE;
#endif
- return ret;
}
+}
+
+static inline WORD get_ldt(void)
+{
+ WORD seg = 1;
+#if defined(__i386__) && defined(__GNUC__)
+ __asm__( "sldt %0" : "=m" (seg) );
+#endif
+ return seg;
+}
}
/***********************************************************************
* INSTR_ReplaceSelector
@@ -705,10 +728,9 @@ DWORD __wine_emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context )
@@ -700,10 +719,9 @@ DWORD __wine_emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context )
BYTE *data = INSTR_GetOperandAddr(context, instr + 1, long_addr,
segprefix, &len);
unsigned int data_size = (*instr == 0x8b) ? (long_op ? 4 : 2) : 1;
@@ -81,7 +68,7 @@ index 666ef71363f..c6d05b7a0c9 100644
{
idt[1].LimitLow = 0x100; /* FIXME */
idt[2].LimitLow = 0x11E; /* FIXME */
@@ -722,6 +744,31 @@ DWORD __wine_emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context )
@@ -717,6 +735,31 @@ DWORD __wine_emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context )
context->Eip += prefixlen + len + 1;
return ExceptionContinueExecution;
}

View File

@@ -1,50 +1,26 @@
From d1d83243555801226876f651b6f3304d3e595ae4 Mon Sep 17 00:00:00 2001
From 684fb32612284520e8e4b61cb015f546c8b5d218 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Mon, 1 Jul 2019 09:58:55 +1000
Subject: [PATCH] loader: Add Keyboard Layouts registry enteries.
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
loader/wine.inf.in | 209 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 209 insertions(+)
loader/wine.inf.in | 206 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 206 insertions(+)
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index d5f943861a8..b07843ff237 100644
index f204c458511..62cc028a0d0 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -63,6 +63,7 @@ AddReg=\
Debugger,\
@@ -64,6 +64,7 @@ AddReg=\
DirectX,\
Fonts,\
LicenseInformation,\
+ KeyboardLayouts,\
MCI,\
Misc,\
OLE,\
@@ -86,6 +87,7 @@ AddReg=\
Debugger,\
DirectX,\
Fonts,\
+ KeyboardLayouts,\
MCI,\
Misc,\
OLE,\
@@ -111,6 +113,7 @@ AddReg=\
Debugger,\
DirectX,\
Fonts,\
+ KeyboardLayouts,\
MCI,\
Misc,\
OLE,\
@@ -156,6 +159,7 @@ AddReg=\
CurrentVersionWow64.ntx86,\
Debugger,\
DirectX,\
+ KeyboardLayouts,\
MCI,\
Misc,\
Tapi,\
@@ -628,6 +632,211 @@ HKCU,Software\Microsoft\Windows\Shell\Associations\UrlAssociations\ftp\UserChoic
@@ -632,6 +633,211 @@ HKCU,Software\Microsoft\Windows\Shell\Associations\UrlAssociations\ftp\UserChoic
HKCU,Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice,"ProgId",,"http"
HKCU,Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice,"ProgId",,"https"
@@ -257,5 +233,5 @@ index d5f943861a8..b07843ff237 100644
HKLM,"Software\Microsoft\OLE","EnableDCOM",,"Y"
HKLM,"Software\Microsoft\OLE","EnableRemoteConnect",,"N"
--
2.39.2
2.50.1

View File

@@ -1,4 +1,4 @@
From e27b26f100bedf8f8374333ce9026fd96ed9102b Mon Sep 17 00:00:00 2001
From d529517d43a4747ab61dde9c6eff4a14a261d678 Mon Sep 17 00:00:00 2001
From: Torge Matthies <tmatthies@codeweavers.com>
Date: Fri, 25 Oct 2024 10:47:30 +0200
Subject: [PATCH] mf/tests: Add network bytestream tests.
@@ -8,10 +8,10 @@ Subject: [PATCH] mf/tests: Add network bytestream tests.
1 file changed, 347 insertions(+)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index 1070e9c1b2d..9d41b05fad3 100644
index a02f2859f91..db58a55d145 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -4908,6 +4908,7 @@ static void test_evr(void)
@@ -5190,6 +5190,7 @@ static void test_evr(void)
hr = IMFActivate_ActivateObject(activate, &IID_IMFMediaSink, (void **)&sink);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
@@ -19,8 +19,8 @@ index 1070e9c1b2d..9d41b05fad3 100644
check_interface(sink, &IID_IMFMediaSinkPreroll, TRUE);
check_interface(sink, &IID_IMFVideoRenderer, TRUE);
@@ -7130,6 +7131,351 @@ static void test_media_session_thinning(void)
ok(hr == S_OK, "Shutdown failure, hr %#lx.\n", hr);
@@ -8040,6 +8041,351 @@ static void test_media_session_seek(void)
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
}
+static void test_network_bytestream(void)
@@ -371,14 +371,14 @@ index 1070e9c1b2d..9d41b05fad3 100644
START_TEST(mf)
{
init_functions();
@@ -7165,6 +7511,7 @@ START_TEST(mf)
@@ -8075,6 +8421,7 @@ START_TEST(mf)
test_media_session_Start();
test_MFEnumDeviceSources();
test_media_session_Close();
+ test_network_bytestream();
test_media_session_source_shutdown();
test_media_session_thinning();
}
test_media_session_seek();
--
2.47.2

View File

@@ -1,97 +0,0 @@
From 2135156d666a6a7a779326b7f1fdcbd2a8d58c8a Mon Sep 17 00:00:00 2001
From: Spencer Wallace <spencerwallace@esri.com>
Date: Mon, 24 Feb 2025 13:33:18 -0800
Subject: [PATCH] msxml3: Correct looping of Document Element properties.
---
dlls/msxml3/element.c | 2 ++
dlls/msxml3/tests/domdoc.c | 53 ++++++++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+)
diff --git a/dlls/msxml3/element.c b/dlls/msxml3/element.c
index 0fe72dcef9c..3e3c2d06169 100644
--- a/dlls/msxml3/element.c
+++ b/dlls/msxml3/element.c
@@ -1812,6 +1812,8 @@ static HRESULT domelem_get_item(const xmlNodePtr node, LONG index, IXMLDOMNode *
*item = create_node( (xmlNodePtr) curr );
return S_OK;
}
+
+ ++attrIndex;
}
if (!node->nsDef)
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index dcb83f781ba..84a1f330582 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -10224,6 +10224,15 @@ static void test_get_attributes(void)
L"xmlns:dcterms",
L"xmlns:foaf"
};
+ const WCHAR *attributes[] =
+ {
+ L"rdf:about",
+ L"dcterms:created",
+ L"xmlns:oslc_am",
+ L"xmlns:rdf",
+ L"xmlns:dcterms",
+ L"xmlns:foaf"
+ };
const get_attributes_t *entry = get_attributes;
IXMLDOMNamedNodeMap *map;
IXMLDOMDocument *doc, *doc2;
@@ -10505,6 +10514,50 @@ static void test_get_attributes(void)
IXMLDOMDocument_Release(doc);
+ str = SysAllocString(L"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ L"<rdf:RDF rdf:about=\"foo\""
+ L" dcterms:created=\"2025\""
+ L" xmlns:oslc_am=\"http://open-services.net/ns/am#\""
+ L" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\""
+ L" xmlns:dcterms=\"http://purl.org/dc/terms/\""
+ L" xmlns:foaf=\"http://xmlns.com/foaf/0.1/\" >"
+ L"</rdf:RDF>");
+
+ doc = create_document(&IID_IXMLDOMDocument2);
+
+ hr = IXMLDOMDocument_loadXML(doc, str, &b);
+ ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+ ok(b == VARIANT_TRUE, "got %d\n", b);
+
+ hr = IXMLDOMDocument_get_documentElement(doc, &elem);
+ ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+
+ hr = IXMLDOMElement_get_attributes(elem, &map);
+ ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+
+ length = -1;
+ hr = IXMLDOMNamedNodeMap_get_length(map, &length);
+ ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+ ok(length == 6, "length %#lx.\n", length);
+
+ for(i=0; i < length; i++)
+ {
+ hr = IXMLDOMNamedNodeMap_get_item(map, i, &node2);
+ ok( hr == S_OK, "Unexpected hr %#lx (%ld).\n", hr, i);
+
+ hr = IXMLDOMNode_get_nodeName(node2, &str);
+ ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+ ok(!lstrcmpW(str, attributes[i]), "got %s\n", wine_dbgstr_w(str));
+ SysFreeString(str);
+
+ IXMLDOMNode_Release(node2);
+ }
+
+ IXMLDOMNamedNodeMap_Release(map);
+ IXMLDOMElement_Release(elem);
+
+ IXMLDOMDocument_Release(doc);
+
free_bstrs();
}
--
2.47.2

View File

@@ -1,5 +0,0 @@
Fixes: msxml3: Correct regression when looping element properties.
# PR https://gitlab.winehq.org/wine/wine/-/merge_requests/7529
#

View File

@@ -0,0 +1,51 @@
From 2e2e981c7b2c2e109730a646cda6f12ca7428927 Mon Sep 17 00:00:00 2001
From: Jactry Zeng <jzeng@codeweavers.com>
Date: Fri, 22 Sep 2023 09:13:29 -0500
Subject: [PATCH] msxml3: Add GB2312 support for builtin character converter.
---
dlls/msxml3/main.c | 1 +
dlls/msxml3/tests/domdoc.c | 8 ++++++++
2 files changed, 9 insertions(+)
diff --git a/dlls/msxml3/main.c b/dlls/msxml3/main.c
index 16e0b38b185..b0711c510f6 100644
--- a/dlls/msxml3/main.c
+++ b/dlls/msxml3/main.c
@@ -321,6 +321,7 @@ static void init_char_encoders(void)
xmlCharEncodingOutputFunc output;
} encoder[] =
{
+ { "gb2312", gbk_to_utf8, utf8_to_gbk },
{ "gbk", gbk_to_utf8, utf8_to_gbk },
{ "iso8859-1", iso8859_1_to_utf8, utf8_to_iso8859_1 },
{ "windows-1250", win1250_to_utf8, utf8_to_win1250 },
diff --git a/dlls/msxml3/tests/domdoc.c b/dlls/msxml3/tests/domdoc.c
index 84a1f330582..44ea0ac3b3a 100644
--- a/dlls/msxml3/tests/domdoc.c
+++ b/dlls/msxml3/tests/domdoc.c
@@ -798,6 +798,13 @@ static const char win936xml[] =
DECL_WIN_936
"<open></open>";
+#define DECL_WIN_GB2312 \
+"<?xml version=\"1.0\" encoding=\"GB2312\"?>"
+
+static const char gb2312xml[] =
+DECL_WIN_GB2312
+"<open></open>";
+
#define DECL_WIN_1252 \
"<?xml version=\"1.0\" encoding=\"Windows-1252\"?>"
@@ -10981,6 +10988,7 @@ static void test_load(void)
{ iso8859_1_xml, S_OK, VARIANT_TRUE },
{ win1252xml, S_OK, VARIANT_TRUE },
{ win936xml, S_FALSE, VARIANT_FALSE },
+ { gb2312xml, S_OK, VARIANT_TRUE },
};
--
2.51.0

View File

@@ -0,0 +1,6 @@
Fixes: [58673] msxml: Add GB2312 support for builtin character converter.
# PR https://gitlab.winehq.org/wine/wine/-/merge_requests/3928

View File

@@ -1,4 +1,4 @@
From 5b94720ada0b6f75ddff60cf19472a2685dbeaf0 Mon Sep 17 00:00:00 2001
From 6b96b85136b078f9779c07e5c0daecd7b1006e09 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Sun, 4 Sep 2022 13:19:16 -0600
Subject: [PATCH] ntdll: Allow reparse points to target the applicable Unix
@@ -9,14 +9,14 @@ the user to follow the symlink outside of Wine.
Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
---
dlls/ntdll/unix/file.c | 118 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 118 insertions(+)
dlls/ntdll/unix/file.c | 90 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 90 insertions(+)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index c54fd1119e1..33f26ceb89a 100644
index f83a30d36ed..234a0fa7397 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -3712,6 +3712,114 @@ static NTSTATUS get_reparse_target( UNICODE_STRING *nt_target, REPARSE_DATA_BUFF
@@ -3714,6 +3714,86 @@ static NTSTATUS get_reparse_target( UNICODE_STRING *nt_target, REPARSE_DATA_BUFF
}
@@ -24,12 +24,9 @@ index c54fd1119e1..33f26ceb89a 100644
+NTSTATUS create_reparse_target( int dirfd, const char *unix_src, int depth, const char *link_path,
+ REPARSE_DATA_BUFFER *buffer )
+{
+ ULONG nt_path_len = PATH_MAX, unix_path_len = PATH_MAX;
+ UNICODE_STRING nt_target, nt_full_target;
+ ULONG unix_target_len = PATH_MAX;
+ char *unix_path = NULL, *d;
+ char target_path[PATH_MAX];
+ OBJECT_ATTRIBUTES attr;
+ int nt_target_len;
+ char *unix_target;
+ int is_relative;
@@ -41,8 +38,6 @@ index c54fd1119e1..33f26ceb89a 100644
+ /* if the target path is relative then turn the source path into an NT path */
+ if (is_relative)
+ {
+ UNICODE_STRING nt_path_tmp;
+
+ /* resolve the NT path of the source */
+ unix_path = malloc( strlen(unix_src) + 2 );
+ if (!unix_path) return STATUS_NO_MEMORY;
@@ -55,17 +50,7 @@ index c54fd1119e1..33f26ceb89a 100644
+ if (status != STATUS_SUCCESS)
+ return status;
+ /* re-resolve the unix path for the source */
+ nt_path_tmp.Buffer = nt_path;
+ nt_path_tmp.Length = wcslen(nt_path) * sizeof(WCHAR);
+ InitializeObjectAttributes( &attr, &nt_path_tmp, 0, 0, NULL );
+ for (;;)
+ {
+ unix_path = malloc( unix_path_len );
+ if (!unix_path) return STATUS_NO_MEMORY;
+ status = wine_nt_to_unix_file_name( &attr, unix_path, &unix_path_len, FILE_OPEN_IF );
+ if (status != STATUS_BUFFER_TOO_SMALL) break;
+ free( unix_path );
+ }
+ status = ntdll_get_unix_file_name( nt_path, &unix_path, FILE_OPEN_IF );
+ }
+ else
+ {
@@ -85,21 +70,8 @@ index c54fd1119e1..33f26ceb89a 100644
+ wcscpy( nt_full_target.Buffer, nt_path );
+ free( nt_path );
+ memcpy( &nt_full_target.Buffer[wcslen(nt_full_target.Buffer)], nt_target.Buffer, nt_target_len );
+ nt_full_target.Length = wcslen( nt_full_target.Buffer ) * sizeof(WCHAR);
+ /* find the unix path for the target */
+ InitializeObjectAttributes( &attr, &nt_full_target, 0, 0, NULL );
+ for (;;)
+ {
+ unix_target = malloc( unix_target_len );
+ if (!unix_target)
+ {
+ status = STATUS_NO_MEMORY;
+ goto cleanup;
+ }
+ status = wine_nt_to_unix_file_name( &attr, unix_target, &unix_target_len, FILE_OPEN_IF );
+ if (status != STATUS_BUFFER_TOO_SMALL) break;
+ free( unix_target );
+ }
+ status = ntdll_get_unix_file_name( nt_full_target.Buffer, &unix_target, FILE_OPEN_IF );
+ /* create the symlink to the target at the last metadata location */
+ if (status == STATUS_SUCCESS || status == STATUS_NO_SUCH_FILE)
+ {
@@ -131,7 +103,7 @@ index c54fd1119e1..33f26ceb89a 100644
/*
* Retrieve the unix name corresponding to a file handle, remove that directory, and then symlink
* the requested directory to the location of the old directory.
@@ -3845,6 +3953,16 @@ NTSTATUS create_reparse_point(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
@@ -3847,6 +3927,16 @@ NTSTATUS create_reparse_point(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
link_dir_fd = fd;
}

View File

@@ -1,15 +1,15 @@
From 41e1d1b92a179f00f391919b47732e7eab9f8337 Mon Sep 17 00:00:00 2001
From efd73d7778d8c083337bda1ad162618841c368e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Tue, 30 Nov 2021 16:32:34 +0300
Subject: [PATCH] ntdll: Implement opening files through nt device paths.
---
dlls/ntdll/tests/file.c | 25 +++++++-
dlls/ntdll/unix/file.c | 134 +++++++++++++++++++++++++++++++++++++++-
2 files changed, 156 insertions(+), 3 deletions(-)
dlls/ntdll/unix/file.c | 135 +++++++++++++++++++++++++++++++++++++++-
2 files changed, 157 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 16489f4b29c..11769021b32 100644
index 25381caf313..7f048572e03 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -139,18 +139,22 @@ static void WINAPI apc( void *arg, IO_STATUS_BLOCK *iosb, ULONG reserved )
@@ -63,10 +63,10 @@ index 16489f4b29c..11769021b32 100644
static void open_file_test(void)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index a39079efa97..c76d91cdf68 100644
index 542a314ea81..68587cbef11 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -4688,7 +4688,7 @@ static NTSTATUS nt_to_unix_file_name_no_root( FILE_OBJECT *fileobj, char **unix_
@@ -4593,7 +4593,7 @@ static NTSTATUS nt_to_unix_file_name_no_root( FILE_OBJECT *fileobj, char **unix_
/******************************************************************************
@@ -75,7 +75,7 @@ index a39079efa97..c76d91cdf68 100644
*
* Convert a file name from NT namespace to Unix namespace.
*
@@ -4696,7 +4696,7 @@ static NTSTATUS nt_to_unix_file_name_no_root( FILE_OBJECT *fileobj, char **unix_
@@ -4601,7 +4601,7 @@ static NTSTATUS nt_to_unix_file_name_no_root( FILE_OBJECT *fileobj, char **unix_
* element doesn't have to exist; in that case STATUS_NO_SUCH_FILE is
* returned, but the unix name is still filled in properly.
*/
@@ -84,7 +84,7 @@ index a39079efa97..c76d91cdf68 100644
{
HANDLE rootdir = attr->RootDirectory;
enum server_fd_type type;
@@ -4775,6 +4775,136 @@ reparse:
@@ -4680,6 +4680,137 @@ reparse:
}
@@ -218,8 +218,9 @@ index a39079efa97..c76d91cdf68 100644
+ return status;
+}
+
/******************************************************************************
* wine_nt_to_unix_file_name
+
/******************************************************************
* collapse_path
*
--
2.47.2

View File

@@ -1,2 +1,3 @@
Fixes: [37487] Resolve \\SystemRoot\\ prefix when opening files
Fixes: Implement opening files through nt device paths
Depends: ntdll-Junction_Points

View File

@@ -1,4 +1,4 @@
From 82663e728099ca8f0127dcdf8d62d551eda6902c Mon Sep 17 00:00:00 2001
From 03ed95b629a5d5a9b1a8203e08d7db4ce1ed80d9 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Thu, 28 Apr 2016 18:14:36 +0800
Subject: [PATCH] ntdll: Implement NtSetLdtEntries.
@@ -9,10 +9,10 @@ Subject: [PATCH] ntdll: Implement NtSetLdtEntries.
2 files changed, 80 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c
index 3cf58d928ae..78f9bbeb493 100644
index c0303b471e8..9025d66fba6 100644
--- a/dlls/kernel32/tests/thread.c
+++ b/dlls/kernel32/tests/thread.c
@@ -102,6 +102,7 @@ static HRESULT (WINAPI *pSetThreadDescription)(HANDLE,const WCHAR *);
@@ -103,6 +103,7 @@ static HRESULT (WINAPI *pSetThreadDescription)(HANDLE,const WCHAR *);
static HRESULT (WINAPI *pGetThreadDescription)(HANDLE,WCHAR **);
static PVOID (WINAPI *pRtlAddVectoredExceptionHandler)(ULONG,PVECTORED_EXCEPTION_HANDLER);
static ULONG (WINAPI *pRtlRemoveVectoredExceptionHandler)(PVOID);
@@ -20,7 +20,7 @@ index 3cf58d928ae..78f9bbeb493 100644
static HANDLE create_target_process(const char *arg)
{
@@ -1299,6 +1300,82 @@ static void test_GetThreadSelectorEntry(void)
@@ -1319,6 +1320,82 @@ static void test_GetThreadSelectorEntry(void)
ok(entry.HighWord.Bits.Granularity == 1, "expected 1, got %u\n", entry.HighWord.Bits.Granularity);
}
@@ -103,7 +103,7 @@ index 3cf58d928ae..78f9bbeb493 100644
#endif /* __i386__ */
static HANDLE finish_event;
@@ -2617,6 +2694,7 @@ static void init_funcs(void)
@@ -2644,6 +2721,7 @@ static void init_funcs(void)
X(NtSetInformationThread);
X(RtlAddVectoredExceptionHandler);
X(RtlRemoveVectoredExceptionHandler);
@@ -111,7 +111,7 @@ index 3cf58d928ae..78f9bbeb493 100644
}
#undef X
}
@@ -2673,6 +2751,7 @@ START_TEST(thread)
@@ -2700,6 +2778,7 @@ START_TEST(thread)
test_SetThreadContext();
test_GetThreadSelectorEntry();
test_GetThreadContext();
@@ -120,12 +120,12 @@ index 3cf58d928ae..78f9bbeb493 100644
test_QueueUserWorkItem();
test_RegisterWaitForSingleObject();
diff --git a/dlls/ntdll/unix/signal_i386.c b/dlls/ntdll/unix/signal_i386.c
index f8d8dd9bf28..194e9c3f3e6 100644
index 670a3c25015..b4a2392630f 100644
--- a/dlls/ntdll/unix/signal_i386.c
+++ b/dlls/ntdll/unix/signal_i386.c
@@ -2207,7 +2207,7 @@ NTSTATUS get_thread_ldt_entry( HANDLE handle, void *data, ULONG len, ULONG *ret_
@@ -2271,7 +2271,7 @@ NTSTATUS get_thread_ldt_entry( HANDLE handle, void *data, ULONG len, ULONG *ret_
if (reply->flags)
info->Entry = ldt_make_entry( (void *)reply->base, reply->limit, reply->flags );
info->Entry = ldt_make_entry( reply->base, reply->limit, reply->flags );
else
- status = STATUS_UNSUCCESSFUL;
+ status = STATUS_ACCESS_VIOLATION;
@@ -133,5 +133,5 @@ index f8d8dd9bf28..194e9c3f3e6 100644
}
SERVER_END_REQ;
--
2.34.1
2.50.1

View File

@@ -1,4 +1,4 @@
From e941585d942942f7b97b73ae24b9a0a486a855e4 Mon Sep 17 00:00:00 2001
From fb6f79e3b34c0798cebe330a15a64363172fe898 Mon Sep 17 00:00:00 2001
From: Paul Gofman <pgofman@codeweavers.com>
Date: Tue, 14 Jul 2020 15:00:34 +0300
Subject: [PATCH] ntdll: Support x86_64 syscall emulation.
@@ -9,19 +9,19 @@ Subject: [PATCH] ntdll: Support x86_64 syscall emulation.
2 files changed, 204 insertions(+)
diff --git a/configure.ac b/configure.ac
index 8192c067e4c..d4abbdb3f37 100644
index 751e6acda99..67b432faca8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -391,6 +391,7 @@ AC_CHECK_HEADERS(\
linux/ioctl.h \
@@ -684,6 +684,7 @@ AC_CHECK_HEADERS(\
linux/major.h \
linux/ntsync.h \
linux/param.h \
+ linux/seccomp.h \
linux/serial.h \
linux/types.h \
linux/ucdrom.h \
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
index fb5259d8714..93020158d0b 100644
index f55726801c7..a6be9f9aab4 100644
--- a/dlls/ntdll/unix/signal_x86_64.c
+++ b/dlls/ntdll/unix/signal_x86_64.c
@@ -27,6 +27,7 @@
@@ -56,7 +56,7 @@ index fb5259d8714..93020158d0b 100644
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
@@ -1857,6 +1868,194 @@ static inline DWORD is_privileged_instr( CONTEXT *context )
@@ -1897,6 +1908,194 @@ static inline DWORD is_privileged_instr( CONTEXT *context )
return 0;
}
@@ -251,7 +251,7 @@ index fb5259d8714..93020158d0b 100644
/***********************************************************************
* handle_interrupt
@@ -2567,10 +2766,14 @@ void signal_init_process(void)
@@ -2686,10 +2885,14 @@ void signal_init_process(void)
if (sigaction( SIGSEGV, &sig_act, NULL ) == -1) goto error;
if (sigaction( SIGILL, &sig_act, NULL ) == -1) goto error;
if (sigaction( SIGBUS, &sig_act, NULL ) == -1) goto error;
@@ -267,5 +267,5 @@ index fb5259d8714..93020158d0b 100644
error:
--
2.47.2
2.50.1

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