Compare commits

...

9 Commits
v6.14 ... v6.15

Author SHA1 Message Date
Alistair Leslie-Hughes
4b6879f30f Release v6.15 2021-08-14 17:18:31 +10:00
Alistair Leslie-Hughes
94337e021c Rebase against 7f144646ffac6f3632d0c39b217dbd433c1154a0. 2021-08-14 15:52:01 +10:00
Alistair Leslie-Hughes
05c42b1df2 Rebase against 6b58d34a625ffaad181a7316009398f3c6444181. 2021-08-13 08:52:12 +10:00
Zebediah Figura
1bc4da9d59 Rebase against 91494ae6f2e47254d15a47e292ff569f3b400be6. 2021-08-11 22:25:44 -05:00
Alistair Leslie-Hughes
16476ce303 Updated mfplat-streaming-support patchset
Added a patch again to disable Function MFCreateDXGIDeviceManager.

This causes videos to render as a black screen.
Until support for the internal rendering flag SOURCE_READER_HAS_DEVICE_MANAGER is
better support through mf*, this patch will be here to stay.

Games affected.
Power Ranger: Battle for the Grid (Steam).
Oddworld: Soulstorm (Epic).
2021-08-11 09:37:19 +10:00
Alistair Leslie-Hughes
bdb9f49c3e Rebase against f63ecaedc72f3580e7016ba71a480025e4d86e99. 2021-08-11 09:04:37 +10:00
Alistair Leslie-Hughes
82118b0d67 Rebase against 3f2850aeaa159270384764843cdb1dc3cbe902c6. 2021-08-06 09:55:38 +10:00
Alistair Leslie-Hughes
00985bf311 Removed patchset ntdll-aarch-TEB
As request on bug.
2021-08-04 09:53:18 +10:00
Alistair Leslie-Hughes
3c8c7910e7 Rebase against ccbb0eef7bcaae672e9f7f69d3a9cdce62574177. 2021-08-04 09:18:47 +10:00
25 changed files with 207 additions and 435 deletions

View File

@@ -1,4 +1,4 @@
From b034a39ba4e554aad252745996dacd9bf02d5d53 Mon Sep 17 00:00:00 2001
From b4010603ae2bab3a4fdc8b57efaebe47254eb168 Mon Sep 17 00:00:00 2001
From: Daniel Wendt <daniel.wendt@linux.com>
Date: Fri, 15 Nov 2013 12:52:37 +0100
Subject: [PATCH] gdi32: fix for rotated Arc, ArcTo, Chord and Pie drawing
@@ -11,7 +11,7 @@ Wine-Bug: http://bugs.winehq.org/show_bug.cgi?id=34579
2 files changed, 83 insertions(+)
diff --git a/dlls/gdi32/dibdrv/graphics.c b/dlls/gdi32/dibdrv/graphics.c
index e4e2de8f99f..af82d63e15b 100644
index c6f11ae6a69..e4a5f7bab8b 100644
--- a/dlls/gdi32/dibdrv/graphics.c
+++ b/dlls/gdi32/dibdrv/graphics.c
@@ -312,6 +312,60 @@ static int get_arc_points( int arc_dir, const RECT *rect, POINT start, POINT end
@@ -116,12 +116,12 @@ index e4e2de8f99f..af82d63e15b 100644
{
HeapFree( GetProcessHeap(), 0, points );
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index 105d72b23f0..6624a4f7cb7 100644
index 6d23e7e0ecc..e8e08d00b81 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -122,4 +122,7 @@ extern BOOL EMFDC_SetROP2( DC_ATTR *dc_attr, INT rop ) DECLSPEC_HIDDEN;
extern BOOL EMFDC_SetStretchBltMode( DC_ATTR *dc_attr, INT mode ) DECLSPEC_HIDDEN;
extern BOOL EMFDC_SetTextAlign( DC_ATTR *dc_attr, UINT align ) DECLSPEC_HIDDEN;
@@ -208,4 +208,7 @@ extern BOOL EMFDC_StretchDIBits( DC_ATTR *dc_attr, INT x_dst, INT y_dst, INT wid
INT height_src, const void *bits, const BITMAPINFO *info,
UINT coloruse, DWORD rop ) DECLSPEC_HIDDEN;
+BOOL xform_has_rotate_and_uniform_scale_and_shear( const XFORM *xform ) DECLSPEC_HIDDEN;
+BOOL xform_decompose_rotation_and_translation( XFORM *xform, XFORM *rotation_and_translation ) DECLSPEC_HIDDEN;

View File

@@ -0,0 +1,26 @@
From 06dbd32747a1451deb12d1bebc9cbf5a56dfdca5 Mon Sep 17 00:00:00 2001
From: Derek Lesho <dlesho@codeweavers.com>
Date: Thu, 18 Mar 2021 16:54:44 -0400
Subject: [PATCH] mfplat: Stub out MFCreateDXGIDeviceManager, to avoid the d3d
path.
---
dlls/mfplat/main.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index 7fd713261fc..9e458ea49bb 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -8891,6 +8891,8 @@ HRESULT WINAPI MFCreateDXGIDeviceManager(UINT *token, IMFDXGIDeviceManager **man
TRACE("%p, %p.\n", token, manager);
+ return E_NOTIMPL;
+
if (!token || !manager)
return E_POINTER;
--
2.30.2

View File

@@ -1,4 +1,4 @@
From 6bbf7676b4b7887a54f47b43929b8f3f1d7e77ae Mon Sep 17 00:00:00 2001
From 06af804bd6e75332dd2be2005b443e285bc4f2dc Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Wed, 20 Aug 2014 00:08:52 -0600
Subject: [PATCH] ntdll: Implement storing DOS attributes in
@@ -6,14 +6,14 @@ Subject: [PATCH] ntdll: Implement storing DOS attributes in
---
dlls/ntdll/tests/file.c | 8 ++---
dlls/ntdll/unix/file.c | 74 ++++++++++++++++++++++++++++++-----------
2 files changed, 58 insertions(+), 24 deletions(-)
dlls/ntdll/unix/file.c | 76 +++++++++++++++++++++++++++++------------
2 files changed, 59 insertions(+), 25 deletions(-)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 8b9ec4f624d..6d2c8d2fc94 100644
index 19ae5f2ac21..cb578ceee9e 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -1389,7 +1389,7 @@ static void test_file_basic_information(void)
@@ -1400,7 +1400,7 @@ static void test_file_basic_information(void)
memset(&fbi, 0, sizeof(fbi));
res = pNtQueryInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation);
ok ( res == STATUS_SUCCESS, "can't get attributes\n");
@@ -22,7 +22,7 @@ index 8b9ec4f624d..6d2c8d2fc94 100644
/* Then HIDDEN */
memset(&fbi, 0, sizeof(fbi));
@@ -1402,7 +1402,7 @@ static void test_file_basic_information(void)
@@ -1413,7 +1413,7 @@ static void test_file_basic_information(void)
memset(&fbi, 0, sizeof(fbi));
res = pNtQueryInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation);
ok ( res == STATUS_SUCCESS, "can't get attributes\n");
@@ -31,7 +31,7 @@ index 8b9ec4f624d..6d2c8d2fc94 100644
/* Check NORMAL last of all (to make sure we can clear attributes) */
memset(&fbi, 0, sizeof(fbi));
@@ -1459,7 +1459,7 @@ static void test_file_all_information(void)
@@ -1470,7 +1470,7 @@ static void test_file_all_information(void)
memset(&fai_buf.fai, 0, sizeof(fai_buf.fai));
res = pNtQueryInformationFile(h, &io, &fai_buf.fai, sizeof fai_buf, FileAllInformation);
ok ( res == STATUS_SUCCESS, "can't get attributes, res %x\n", res);
@@ -40,7 +40,7 @@ index 8b9ec4f624d..6d2c8d2fc94 100644
/* Then HIDDEN */
memset(&fai_buf.fai.BasicInformation, 0, sizeof(fai_buf.fai.BasicInformation));
@@ -1472,7 +1472,7 @@ static void test_file_all_information(void)
@@ -1483,7 +1483,7 @@ static void test_file_all_information(void)
memset(&fai_buf.fai, 0, sizeof(fai_buf.fai));
res = pNtQueryInformationFile(h, &io, &fai_buf.fai, sizeof fai_buf, FileAllInformation);
ok ( res == STATUS_SUCCESS, "can't get attributes\n");
@@ -50,10 +50,10 @@ index 8b9ec4f624d..6d2c8d2fc94 100644
/* Check NORMAL last of all (to make sure we can clear attributes) */
memset(&fai_buf.fai.BasicInformation, 0, sizeof(fai_buf.fai.BasicInformation));
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index da8f65af7b3..0a326a7a1bd 100644
index a2cae9708db..9a1bd50c695 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -376,6 +376,26 @@ NTSTATUS errno_to_status( int err )
@@ -374,6 +374,26 @@ NTSTATUS errno_to_status( int err )
#define XATTR_USER_PREFIX "user."
#endif
@@ -120,7 +120,7 @@ index da8f65af7b3..0a326a7a1bd 100644
/* get the stat info and file attributes for a file (by name) */
static int get_file_info( const char *path, struct stat *st, ULONG *attr )
{
@@ -4139,7 +4192,6 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
@@ -4356,7 +4409,6 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
case FileBasicInformation:
if (len >= sizeof(FILE_BASIC_INFORMATION))
{
@@ -128,12 +128,13 @@ index da8f65af7b3..0a326a7a1bd 100644
const FILE_BASIC_INFORMATION *info = ptr;
LARGE_INTEGER mtime, atime;
@@ -4153,25 +4205,7 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
io->u.Status = set_file_times( fd, &mtime, &atime );
@@ -4369,26 +4421,8 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
if (atime.QuadPart || mtime.QuadPart)
status = set_file_times( fd, &mtime, &atime );
if (io->u.Status == STATUS_SUCCESS && info->FileAttributes)
- if (status == STATUS_SUCCESS && info->FileAttributes)
- {
- if (fstat( fd, &st ) == -1) io->u.Status = errno_to_status( errno );
- if (fstat( fd, &st ) == -1) status = errno_to_status( errno );
- else
- {
- if (info->FileAttributes & FILE_ATTRIBUTE_READONLY)
@@ -148,13 +149,14 @@ index da8f65af7b3..0a326a7a1bd 100644
- /* add write permission only where we already have read permission */
- st.st_mode |= (0600 | ((st.st_mode & 044) >> 1)) & (~start_umask);
- }
- if (fchmod( fd, st.st_mode ) == -1) io->u.Status = errno_to_status( errno );
- if (fchmod( fd, st.st_mode ) == -1) status = errno_to_status( errno );
- }
- }
+ io->u.Status = fd_set_file_info( fd, info->FileAttributes );
+ if (status == STATUS_SUCCESS && info->FileAttributes)
+ status = fd_set_file_info( fd, info->FileAttributes );
if (needs_close) close( fd );
}
--
2.28.0
2.30.2

View File

@@ -1,4 +1,4 @@
From 02050df2d792e003c28a302d23e7a464573c113c Mon Sep 17 00:00:00 2001
From 494342c8f911f827783f1aed9717d793c4e6a8c0 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Wed, 20 Aug 2014 15:28:00 -0600
Subject: [PATCH] ntdll: Implement storing DOS attributes in NtCreateFile.
@@ -58,10 +58,10 @@ index 6a423174664..fccd48f23e5 100644
}
testfiles[i].nfound++;
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index b2494d0343a..ad39732fd29 100644
index 9a1bd50c695..9b3735dd917 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -407,6 +407,26 @@ static int xattr_get( const char *path, const char *name, void *value, size_t si
@@ -404,6 +404,26 @@ static int xattr_get( const char *path, const char *name, void *value, size_t si
#endif
}
@@ -88,7 +88,7 @@ index b2494d0343a..ad39732fd29 100644
/* get space from the current directory data buffer, allocating a new one if necessary */
static void *get_dir_data_space( struct dir_data *data, unsigned int size )
{
@@ -3760,6 +3780,20 @@ static NTSTATUS unmount_device( HANDLE handle )
@@ -3783,6 +3803,20 @@ static NTSTATUS unmount_device( HANDLE handle )
return status;
}
@@ -109,27 +109,27 @@ index b2494d0343a..ad39732fd29 100644
/******************************************************************************
* open_unix_file
@@ -3854,13 +3888,14 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
io->u.Status = STATUS_SUCCESS;
@@ -3868,13 +3902,14 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
status = STATUS_SUCCESS;
}
- if (io->u.Status == STATUS_SUCCESS)
+ if (io->u.Status != STATUS_SUCCESS)
- if (status == STATUS_SUCCESS)
+ if (status != STATUS_SUCCESS)
{
- io->u.Status = open_unix_file( handle, unix_name, access, &new_attr, attributes,
- sharing, disposition, options, ea_buffer, ea_length );
- status = open_unix_file( handle, unix_name, access, &new_attr, attributes,
- sharing, disposition, options, ea_buffer, ea_length );
- free( unix_name );
+ WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
+ return io->u.Status;
+ return status;
}
- else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
- else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), status );
+
+ io->u.Status = open_unix_file( handle, unix_name, access, &new_attr, attributes,
+ status = open_unix_file( handle, unix_name, access, &new_attr, attributes,
+ sharing, disposition, options, ea_buffer, ea_length );
if (io->u.Status == STATUS_SUCCESS)
if (status == STATUS_SUCCESS)
{
@@ -3882,6 +3917,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
@@ -3896,6 +3931,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
io->Information = FILE_OVERWRITTEN;
break;
}
@@ -139,14 +139,14 @@ index b2494d0343a..ad39732fd29 100644
+ set_file_info( unix_name, attributes );
+ }
}
else if (io->u.Status == STATUS_TOO_MANY_OPENED_FILES)
else if (status == STATUS_TOO_MANY_OPENED_FILES)
{
@@ -3890,6 +3930,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
@@ -3904,6 +3944,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
}
free( nt_name.Buffer );
+ free( unix_name );
return io->u.Status;
return io->u.Status = status;
}
--

View File

@@ -1,4 +1,4 @@
From f4f37eddd1eb809cf491ae3a0029f3850021d69d Mon Sep 17 00:00:00 2001
From 9b99e441e86ac54a15dc54802db7c739ae729bb8 Mon Sep 17 00:00:00 2001
From: Jianqiu Zhang <zhangjianqiu_133@yeah.net>
Date: Fri, 17 Apr 2015 14:33:41 +0800
Subject: [PATCH] ntdll: Add support for FileFsFullSizeInformation class in
@@ -6,14 +6,14 @@ Subject: [PATCH] ntdll: Add support for FileFsFullSizeInformation class in
---
dlls/ntdll/tests/file.c | 8 +-----
dlls/ntdll/unix/file.c | 54 ++++++++++++++++++++++++++++++++++++++++-
2 files changed, 54 insertions(+), 8 deletions(-)
dlls/ntdll/unix/file.c | 55 +++++++++++++++++++++++++++++++++++++++--
2 files changed, 54 insertions(+), 9 deletions(-)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 184b7cdad59..2ef8b451457 100644
index bff3b18ce83..5dcb7a2729a 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -1265,7 +1265,7 @@ static void test_file_full_size_information(void)
@@ -1291,7 +1291,7 @@ static void test_file_full_size_information(void)
/* Assume No Quota Settings configured on Wine Testbot */
res = pNtQueryVolumeInformationFile(h, &io, &ffsi, sizeof ffsi, FileFsFullSizeInformation);
@@ -22,7 +22,7 @@ index 184b7cdad59..2ef8b451457 100644
res = pNtQueryVolumeInformationFile(h, &io, &fsi, sizeof fsi, FileFsSizeInformation);
ok(res == STATUS_SUCCESS, "cannot get attributes, res %x\n", res);
@@ -1281,8 +1281,6 @@ static void test_file_full_size_information(void)
@@ -1307,8 +1307,6 @@ static void test_file_full_size_information(void)
ok(fsi.BytesPerSector == 512, "[fsi] BytesPerSector expected 512, got %d\n",fsi.BytesPerSector);
ok(fsi.SectorsPerAllocationUnit == 8, "[fsi] SectorsPerAllocationUnit expected 8, got %d\n",fsi.SectorsPerAllocationUnit);
@@ -31,7 +31,7 @@ index 184b7cdad59..2ef8b451457 100644
ok(ffsi.TotalAllocationUnits.QuadPart > 0,
"[ffsi] TotalAllocationUnits expected positive, got negative value 0x%s\n",
wine_dbgstr_longlong(ffsi.TotalAllocationUnits.QuadPart));
@@ -1300,14 +1298,10 @@ static void test_file_full_size_information(void)
@@ -1326,14 +1324,10 @@ static void test_file_full_size_information(void)
"[ffsi] CallerAvailableAllocationUnits error fsi:0x%s, ffsi: 0x%s\n",
wine_dbgstr_longlong(fsi.AvailableAllocationUnits.QuadPart),
wine_dbgstr_longlong(ffsi.CallerAvailableAllocationUnits.QuadPart));
@@ -47,14 +47,15 @@ index 184b7cdad59..2ef8b451457 100644
CloseHandle( h );
}
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index ca6899b50f5..389470804ee 100644
index 5f7ed799c53..d7f91b41324 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -6271,7 +6271,59 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, IO_STATUS_BLOCK *io
@@ -7518,8 +7518,59 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, IO_STATUS_BLOCK *io
break;
case FileFsFullSizeInformation:
- FIXME( "%p: full size info not supported\n", handle );
- status = STATUS_NOT_IMPLEMENTED;
+ if(length < sizeof(FILE_FS_FULL_SIZE_INFORMATION))
+ io->u.Status = STATUS_BUFFER_TOO_SMALL;
+ else
@@ -112,5 +113,5 @@ index ca6899b50f5..389470804ee 100644
case FileFsObjectIdInformation:
--
2.27.0
2.30.2

View File

@@ -1,4 +1,4 @@
From 03e143d7abd6684600722fee6c96d05d2c70830d Mon Sep 17 00:00:00 2001
From e127c088e6f4cfae3066b31adcd73c4eee9008ed 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.
@@ -12,14 +12,14 @@ are from higher memory than they expect.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48175
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46568
---
dlls/ntdll/unix/virtual.c | 418 ++++++++++++++++++--------------------
1 file changed, 202 insertions(+), 216 deletions(-)
dlls/ntdll/unix/virtual.c | 421 ++++++++++++++++++--------------------
1 file changed, 204 insertions(+), 217 deletions(-)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index 75fa0b91872..525c55b8097 100644
index 606e136dfaa..4899fc7b443 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -1135,44 +1135,6 @@ static struct file_view *find_view_range( const void *addr, size_t size )
@@ -1217,44 +1217,6 @@ static struct file_view *find_view_range( const void *addr, size_t size )
}
@@ -64,7 +64,7 @@ index 75fa0b91872..525c55b8097 100644
/***********************************************************************
* try_map_free_area
*
@@ -1205,110 +1167,6 @@ static void* try_map_free_area( void *base, void *end, ptrdiff_t step,
@@ -1287,110 +1249,6 @@ static void* try_map_free_area( void *base, void *end, ptrdiff_t step,
return NULL;
}
@@ -175,7 +175,7 @@ index 75fa0b91872..525c55b8097 100644
/***********************************************************************
* add_reserved_area
*
@@ -1466,8 +1324,7 @@ static void delete_view( struct file_view *view ) /* [in] View */
@@ -1548,8 +1406,7 @@ static void delete_view( struct file_view *view ) /* [in] View */
{
if (!(view->protect & VPROT_SYSTEM)) unmap_area( view->base, view->size );
set_page_vprot( view->base, view->size, 0 );
@@ -185,7 +185,7 @@ index 75fa0b91872..525c55b8097 100644
wine_rb_remove( &views_tree, &view->entry );
*(struct file_view **)view = next_free_view;
next_free_view = view;
@@ -1515,8 +1372,7 @@ static NTSTATUS create_view( struct file_view **view_ret, void *base, size_t siz
@@ -1597,8 +1454,7 @@ static NTSTATUS create_view( struct file_view **view_ret, void *base, size_t siz
set_page_vprot( base, size, vprot );
wine_rb_put( &views_tree, view->base, &view->entry );
@@ -195,11 +195,8 @@ index 75fa0b91872..525c55b8097 100644
*view_ret = view;
@@ -1741,54 +1597,220 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
return ptr;
}
@@ -1812,51 +1668,218 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
-
struct alloc_area
{
+ char *map_area_start, *map_area_end, *result;
@@ -217,20 +214,20 @@ index 75fa0b91872..525c55b8097 100644
- *
- * Try to map some space inside a reserved area. Callback for mmap_enum_reserved_areas.
- */
-static int CDECL alloc_reserved_area_callback( void *start, SIZE_T size, void *arg )
+static int CDECL alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size, void *arg )
-static int alloc_reserved_area_callback( void *start, SIZE_T size, void *arg )
+static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size, void *arg )
{
- struct alloc_area *alloc = arg;
- void *end = (char *)start + size;
-
- if (start < address_space_start) start = address_space_start;
- if (is_beyond_limit( start, size, alloc->limit )) end = alloc->limit;
- if (start >= end) return 0;
+ char *intersect_start, *intersect_end;
+ char *end = (char *)start + size;
+ struct alloc_area *area = arg;
+ char *alloc_start;
- if (start < address_space_start) start = address_space_start;
- if (is_beyond_limit( start, size, alloc->limit )) end = alloc->limit;
- if (start >= end) return 0;
-
- /* make sure we don't touch the preloader reserved range */
- if (preload_reserve_end >= start)
+ if (area->top_down)
@@ -253,13 +250,20 @@ index 75fa0b91872..525c55b8097 100644
{
- if (preload_reserve_start <= start) return 0; /* no space in that area */
- if (preload_reserve_start < end) end = preload_reserve_start;
- }
- else if (preload_reserve_start <= start) start = preload_reserve_end;
- else
- {
- /* range is split in two by the preloader reservation, try first part */
- if ((alloc->result = find_reserved_free_area( start, preload_reserve_start, alloc->size,
- alloc->top_down )))
+ alloc_start = ROUND_ADDR( (char *)area->map_area_end - size, granularity_mask );
+ if ((area->result = try_map_free_area( intersect_end, alloc_start + size, area->step,
+ alloc_start, area->size, area->unix_prot )))
+ return 1;
return 1;
- /* then fall through to try second part */
- start = preload_reserve_end;
}
- else if (preload_reserve_start <= start) start = preload_reserve_end;
- else
+
+ if (intersect_end - intersect_start >= area->size)
+ {
@@ -291,16 +295,11 @@ index 75fa0b91872..525c55b8097 100644
+ assert(ROUND_ADDR(area->map_area_start, granularity_mask) == area->map_area_start);
+
+ if (intersect_start - area->map_area_start >= area->size)
{
- /* range is split in two by the preloader reservation, try first part */
- if ((alloc->result = find_reserved_free_area( start, preload_reserve_start, alloc->size,
- alloc->top_down )))
+ {
+ if ((area->result = try_map_free_area( area->map_area_start, intersect_start, area->step,
+ area->map_area_start, area->size, area->unix_prot )))
return 1;
- /* then fall through to try second part */
- start = preload_reserve_end;
}
+ return 1;
+ }
+
+ if (intersect_end - intersect_start >= area->size)
+ {
@@ -446,7 +445,7 @@ index 75fa0b91872..525c55b8097 100644
/***********************************************************************
* map_fixed_area
*
@@ -1860,48 +1882,11 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
@@ -1928,48 +1951,11 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
if (status != STATUS_SUCCESS) return status;
ptr = base;
}
@@ -498,7 +497,7 @@ index 75fa0b91872..525c55b8097 100644
status = create_view( view_ret, ptr, size, vprot );
if (status != STATUS_SUCCESS) unmap_area( ptr, size );
return status;
@@ -2627,6 +2612,7 @@ void virtual_init(void)
@@ -2695,6 +2681,7 @@ void virtual_init(void)
if (preload_reserve_start)
address_space_start = min( address_space_start, preload_reserve_start );
}

View File

@@ -1,4 +1,4 @@
From 9d123ae160a93e689b35e50682405f421d094c18 Mon Sep 17 00:00:00 2001
From bcc882f5d1980cbf353891d1e1686e97c068f8c7 Mon Sep 17 00:00:00 2001
From: Paul Gofman <pgofman@codeweavers.com>
Date: Tue, 2 Jun 2020 21:06:33 +0300
Subject: [PATCH] ntdll: Exclude natively mapped areas from free areas list.
@@ -8,10 +8,10 @@ Subject: [PATCH] ntdll: Exclude natively mapped areas from free areas list.
1 file changed, 109 insertions(+), 28 deletions(-)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index cee8d1d5041..7c26c79649e 100644
index 4899fc7b443..cee739bd942 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -116,6 +116,7 @@ struct file_view
@@ -143,6 +143,7 @@ struct file_view
#define VPROT_WRITEWATCH 0x40
/* per-mapping protection flags */
#define VPROT_SYSTEM 0x0200 /* system view (underlying mmap not under our control) */
@@ -19,7 +19,7 @@ index cee8d1d5041..7c26c79649e 100644
/* Conversion from VPROT_* to Win32 flags */
static const BYTE VIRTUAL_Win32Flags[16] =
@@ -999,7 +1000,9 @@ static void dump_view( struct file_view *view )
@@ -1081,7 +1082,9 @@ static void dump_view( struct file_view *view )
BYTE prot = get_page_vprot( addr );
TRACE( "View: %p - %p", addr, addr + view->size - 1 );
@@ -30,7 +30,7 @@ index cee8d1d5041..7c26c79649e 100644
TRACE( " (builtin image)\n" );
else if (view->protect & SEC_IMAGE)
TRACE( " (image)\n" );
@@ -1134,6 +1137,16 @@ static struct file_view *find_view_range( const void *addr, size_t size )
@@ -1216,6 +1219,16 @@ static struct file_view *find_view_range( const void *addr, size_t size )
return NULL;
}
@@ -47,7 +47,7 @@ index cee8d1d5041..7c26c79649e 100644
/***********************************************************************
* try_map_free_area
@@ -1141,21 +1154,27 @@ static struct file_view *find_view_range( const void *addr, size_t size )
@@ -1223,21 +1236,27 @@ static struct file_view *find_view_range( const void *addr, size_t size )
* Try mmaping some expected free memory region, eventually stepping and
* retrying inside it, and return where it actually succeeded, or NULL.
*/
@@ -80,10 +80,10 @@ index cee8d1d5041..7c26c79649e 100644
if ((step > 0 && (char *)end - (char *)start < step) ||
(step < 0 && (char *)start - (char *)base < -step) ||
step == 0)
@@ -1597,15 +1616,6 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
return ptr;
@@ -1666,15 +1685,6 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
}
-struct alloc_area
-{
- char *map_area_start, *map_area_end, *result;
@@ -93,10 +93,10 @@ index cee8d1d5041..7c26c79649e 100644
- BOOL top_down;
-};
-
static int CDECL alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size, void *arg )
static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size, void *arg )
{
char *intersect_start, *intersect_end;
@@ -1631,8 +1641,8 @@ static int CDECL alloc_area_in_reserved_or_between_callback( void *start, SIZE_T
@@ -1700,8 +1710,8 @@ static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size,
if (area->map_area_end - intersect_end >= area->size)
{
alloc_start = ROUND_ADDR( (char *)area->map_area_end - size, granularity_mask );
@@ -107,7 +107,7 @@ index cee8d1d5041..7c26c79649e 100644
return 1;
}
@@ -1667,8 +1677,8 @@ static int CDECL alloc_area_in_reserved_or_between_callback( void *start, SIZE_T
@@ -1736,8 +1746,8 @@ static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size,
if (intersect_start - area->map_area_start >= area->size)
{
@@ -118,7 +118,7 @@ index cee8d1d5041..7c26c79649e 100644
return 1;
}
@@ -1723,8 +1733,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
@@ -1792,8 +1802,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
if (start >= area->map_area_end || start < area->map_area_start)
return NULL;
@@ -128,7 +128,7 @@ index cee8d1d5041..7c26c79649e 100644
}
else
{
@@ -1733,8 +1742,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
@@ -1802,8 +1811,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
|| area->map_area_end - start < area->size)
return NULL;
@@ -138,7 +138,7 @@ index cee8d1d5041..7c26c79649e 100644
}
}
@@ -1744,6 +1752,7 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
@@ -1813,6 +1821,7 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
char *reserve_start, *reserve_end;
struct alloc_area area;
char *base, *end;
@@ -146,7 +146,7 @@ index cee8d1d5041..7c26c79649e 100644
int ranges_inc;
TRACE("limit %p, size %p, top_down %#x.\n", limit, (void *)size, top_down);
@@ -1799,16 +1808,67 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
@@ -1868,16 +1877,67 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
{
/* range is split in two by the preloader reservation, try first part. */
if ((area.result = alloc_free_area_in_range( &area, base, reserve_start )))
@@ -217,7 +217,7 @@ index cee8d1d5041..7c26c79649e 100644
}
/***********************************************************************
@@ -1862,6 +1922,17 @@ static NTSTATUS map_fixed_area( void *base, size_t size, unsigned int vprot )
@@ -1931,6 +1991,17 @@ static NTSTATUS map_fixed_area( void *base, size_t size, unsigned int vprot )
return STATUS_SUCCESS;
}
@@ -235,7 +235,7 @@ index cee8d1d5041..7c26c79649e 100644
/***********************************************************************
* map_view
*
@@ -1885,7 +1956,12 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
@@ -1954,7 +2025,12 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
else if (!(ptr = alloc_free_area( (void*)(get_zero_bits_mask( zero_bits )
& (UINT_PTR)user_space_limit), size, top_down, get_unix_prot( vprot ) )))
{
@@ -249,7 +249,7 @@ index cee8d1d5041..7c26c79649e 100644
}
status = create_view( view_ret, ptr, size, vprot );
if (status != STATUS_SUCCESS) unmap_area( ptr, size );
@@ -3538,7 +3614,12 @@ void virtual_set_force_exec( BOOL enable )
@@ -3646,7 +3722,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 */

View File

@@ -1,4 +1,4 @@
From 78a4666b1a010b45f8ac13cd4be3d4cdecb3dfdc Mon Sep 17 00:00:00 2001
From 38208bd58f6c39d87fec031bd9cc996d60416614 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@wine-staging.com>
Date: Sun, 22 Nov 2020 22:35:50 -0700
Subject: [PATCH] kernelbase: Convert FILE_FLAG_OPEN_REPARSE_POINT for passing
@@ -9,11 +9,11 @@ Subject: [PATCH] kernelbase: Convert FILE_FLAG_OPEN_REPARSE_POINT for passing
1 file changed, 2 insertions(+)
diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c
index e0a75c2ad08..7eabf5aa211 100644
index d21ad299d1f..eecc23f48fc 100644
--- a/dlls/kernelbase/file.c
+++ b/dlls/kernelbase/file.c
@@ -725,6 +725,8 @@ static UINT get_nt_file_options( DWORD attributes )
options |= FILE_RANDOM_ACCESS;
@@ -727,6 +727,8 @@ static UINT get_nt_file_options( DWORD attributes )
options |= FILE_SEQUENTIAL_ONLY;
if (attributes & FILE_FLAG_WRITE_THROUGH)
options |= FILE_WRITE_THROUGH;
+ if (attributes & FILE_FLAG_OPEN_REPARSE_POINT)

View File

@@ -1,4 +1,4 @@
From 27c9c2851bb3629cb47134efe3a2162bca80aca6 Mon Sep 17 00:00:00 2001
From 9d760a7c86cff579f870d78d0d5b4a6624b22324 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@wine-staging.com>
Date: Sun, 22 Nov 2020 22:37:33 -0700
Subject: [PATCH] ntdll: Allow set_file_times_precise to work on reparse
@@ -11,12 +11,12 @@ Subject: [PATCH] ntdll: Allow set_file_times_precise to work on reparse
3 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/configure.ac b/configure.ac
index f80fbd737ef..fb71556cfa3 100644
index 4b7d72063d8..0a15b7b92ff 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2223,7 +2223,8 @@ AC_CHECK_FUNCS(\
sigprocmask \
@@ -2224,7 +2224,8 @@ AC_CHECK_FUNCS(\
symlink \
sysinfo \
tcdrain \
- thr_kill2
+ thr_kill2 \
@@ -65,10 +65,10 @@ index 490d5160761..2449ee54799 100644
CloseHandle(handle);
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index a84062df272..185f7e3bbeb 100644
index 2ee9288f500..2f0ec520288 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -1731,6 +1731,14 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr )
@@ -1728,6 +1728,14 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr )
}
@@ -83,7 +83,7 @@ index a84062df272..185f7e3bbeb 100644
#if defined(__ANDROID__) && !defined(HAVE_FUTIMENS)
static int futimens( int fd, const struct timespec spec[2] )
{
@@ -1746,7 +1754,7 @@ static int futimens( int fd, const struct timespec spec[2] )
@@ -1743,7 +1751,7 @@ static int futimens( int fd, const struct timespec spec[2] )
static BOOL set_file_times_precise( int fd, const LARGE_INTEGER *mtime,
const LARGE_INTEGER *atime, NTSTATUS *status )
{
@@ -92,7 +92,7 @@ index a84062df272..185f7e3bbeb 100644
struct timespec tv[2];
tv[0].tv_sec = tv[1].tv_sec = 0;
@@ -1762,10 +1770,16 @@ static BOOL set_file_times_precise( int fd, const LARGE_INTEGER *mtime,
@@ -1759,10 +1767,16 @@ static BOOL set_file_times_precise( int fd, const LARGE_INTEGER *mtime,
tv[1].tv_nsec = (mtime->QuadPart % 10000000) * 100;
}
#ifdef __APPLE__

View File

@@ -1,4 +1,4 @@
From 8f44306c926d3e72fea2b5ffcd8c0b5b8c32f8b0 Mon Sep 17 00:00:00 2001
From 42f756e849366ece3e83a7add81f7ddfbddcd0df Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Sat, 18 Jul 2020 09:13:29 -0600
Subject: [PATCH] server: Fix obtaining information about a symlink.
@@ -11,10 +11,10 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
3 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index c4efbc40878..4c0e864a011 100644
index c6a02995e99..9e27f848e90 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -1989,7 +1989,7 @@ static NTSTATUS fill_file_info( const struct stat *st, ULONG attr, void *ptr,
@@ -1986,7 +1986,7 @@ static NTSTATUS fill_file_info( const struct stat *st, ULONG attr, void *ptr,
}
@@ -23,7 +23,7 @@ index c4efbc40878..4c0e864a011 100644
{
data_size_t size = 1024;
NTSTATUS ret;
@@ -2002,6 +2002,7 @@ static NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name )
@@ -1999,6 +1999,7 @@ static NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name )
SERVER_START_REQ( get_handle_unix_name )
{
req->handle = wine_server_obj_handle( handle );
@@ -31,7 +31,7 @@ index c4efbc40878..4c0e864a011 100644
wine_server_set_reply( req, name, size );
ret = wine_server_call( req );
size = reply->name_len;
@@ -2197,7 +2198,7 @@ static NTSTATUS get_mountmgr_fs_info( HANDLE handle, int fd, struct mountmgr_uni
@@ -2194,7 +2195,7 @@ static NTSTATUS get_mountmgr_fs_info( HANDLE handle, int fd, struct mountmgr_uni
NTSTATUS status;
int letter;
@@ -40,34 +40,34 @@ index c4efbc40878..4c0e864a011 100644
letter = find_dos_device( unix_name );
free( unix_name );
@@ -4415,7 +4416,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
if (fd_get_file_info( fd, options, &st, &attr ) == -1) io->u.Status = errno_to_status( errno );
@@ -4413,7 +4414,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
if (fd_get_file_info( fd, options, &st, &attr ) == -1) status = errno_to_status( errno );
else if (!S_ISREG(st.st_mode) && !S_ISDIR(st.st_mode))
io->u.Status = STATUS_INVALID_INFO_CLASS;
- else if (!(io->u.Status = server_get_unix_name( handle, &unix_name )))
+ else if (!(io->u.Status = server_get_unix_name( handle, &unix_name, FALSE )))
status = STATUS_INVALID_INFO_CLASS;
- else if (!(status = server_get_unix_name( handle, &unix_name )))
+ else if (!(status = server_get_unix_name( handle, &unix_name, FALSE )))
{
LONG name_len = len - FIELD_OFFSET(FILE_ALL_INFORMATION, NameInformation.FileName);
@@ -4476,7 +4477,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
@@ -4474,7 +4475,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
FILE_NAME_INFORMATION *info = ptr;
char *unix_name;
- if (!(io->u.Status = server_get_unix_name( handle, &unix_name )))
+ if (!(io->u.Status = server_get_unix_name( handle, &unix_name, FALSE )))
- if (!(status = server_get_unix_name( handle, &unix_name )))
+ if (!(status = server_get_unix_name( handle, &unix_name, FALSE )))
{
LONG name_len = len - FIELD_OFFSET(FILE_NAME_INFORMATION, FileName);
io->u.Status = fill_name_info( unix_name, info, &name_len );
@@ -4490,7 +4491,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
status = fill_name_info( unix_name, info, &name_len );
@@ -4488,7 +4489,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
FILE_NETWORK_OPEN_INFORMATION *info = ptr;
char *unix_name;
- if (!(io->u.Status = server_get_unix_name( handle, &unix_name )))
+ if (!(io->u.Status = server_get_unix_name( handle, &unix_name, FALSE )))
- if (!(status = server_get_unix_name( handle, &unix_name )))
+ if (!(status = server_get_unix_name( handle, &unix_name, FALSE )))
{
ULONG attributes;
struct stat st;
@@ -6058,7 +6059,7 @@ NTSTATUS create_reparse_point(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
@@ -6038,7 +6039,7 @@ NTSTATUS create_reparse_point(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
if ((status = server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL )))
return status;
@@ -76,7 +76,7 @@ index c4efbc40878..4c0e864a011 100644
goto cleanup;
src_allocated = TRUE;
if (flags == SYMLINK_FLAG_RELATIVE)
@@ -6339,7 +6340,7 @@ NTSTATUS get_reparse_point(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out
@@ -6319,7 +6320,7 @@ NTSTATUS get_reparse_point(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out
if ((status = server_get_unix_fd( handle, FILE_ANY_ACCESS, &dest_fd, &needs_close, NULL, NULL )))
return status;
@@ -85,7 +85,7 @@ index c4efbc40878..4c0e864a011 100644
goto cleanup;
if ((status = get_symlink_properties( unix_src, unix_dest, &unix_dest_len, &buffer->ReparseTag,
@@ -6457,7 +6458,7 @@ NTSTATUS remove_reparse_point(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
@@ -6437,7 +6438,7 @@ NTSTATUS remove_reparse_point(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
if ((status = server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL )))
return status;
@@ -94,7 +94,7 @@ index c4efbc40878..4c0e864a011 100644
goto cleanup;
TRACE( "Deleting symlink %s\n", unix_name );
@@ -7564,7 +7565,7 @@ NTSTATUS WINAPI NtQueryObject( HANDLE handle, OBJECT_INFORMATION_CLASS info_clas
@@ -7548,7 +7549,7 @@ NTSTATUS WINAPI NtQueryObject( HANDLE handle, OBJECT_INFORMATION_CLASS info_clas
/* first try as a file object */

View File

@@ -1,4 +1,4 @@
From 0487d1a9007c970043397a02b787d6446722e15c Mon Sep 17 00:00:00 2001
From e1e438f9089561a1fd7e80db9274c720be46b43b Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Mon, 31 Aug 2020 23:55:29 -0500
Subject: [PATCH] ntdll: Get rid of the direct futex path for condition
@@ -80,10 +80,10 @@ index 6edf104c5e9..4b92379a0ff 100644
if (flags & RTL_CONDITION_VARIABLE_LOCKMODE_SHARED)
RtlAcquireSRWLockShared( lock );
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
index 1fb2d79dc8e..73f22b83b3d 100644
index 3cf19b16c4e..f1767f2b568 100644
--- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
@@ -1817,8 +1817,6 @@ static struct unix_funcs unix_funcs =
@@ -1876,8 +1876,6 @@ static struct unix_funcs unix_funcs =
fast_RtlAcquireSRWLockShared,
fast_RtlReleaseSRWLockExclusive,
fast_RtlReleaseSRWLockShared,
@@ -93,10 +93,10 @@ index 1fb2d79dc8e..73f22b83b3d 100644
ntdll_ceil,
ntdll_cos,
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
index 302698dc5b6..45472a72ed8 100644
index 42ac52c9704..99be558da12 100644
--- a/dlls/ntdll/unix/sync.c
+++ b/dlls/ntdll/unix/sync.c
@@ -169,23 +169,6 @@ static int *get_futex(void **ptr)
@@ -170,23 +170,6 @@ static int *get_futex(void **ptr)
return NULL;
}
@@ -120,7 +120,7 @@ index 302698dc5b6..45472a72ed8 100644
#endif
@@ -2749,50 +2732,6 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock )
@@ -2842,50 +2825,6 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock )
return STATUS_SUCCESS;
}
@@ -171,7 +171,7 @@ index 302698dc5b6..45472a72ed8 100644
#else
NTSTATUS CDECL fast_RtlTryAcquireSRWLockExclusive( RTL_SRWLOCK *lock )
@@ -2825,14 +2764,4 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock )
@@ -2918,14 +2857,4 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock )
return STATUS_NOT_IMPLEMENTED;
}
@@ -187,10 +187,10 @@ index 302698dc5b6..45472a72ed8 100644
-
#endif
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index bac75ac2d13..07ce95230f1 100644
index a5d63e918cc..452eb2790ab 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -103,10 +103,7 @@ extern NTSTATUS CDECL fast_RtlTryAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLS
@@ -102,10 +102,7 @@ extern NTSTATUS CDECL fast_RtlTryAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLS
extern NTSTATUS CDECL fast_RtlAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
extern NTSTATUS CDECL fast_RtlReleaseSRWLockExclusive( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
extern NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
@@ -199,18 +199,18 @@ index bac75ac2d13..07ce95230f1 100644
-extern NTSTATUS CDECL fast_wait_cv( RTL_CONDITION_VARIABLE *variable, const void *value,
- const LARGE_INTEGER *timeout ) DECLSPEC_HIDDEN;
extern void CDECL virtual_release_address_space(void) DECLSPEC_HIDDEN;
extern NTSTATUS CDECL unwind_builtin_dll( ULONG type, struct _DISPATCHER_CONTEXT *dispatch,
CONTEXT *context ) DECLSPEC_HIDDEN;
diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h
index ca668995562..1fab653728c 100644
index 94e0096089b..9d9842b4072 100644
--- a/dlls/ntdll/unixlib.h
+++ b/dlls/ntdll/unixlib.h
@@ -26,7 +26,7 @@
struct _DISPATCHER_CONTEXT;
/* increment this when you change the function table */
-#define NTDLL_UNIXLIB_VERSION 123
+#define NTDLL_UNIXLIB_VERSION 124
-#define NTDLL_UNIXLIB_VERSION 125
+#define NTDLL_UNIXLIB_VERSION 126
struct unix_funcs
{

View File

@@ -1,4 +1,4 @@
From 10e7bf638ebb34278c5fe3adcb360556aa73d999 Mon Sep 17 00:00:00 2001
From 8071d356061b69182746fda71ec9f1b0e9a40e3d Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Sun, 22 Nov 2020 20:51:10 -0600
Subject: [PATCH] ntdll: Reimplement SRW locks on top of Win32 futexes.
@@ -392,10 +392,10 @@ index 4b92379a0ff..2edc9f8d558 100644
/***********************************************************************
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
index 5b2619ff92f..c6f9227dd90 100644
index f1767f2b568..99268914734 100644
--- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
@@ -1872,12 +1872,6 @@ static struct unix_funcs unix_funcs =
@@ -1870,12 +1870,6 @@ static struct unix_funcs unix_funcs =
#endif
DbgUiIssueRemoteBreakin,
RtlGetSystemTimePrecise,
@@ -409,7 +409,7 @@ index 5b2619ff92f..c6f9227dd90 100644
ntdll_ceil,
ntdll_cos,
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
index 45b0b03bda0..82094813570 100644
index 99be558da12..5a82cf7e539 100644
--- a/dlls/ntdll/unix/sync.c
+++ b/dlls/ntdll/unix/sync.c
@@ -118,8 +118,6 @@ static inline ULONGLONG monotonic_counter(void)
@@ -455,7 +455,7 @@ index 45b0b03bda0..82094813570 100644
#endif
@@ -2535,289 +2513,3 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG
@@ -2572,289 +2550,3 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG
}
#endif
@@ -746,7 +746,7 @@ index 45b0b03bda0..82094813570 100644
-
-#endif
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index 2f642ed77f7..9e500b3dc95 100644
index 452eb2790ab..8f85eb5ebc6 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -96,12 +96,6 @@ extern void (WINAPI *pLdrInitializeThunk)(CONTEXT*,void**,ULONG_PTR,ULONG_PT
@@ -761,17 +761,17 @@ index 2f642ed77f7..9e500b3dc95 100644
-extern NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
extern LONGLONG CDECL fast_RtlGetSystemTimePrecise(void) DECLSPEC_HIDDEN;
extern void CDECL virtual_release_address_space(void) DECLSPEC_HIDDEN;
extern NTSTATUS CDECL unwind_builtin_dll( ULONG type, struct _DISPATCHER_CONTEXT *dispatch,
diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h
index e90000c13e9..742f1a7b681 100644
index 9d9842b4072..4aaa20d1795 100644
--- a/dlls/ntdll/unixlib.h
+++ b/dlls/ntdll/unixlib.h
@@ -26,7 +26,7 @@
struct _DISPATCHER_CONTEXT;
/* increment this when you change the function table */
-#define NTDLL_UNIXLIB_VERSION 124
+#define NTDLL_UNIXLIB_VERSION 125
-#define NTDLL_UNIXLIB_VERSION 126
+#define NTDLL_UNIXLIB_VERSION 127
struct unix_funcs
{

View File

@@ -1,4 +1,4 @@
From d1536aa5b9df87c3764dc2090bdde76f708fda94 Mon Sep 17 00:00:00 2001
From f15d4797f17e6b45056fd1d211f54d4810c31e67 Mon Sep 17 00:00:00 2001
From: Qian Hong <qhong@codeweavers.com>
Date: Wed, 9 Sep 2015 05:31:18 +0800
Subject: [PATCH] ntdll: Initialize mod_name to zero.
@@ -8,11 +8,11 @@ Subject: [PATCH] ntdll: Initialize mod_name to zero.
1 file changed, 2 insertions(+)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 42cdc628021..ef1e28af2e7 100644
index f9dd2e8c61a..ba43de24576 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -1299,6 +1299,8 @@ static NTSTATUS MODULE_InitDLL( WINE_MODREF *wm, UINT reason, LPVOID lpReserved
unix_funcs->init_builtin_dll( wm->ldr.DllBase );
@@ -1424,6 +1424,8 @@ static NTSTATUS MODULE_InitDLL( WINE_MODREF *wm, UINT reason, LPVOID lpReserved
init_builtin_dll( wm->ldr.DllBase );
if (!entry) return STATUS_SUCCESS;
+ memset( mod_name, 0, sizeof(mod_name) );
@@ -21,5 +21,5 @@ index 42cdc628021..ef1e28af2e7 100644
{
size_t len = min( wm->ldr.BaseDllName.Length, sizeof(mod_name)-sizeof(WCHAR) );
--
2.27.0
2.30.2

View File

@@ -1,42 +0,0 @@
From 40088e644ecba6005de000c49b65cb168cc9ad5d Mon Sep 17 00:00:00 2001
From: Martin Storsjo <martin@martin.st>
Date: Wed, 21 Jun 2017 11:42:40 +0300
Subject: [PATCH] configure: Avoid clobbering x18 on arm64 within wine
On aarch64/arm64 on linux, the compiler is free to use x18 for normal
code generation (while the register is reserved on iOS/darwin, and
on windows).
If targeting arm64, check for the flags that allows this register to
be left untouched (the flag is supported both by gcc and clang).
Similar issues can still pop up as soon as system library functions
that happen to touch x18 are called, unless the system libraries have
been built with the same flag.
Signed-off-by: Martin Storsjo <martin@martin.st>
---
configure.ac | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/configure.ac b/configure.ac
index b0981767977..67e82744dae 100644
--- a/configure.ac
+++ b/configure.ac
@@ -219,8 +219,13 @@ case $host in
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>]], [[void func(__builtin_ms_va_list *args);]])],
[wine_cv_builtin_ms_va_list=yes],[wine_cv_builtin_ms_va_list=no])])
test $wine_cv_builtin_ms_va_list != no || AC_MSG_ERROR([You need clang >= 5.0 to build Wine for arm64.])
+
enable_wow64=${enable_wow64:-yes}
enable_wow64win=${enable_wow64win:-yes}
+ # Avoid clobbering the x18 register which is reserved in windows.
+ # This isn't complete/enough unless all of the system libraries have
+ # been built with the same flag though.
+ WINE_TRY_CFLAGS([-ffixed-x18], [CFLAGS="$CFLAGS -ffixed-x18"])
;;
i[[3456789]]86*)
enable_win16=${enable_win16:-yes}
--
2.30.2

View File

@@ -1,60 +0,0 @@
From 53921ff97159fcd4a060568df463886192d41420 Mon Sep 17 00:00:00 2001
From: Martin Storsjo <martin@martin.st>
Date: Wed, 16 Aug 2017 23:48:40 +0300
Subject: [PATCH] ntdll: Always restore TEB to x18 on aarch 64 on return from
calls to builtins
This requires always enabling relaying of calls though.
This isn't enough for cases where builtin functions call back into
the user code though, but works well enough for all pratical cases
I've run so far.
This does give a bit of performance overhead, but it makes it
possible to run most real arm64 binaries (all I've tried).
Signed-off-by: Martin Storsjo <martin@martin.st>
---
dlls/ntdll/loader.c | 8 +++++++-
dlls/ntdll/relay.c | 4 ++++
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 092c47eac3b..05e36598cdb 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -1890,7 +1890,13 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name,
if (is_builtin)
{
- if (TRACE_ON(relay)) RELAY_SetupDLL( *module );
+#ifdef __aarch64__
+ /* Always enable relay entry points on aarch64, to allow restoring
+ * the TEB to x18. */
+#else
+ if (TRACE_ON(relay))
+#endif
+ RELAY_SetupDLL( *module );
}
else
{
diff --git a/dlls/ntdll/relay.c b/dlls/ntdll/relay.c
index be2dc833377..e29496a8c7a 100644
--- a/dlls/ntdll/relay.c
+++ b/dlls/ntdll/relay.c
@@ -691,8 +691,12 @@ static LONGLONG WINAPI relay_call( struct relay_descr *descr, unsigned int idx,
{
unsigned int nb_args;
void *func = relay_trace_entry( descr, idx, stack, &nb_args );
+ void *teb;
LONGLONG ret = call_entry_point( func, nb_args, stack );
relay_trace_exit( descr, idx, stack[-1], ret );
+ teb = NtCurrentTeb();
+ /* Restore the TEB pointer, in case the builtin call clobbered it. */
+ __asm__ __volatile__( "mov x18, %0" : : "r" (teb) );
return ret;
}
--
2.20.1

View File

@@ -1 +0,0 @@
Fixes: [38780] AArch64 platforms: register X18 (TEB) must remain reserved for Wine to run 64-bit ARM Windows applications.

View File

@@ -51,13 +51,13 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "7bedd313c88d7b1fd4fe7b04c20bb0ec91605cac"
echo "7f144646ffac6f3632d0c39b217dbd433c1154a0"
}
# Show version information
version()
{
echo "Wine Staging 6.14"
echo "Wine Staging 6.15"
echo "Copyright (C) 2014-2019 the Wine Staging project authors."
echo "Copyright (C) 2018-2020 Alistair Leslie-Hughes"
echo ""
@@ -169,7 +169,6 @@ patch_enable_all ()
enable_ntdll_Syscall_Emulation="$1"
enable_ntdll_WRITECOPY="$1"
enable_ntdll_Zero_mod_name="$1"
enable_ntdll_aarch_TEB="$1"
enable_ntdll_ext4_case_folder="$1"
enable_ntoskrnl_Stubs="$1"
enable_nvapi_Stub_DLL="$1"
@@ -241,7 +240,6 @@ patch_enable_all ()
enable_windowscodecs_TIFF_Support="$1"
enable_wine_inf_Directory_ContextMenuHandlers="$1"
enable_wine_inf_Dummy_CA_Certificate="$1"
enable_wine_inf_Performance="$1"
enable_wineboot_HKEY_DYN_DATA="$1"
enable_wineboot_ProxySettings="$1"
enable_winecfg_Libraries="$1"
@@ -549,9 +547,6 @@ patch_enable ()
ntdll-Zero_mod_name)
enable_ntdll_Zero_mod_name="$2"
;;
ntdll-aarch-TEB)
enable_ntdll_aarch_TEB="$2"
;;
ntdll-ext4-case-folder)
enable_ntdll_ext4_case_folder="$2"
;;
@@ -765,9 +760,6 @@ patch_enable ()
wine.inf-Dummy_CA_Certificate)
enable_wine_inf_Dummy_CA_Certificate="$2"
;;
wine.inf-Performance)
enable_wine_inf_Performance="$2"
;;
wineboot-HKEY_DYN_DATA)
enable_wineboot_HKEY_DYN_DATA="$2"
;;
@@ -2391,7 +2383,7 @@ fi
# | * [#49692] Multiple applications need a Media Foundation media source implementation
# |
# | Modified files:
# | * dlls/mf/topology.c, dlls/winegstreamer/Makefile.in, dlls/winegstreamer/audioconvert.c,
# | * dlls/mf/topology.c, dlls/mfplat/main.c, dlls/winegstreamer/Makefile.in, dlls/winegstreamer/audioconvert.c,
# | dlls/winegstreamer/colorconvert.c, dlls/winegstreamer/decode_transform.c, dlls/winegstreamer/gst_private.h,
# | dlls/winegstreamer/media_source.c, dlls/winegstreamer/mfplat.c, dlls/winegstreamer/quartz_parser.c,
# | dlls/winegstreamer/wg_parser.c, dlls/winegstreamer/winegstreamer_classes.idl, include/mfidl.idl, include/wmcodecdsp.idl
@@ -2434,6 +2426,7 @@ if test "$enable_mfplat_streaming_support" -eq 1; then
patch_apply mfplat-streaming-support/0035-winegstreamer-Don-t-rely-on-max_size-in-unseekable-p.patch
patch_apply mfplat-streaming-support/0036-winegstreamer-Implement-MFT_MESSAGE_COMMAND_FLUSH-fo.patch
patch_apply mfplat-streaming-support/0037-winegstreamer-Default-Frame-size-if-one-isn-t-availa.patch
patch_apply mfplat-streaming-support/0038-mfplat-Stub-out-MFCreateDXGIDeviceManager-to-avoid-t.patch
fi
# Patchset mmsystem.dll16-MIDIHDR_Refcount
@@ -2789,19 +2782,6 @@ if test "$enable_ntdll_Zero_mod_name" -eq 1; then
patch_apply ntdll-Zero_mod_name/0001-ntdll-Initialize-mod_name-to-zero.patch
fi
# Patchset ntdll-aarch-TEB
# |
# | This patchset fixes the following Wine bugs:
# | * [#38780] AArch64 platforms: register X18 (TEB) must remain reserved for Wine to run 64-bit ARM Windows applications.
# |
# | Modified files:
# | * configure.ac, dlls/ntdll/loader.c, dlls/ntdll/relay.c
# |
if test "$enable_ntdll_aarch_TEB" -eq 1; then
patch_apply ntdll-aarch-TEB/0001-configure-Avoid-clobbering-x18-on-arm64-within-wine.patch
patch_apply ntdll-aarch-TEB/0002-ntdll-Always-restore-TEB-to-x18-on-aarch-64-on-retur.patch
fi
# Patchset ntdll-ext4-case-folder
# |
# | This patchset fixes the following Wine bugs:
@@ -3743,21 +3723,6 @@ if test "$enable_wine_inf_Dummy_CA_Certificate" -eq 1; then
patch_apply wine.inf-Dummy_CA_Certificate/0001-wine.inf.in-Add-invalid-dummy-certificate-to-CA-cert.patch
fi
# Patchset wine.inf-Performance
# |
# | This patchset fixes the following Wine bugs:
# | * [#33661] Add performance library registry keys needed by MS SQL Server Management Studio Express 2008 R2
# | * [#33037] Visual Studio 6 can't be installed with WinVer >= Win2K (missing HKEY_PERFORMANCE_DATA 230, process object)
# |
# | Modified files:
# | * dlls/advapi32/tests/registry.c, loader/wine.inf.in
# |
if test "$enable_wine_inf_Performance" -eq 1; then
patch_apply wine.inf-Performance/0001-wine.inf-Add-registry-keys-for-Windows-Performance-L.patch
patch_apply wine.inf-Performance/0002-wine.inf-Add-Counters-to-the-perflib-key-as-an-alias.patch
patch_apply wine.inf-Performance/0003-advapi32-tests-Add-test-for-perflib-registry-key.patch
fi
# Patchset wineboot-HKEY_DYN_DATA
# |
# | This patchset fixes the following Wine bugs:

View File

@@ -1,27 +0,0 @@
From cb92c3e3611dd8d8d97992b79e1c9fc449ff2569 Mon Sep 17 00:00:00 2001
From: Daniel Jelinski <djelinski1@gmail.com>
Date: Sun, 8 Feb 2015 06:32:34 +0100
Subject: wine.inf: Add registry keys for Windows Performance Library.
---
loader/wine.inf.in | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index 315ef29..2de7e61 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -492,6 +492,10 @@ HKLM,%CurrentVersionNT%\Language Pack,,16
HKLM,%CurrentVersionNT%\NetworkCards,,16
HKLM,%CurrentVersionNT%\OpenGLDrivers,,16
HKLM,%CurrentVersionNT%\Perflib,,16
+HKLM,%CurrentVersionNT%\Perflib,Last Counter,0x10003,1846
+HKLM,%CurrentVersionNT%\Perflib,Last Help,0x10003,1847
+HKLM,%CurrentVersionNT%\Perflib\009,Counter,0x10002,1,1847,1846,End Marker
+HKLM,%CurrentVersionNT%\Perflib\009,Help,0x10002,1847,End Marker
HKLM,%CurrentVersionNT%\Ports,,16
HKLM,%CurrentVersionNT%\Print,,16
HKLM,%CurrentVersionNT%\ProfileList,,16
--
2.4.5

View File

@@ -1,26 +0,0 @@
From 9a3d921b80c5c602bbb130457f0f67c79da44660 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Tue, 23 May 2017 14:59:15 +0800
Subject: wine.inf: Add 'Counters' to the perflib key as an alias for
'Counter'.
Visual Studio 6.0 setup depends on this.
---
loader/wine.inf.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index 6f6ae55b0f7..7fa93a62630 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -522,6 +522,7 @@ HKLM,%CurrentVersionNT%\Perflib,,16
HKLM,%CurrentVersionNT%\Perflib,Last Counter,0x10003,1846
HKLM,%CurrentVersionNT%\Perflib,Last Help,0x10003,1847
HKLM,%CurrentVersionNT%\Perflib\009,Counter,0x10002,1,1847,1846,End Marker
+HKLM,%CurrentVersionNT%\Perflib\009,Counters,0x10002,1,1847,1846,End Marker
HKLM,%CurrentVersionNT%\Perflib\009,Help,0x10002,1847,End Marker
HKLM,%CurrentVersionNT%\Ports,,16
HKLM,%CurrentVersionNT%\Print,,16
--
2.12.2

View File

@@ -1,63 +0,0 @@
From 5a0796af64d474437f7c26620efe6560f8961b55 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Mon, 29 May 2017 01:59:36 +0200
Subject: advapi32/tests: Add test for perflib registry key.
---
dlls/advapi32/tests/registry.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
index ddde9059222..f6b7736c83c 100644
--- a/dlls/advapi32/tests/registry.c
+++ b/dlls/advapi32/tests/registry.c
@@ -3293,6 +3293,38 @@ static void test_classesroot_mask(void)
RegCloseKey( hkey );
}
+static void test_perflib_key(void)
+{
+ DWORD size;
+ LONG ret;
+ HKEY key;
+
+ ret = RegOpenKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009", &key);
+ ok(ret == ERROR_SUCCESS, "RegOpenKeyA failed with error %u\n", ret);
+
+ ret = RegQueryValueExA(key, "Counter", NULL, NULL, NULL, &size);
+ if (ret != ERROR_SUCCESS)
+ {
+ skip("Perflib\\009\\Counter does not exist, skipping perflib test\n");
+ goto done;
+ }
+ ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed with error %u\n", ret);
+
+ /* Windows only compares the first few characters of the value name.
+ * On Windows XP / 2003, it is sufficient to use "Cou", newer versions
+ * require a longer substring. */
+
+ ret = RegQueryValueExA(key, "Counters", NULL, NULL, NULL, &size);
+ ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed with error %u\n", ret);
+ ret = RegQueryValueExA(key, "Counter2", NULL, NULL, NULL, &size);
+ todo_wine ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed with error %u\n", ret);
+ ret = RegQueryValueExA(key, "CounterWine", NULL, NULL, NULL, &size);
+ todo_wine ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed with error %u\n", ret);
+
+done:
+ RegCloseKey(key);
+}
+
static void test_deleted_key(void)
{
HKEY hkey, hkey2;
@@ -3741,6 +3773,7 @@ START_TEST(registry)
test_classesroot();
test_classesroot_enum();
test_classesroot_mask();
+ test_perflib_key();
test_reg_save_key();
test_reg_load_key();
test_reg_unload_key();
--
2.12.2

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