mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-09-13 09:17:20 -07:00
Rebase against 18ae539c914a9b5a89f63d8cf9c2a21273eccc6c.
This commit is contained in:
parent
f6954e6e77
commit
046f6604b7
@ -1,14 +1,14 @@
|
||||
From 7fbcb02d4e88819dead5b944c3b4676fb4c3bc35 Mon Sep 17 00:00:00 2001
|
||||
From 1deb289cab2a4271ec84b4636e39a467bd52b117 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.
|
||||
Subject: [PATCH 3/7] ntdll: Implement storing DOS attributes in NtCreateFile.
|
||||
|
||||
---
|
||||
dlls/ntdll/tests/directory.c | 24 +++++------
|
||||
dlls/ntdll/unix/file.c | 78 +++++++++++++++++++++++-------------
|
||||
dlls/ntdll/tests/directory.c | 24 ++++++------
|
||||
dlls/ntdll/unix/file.c | 74 +++++++++++++++++++++++-------------
|
||||
include/wine/port.h | 2 +
|
||||
libs/port/xattr.c | 20 +++++++++
|
||||
4 files changed, 83 insertions(+), 41 deletions(-)
|
||||
libs/port/xattr.c | 20 ++++++++++
|
||||
4 files changed, 81 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/directory.c b/dlls/ntdll/tests/directory.c
|
||||
index 248ed99ab20..e0f4debc624 100644
|
||||
@ -60,10 +60,10 @@ index 248ed99ab20..e0f4debc624 100644
|
||||
}
|
||||
testfiles[i].nfound++;
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index e3477f5cb5b..73bacabb4f3 100644
|
||||
index d1f1b8c8f30..32653a110a2 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -3572,6 +3572,20 @@ void CDECL set_show_dot_files( BOOL enable )
|
||||
@@ -3580,6 +3580,20 @@ void CDECL set_show_dot_files( BOOL enable )
|
||||
show_dot_files = enable;
|
||||
}
|
||||
|
||||
@ -84,7 +84,7 @@ index e3477f5cb5b..73bacabb4f3 100644
|
||||
|
||||
/******************************************************************************
|
||||
* NtCreateFile (NTDLL.@)
|
||||
@@ -3581,6 +3595,10 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
@@ -3589,6 +3603,10 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
ULONG attributes, ULONG sharing, ULONG disposition,
|
||||
ULONG options, void *ea_buffer, ULONG ea_length )
|
||||
{
|
||||
@ -92,10 +92,10 @@ index e3477f5cb5b..73bacabb4f3 100644
|
||||
+ OBJECT_ATTRIBUTES unix_attr;
|
||||
+ data_size_t len;
|
||||
+ struct object_attributes *objattr;
|
||||
ANSI_STRING unix_name;
|
||||
char *unix_name;
|
||||
BOOL created = FALSE;
|
||||
|
||||
@@ -3623,36 +3641,34 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
@@ -3631,36 +3649,34 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
io->u.Status = STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@ -106,11 +106,14 @@ index e3477f5cb5b..73bacabb4f3 100644
|
||||
- OBJECT_ATTRIBUTES unix_attr = *attr;
|
||||
- data_size_t len;
|
||||
- struct object_attributes *objattr;
|
||||
-
|
||||
+ WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
|
||||
+ return io->u.Status;
|
||||
+ }
|
||||
|
||||
- unix_attr.ObjectName = &empty_string; /* we send the unix name instead */
|
||||
- if ((io->u.Status = alloc_object_attributes( &unix_attr, &objattr, &len )))
|
||||
- {
|
||||
- RtlFreeAnsiString( &unix_name );
|
||||
- RtlFreeHeap( GetProcessHeap(), 0, unix_name );
|
||||
- return io->u.Status;
|
||||
- }
|
||||
- SERVER_START_REQ( create_file )
|
||||
@ -121,23 +124,17 @@ index e3477f5cb5b..73bacabb4f3 100644
|
||||
- req->options = options;
|
||||
- req->attrs = attributes;
|
||||
- wine_server_add_data( req, objattr, len );
|
||||
- wine_server_add_data( req, unix_name.Buffer, unix_name.Length );
|
||||
- wine_server_add_data( req, unix_name, strlen(unix_name) );
|
||||
- io->u.Status = wine_server_call( req );
|
||||
- *handle = wine_server_ptr_handle( reply->handle );
|
||||
- }
|
||||
- SERVER_END_REQ;
|
||||
- free( objattr );
|
||||
- RtlFreeAnsiString( &unix_name );
|
||||
+ WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
|
||||
+ return io->u.Status;
|
||||
}
|
||||
- else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
|
||||
+
|
||||
+ unix_attr = *attr;
|
||||
+ unix_attr.ObjectName = &empty_string; /* we send the unix name instead */
|
||||
+ if ((io->u.Status = alloc_object_attributes( &unix_attr, &objattr, &len )))
|
||||
+ {
|
||||
+ RtlFreeAnsiString( &unix_name );
|
||||
RtlFreeHeap( GetProcessHeap(), 0, unix_name );
|
||||
+ return io->u.Status;
|
||||
+ }
|
||||
+
|
||||
@ -149,32 +146,33 @@ index e3477f5cb5b..73bacabb4f3 100644
|
||||
+ req->options = options;
|
||||
+ req->attrs = attributes;
|
||||
+ wine_server_add_data( req, objattr, len );
|
||||
+ wine_server_add_data( req, unix_name.Buffer, unix_name.Length );
|
||||
+ wine_server_add_data( req, unix_name, strlen(unix_name) );
|
||||
+ io->u.Status = wine_server_call( req );
|
||||
+ *handle = wine_server_ptr_handle( reply->handle );
|
||||
+ }
|
||||
}
|
||||
- else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
|
||||
+ SERVER_END_REQ;
|
||||
+ free( objattr );
|
||||
|
||||
if (io->u.Status == STATUS_SUCCESS)
|
||||
{
|
||||
@@ -3674,6 +3690,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
@@ -3682,6 +3698,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
io->Information = FILE_OVERWRITTEN;
|
||||
break;
|
||||
}
|
||||
+ if (io->Information == FILE_CREATED)
|
||||
+ {
|
||||
+ /* set any DOS extended attributes */
|
||||
+ set_file_info( unix_name.Buffer, attributes );
|
||||
+ set_file_info( unix_name, attributes );
|
||||
+ }
|
||||
}
|
||||
else if (io->u.Status == STATUS_TOO_MANY_OPENED_FILES)
|
||||
{
|
||||
@@ -3681,6 +3702,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
@@ -3689,6 +3710,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
if (!once++) ERR_(winediag)( "Too many open files, ulimit -n probably needs to be increased\n" );
|
||||
}
|
||||
|
||||
+ RtlFreeAnsiString( &unix_name );
|
||||
+ RtlFreeHeap( GetProcessHeap(), 0, unix_name );
|
||||
return io->u.Status;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 01a10dd50491ca0162a5293836cf9b9a3d3c0e34 Mon Sep 17 00:00:00 2001
|
||||
From 78f53ba7362227cf5d725d6d5b70e06267597b5e Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Wed, 20 Aug 2014 11:26:48 -0600
|
||||
Subject: [PATCH] ntdll: Perform the Unix-style hidden file check within the
|
||||
@ -9,10 +9,10 @@ Subject: [PATCH] ntdll: Perform the Unix-style hidden file check within the
|
||||
1 file changed, 9 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index 496c92265e9..6f3772d20be 100644
|
||||
index 33fa49d0dea..a88daf1f7f3 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -1217,15 +1217,15 @@ static BOOLEAN get_dir_case_sensitivity( const char *dir )
|
||||
@@ -1238,15 +1238,15 @@ static BOOLEAN get_dir_case_sensitivity( const char *dir )
|
||||
*
|
||||
* Check if the specified file should be hidden based on its name and the show dot files option.
|
||||
*/
|
||||
@ -33,7 +33,7 @@ index 496c92265e9..6f3772d20be 100644
|
||||
if (p == end || *p != '.') return FALSE;
|
||||
/* make sure it isn't '.' or '..' */
|
||||
if (p + 1 == end) return FALSE;
|
||||
@@ -1493,6 +1493,10 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr )
|
||||
@@ -1571,6 +1571,10 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr )
|
||||
RtlFreeHeap( GetProcessHeap(), 0, parent_path );
|
||||
}
|
||||
*attr |= get_file_attributes( st );
|
||||
@ -44,7 +44,7 @@ index 496c92265e9..6f3772d20be 100644
|
||||
len = xattr_get( path, SAMBA_XATTR_DOS_ATTRIB, hexattr, sizeof(hexattr)-1 );
|
||||
if (len == -1) return ret;
|
||||
*attr |= get_file_xattr( hexattr, len );
|
||||
@@ -1684,11 +1688,6 @@ static NTSTATUS get_dir_data_entry( struct dir_data *dir_data, void *info_ptr, I
|
||||
@@ -2081,11 +2085,6 @@ static NTSTATUS get_dir_data_entry( struct dir_data *dir_data, void *info_ptr, I
|
||||
if (class != FileNamesInformation)
|
||||
{
|
||||
if (st.st_dev != dir_data->id.dev) st.st_ino = 0; /* ignore inode if on a different device */
|
||||
@ -56,15 +56,15 @@ index 496c92265e9..6f3772d20be 100644
|
||||
fill_file_info( &st, attributes, info, class );
|
||||
}
|
||||
|
||||
@@ -3301,7 +3300,6 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
|
||||
@@ -3857,7 +3856,6 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
|
||||
info->AllocationSize = std.AllocationSize;
|
||||
info->EndOfFile = std.EndOfFile;
|
||||
info->FileAttributes = basic.FileAttributes;
|
||||
- if (is_hidden_file( attr->ObjectName )) info->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
|
||||
}
|
||||
RtlFreeAnsiString( &unix_name );
|
||||
RtlFreeHeap( GetProcessHeap(), 0, unix_name );
|
||||
}
|
||||
@@ -3328,10 +3326,7 @@ NTSTATUS WINAPI NtQueryAttributesFile( const OBJECT_ATTRIBUTES *attr, FILE_BASIC
|
||||
@@ -3884,10 +3882,7 @@ NTSTATUS WINAPI NtQueryAttributesFile( const OBJECT_ATTRIBUTES *attr, FILE_BASIC
|
||||
else if (!S_ISREG(st.st_mode) && !S_ISDIR(st.st_mode))
|
||||
status = STATUS_INVALID_INFO_CLASS;
|
||||
else
|
||||
@ -72,7 +72,7 @@ index 496c92265e9..6f3772d20be 100644
|
||||
status = fill_file_info( &st, attributes, info, FileBasicInformation );
|
||||
- if (is_hidden_file( attr->ObjectName )) info->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
|
||||
- }
|
||||
RtlFreeAnsiString( &unix_name );
|
||||
RtlFreeHeap( GetProcessHeap(), 0, unix_name );
|
||||
}
|
||||
else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), status );
|
||||
--
|
||||
|
@ -0,0 +1,57 @@
|
||||
From 835c102cf1c8edf8216b12ea98846cb1e3b40219 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Fri, 29 May 2015 19:57:22 +0200
|
||||
Subject: [PATCH] ntdll: Don't translate Unix virtual disks to
|
||||
FILE_DEVICE_VIRTUAL_DISK.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=36546
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
---
|
||||
Despite my sign-off, I don't profess to hold an opinion on whether this bug
|
||||
should be solved, but multiple users have requested this behaviour, and it
|
||||
seems not wholly unreasonable. I'm submitting this patch so that the question
|
||||
at least doesn't languish on bugzilla forever.
|
||||
|
||||
This patch was tested with FutureMark's SystemInfo version 4.28; it refuses to
|
||||
install in a WINEPREFIX in tmpfs without this patch, and succeeds with it.
|
||||
|
||||
dlls/ntdll/unix/file.c | 12 ++++++++----
|
||||
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index a0ad361fcbb..a28cfe9818f 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -6001,12 +6001,15 @@ static NTSTATUS get_device_info( int fd, FILE_FS_DEVICE_INFORMATION *info )
|
||||
info->DeviceType = FILE_DEVICE_NETWORK_FILE_SYSTEM;
|
||||
info->Characteristics |= FILE_REMOTE_DEVICE;
|
||||
break;
|
||||
- case 0x01021994: /* tmpfs */
|
||||
- case 0x28cd3d45: /* cramfs */
|
||||
case 0x1373: /* devfs */
|
||||
case 0x9fa0: /* procfs */
|
||||
info->DeviceType = FILE_DEVICE_VIRTUAL_DISK;
|
||||
break;
|
||||
+ case 0x01021994: /* tmpfs */
|
||||
+ case 0x28cd3d45: /* cramfs */
|
||||
+ /* Don't map these to FILE_DEVICE_VIRTUAL_DISK by default. Virtual
|
||||
+ * filesystems are rare on Windows, and some programs refuse to
|
||||
+ * recognize them as valid. */
|
||||
default:
|
||||
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
|
||||
break;
|
||||
@@ -6050,8 +6053,9 @@ static NTSTATUS get_device_info( int fd, FILE_FS_DEVICE_INFORMATION *info )
|
||||
info->Characteristics |= FILE_REMOVABLE_MEDIA;
|
||||
break;
|
||||
case DKC_MD:
|
||||
- info->DeviceType = FILE_DEVICE_VIRTUAL_DISK;
|
||||
- break;
|
||||
+ /* Don't map these to FILE_DEVICE_VIRTUAL_DISK by default. Virtual
|
||||
+ * filesystems are rare on Windows, and some programs refuse to
|
||||
+ * recognize them as valid. */
|
||||
default:
|
||||
info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
|
||||
}
|
||||
--
|
||||
2.27.0
|
||||
|
@ -1,54 +0,0 @@
|
||||
From 6cf9c37c1e5b2211a61e8d61f97d46f89d86d753 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Fri, 29 May 2015 19:57:22 +0200
|
||||
Subject: [PATCH] ntdll: Return fake device type when systemroot is located on
|
||||
virtual disk.
|
||||
|
||||
---
|
||||
dlls/ntdll/unix/file.c | 27 +++++++++++++++++++++++++++
|
||||
1 file changed, 27 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index ca6899b50f5..4f35de4da97 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -6136,9 +6136,36 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, IO_STATUS_BLOCK *io
|
||||
else
|
||||
{
|
||||
FILE_FS_DEVICE_INFORMATION *info = buffer;
|
||||
+ ANSI_STRING unix_name;
|
||||
|
||||
if ((io->u.Status = get_device_info( fd, info )) == STATUS_SUCCESS)
|
||||
+ {
|
||||
io->Information = sizeof(*info);
|
||||
+
|
||||
+ /* Some MSI installers complain when the SystemRoot is located
|
||||
+ * on a virtual disk. Fake return values for compatibility. */
|
||||
+ if (info->DeviceType == FILE_DEVICE_VIRTUAL_DISK &&
|
||||
+ user_shared_data->NtSystemRoot[1] == ':' &&
|
||||
+ !server_get_unix_name( handle, &unix_name ))
|
||||
+ {
|
||||
+ UNICODE_STRING nt_name;
|
||||
+ if (!unix_to_nt_file_name( &unix_name, &nt_name ))
|
||||
+ {
|
||||
+ WCHAR *buf = nt_name.Buffer;
|
||||
+ if (nt_name.Length >= 6 * sizeof(WCHAR) &&
|
||||
+ buf[0] == '\\' && buf[1] == '?' && buf[2] == '?' && buf[3] == '\\' &&
|
||||
+ buf[4] == user_shared_data->NtSystemRoot[0] && buf[5] == ':')
|
||||
+ {
|
||||
+ WARN( "returning fake disk type for %s\n",
|
||||
+ debugstr_wn(buf, nt_name.Length/sizeof(WCHAR)) );
|
||||
+ info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
|
||||
+ }
|
||||
+ RtlFreeUnicodeString( &nt_name );
|
||||
+ }
|
||||
+ RtlFreeAnsiString( &unix_name );
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
}
|
||||
break;
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
@ -4,3 +4,5 @@ Fixes: [44948] Multiple apps (Spine (Mod starter for Gothic), MS Office 365 inst
|
||||
# FIXME 2: patch 0019 needs to call RemoveDirectoryW() from kernelbase, but it's stuck in kernel32 for now...
|
||||
# FIXME 3: RemoveDirectory() doesn't work anymore, I think.
|
||||
Depends: ntdll-DOS_Attributes
|
||||
# Someone needs to rewrite all of this string arithmetic.
|
||||
Disabled: true
|
||||
|
@ -1,15 +1,15 @@
|
||||
From 38833e0b211516ba54a68cb7e6f560c8caf952ff Mon Sep 17 00:00:00 2001
|
||||
From 0d4ebc66e01e42acef9db63872d38abc789d83c5 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 26 May 2017 05:17:17 +0200
|
||||
Subject: [PATCH] ntdll: Implement opening files through nt device paths.
|
||||
|
||||
---
|
||||
dlls/ntdll/tests/file.c | 25 +++++++-
|
||||
dlls/ntdll/unix/file.c | 132 +++++++++++++++++++++++++++++++++++++---
|
||||
2 files changed, 147 insertions(+), 10 deletions(-)
|
||||
dlls/ntdll/unix/file.c | 122 +++++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 145 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
|
||||
index 9e65a1f6ddd..7b65152f7cf 100644
|
||||
index 6164b0c4bde..6610edbd042 100644
|
||||
--- a/dlls/ntdll/tests/file.c
|
||||
+++ b/dlls/ntdll/tests/file.c
|
||||
@@ -135,18 +135,22 @@ static void WINAPI apc( void *arg, IO_STATUS_BLOCK *iosb, ULONG reserved )
|
||||
@ -63,30 +63,19 @@ index 9e65a1f6ddd..7b65152f7cf 100644
|
||||
|
||||
static void open_file_test(void)
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index a7f22e83e12..b93c169f856 100644
|
||||
index 3c4670e114c..6b0dbaa7b3d 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -3307,16 +3307,10 @@ static NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, ANSI_S
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
- * nt_to_unix_file_name
|
||||
- *
|
||||
- * Convert a file name from NT namespace to Unix namespace.
|
||||
- *
|
||||
- * If disposition is not FILE_OPEN or FILE_OVERWRITE, the last path
|
||||
- * element doesn't have to exist; in that case STATUS_NO_SUCH_FILE is
|
||||
- * returned, but the unix name is still filled in properly.
|
||||
+ * nt_to_unix_file_name_internal
|
||||
@@ -3279,7 +3279,7 @@ static NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, char *
|
||||
* element doesn't have to exist; in that case STATUS_NO_SUCH_FILE is
|
||||
* returned, but the unix name is still filled in properly.
|
||||
*/
|
||||
-NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
|
||||
- UINT disposition )
|
||||
+static NTSTATUS nt_to_unix_file_name_internal( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
|
||||
+ UINT disposition )
|
||||
-NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret, UINT disposition )
|
||||
+static NTSTATUS nt_to_unix_file_name_internal( const UNICODE_STRING *nameW, char **unix_name_ret, UINT disposition )
|
||||
{
|
||||
static const WCHAR unixW[] = {'u','n','i','x'};
|
||||
static const WCHAR pipeW[] = {'p','i','p','e'};
|
||||
@@ -3430,6 +3424,126 @@ NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *u
|
||||
@@ -3417,6 +3417,126 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, char *nam
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -165,7 +154,7 @@ index a7f22e83e12..b93c169f856 100644
|
||||
+ * element doesn't have to exist; in that case STATUS_NO_SUCH_FILE is
|
||||
+ * returned, but the unix name is still filled in properly.
|
||||
+ */
|
||||
+NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
|
||||
+NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret,
|
||||
+ UINT disposition )
|
||||
+{
|
||||
+ static const WCHAR systemrootW[] = {'\\','S','y','s','t','e','m','R','o','o','t','\\',0};
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 30bc9bbd5b1b413c7a574d5e9574f79a03b48d16 Mon Sep 17 00:00:00 2001
|
||||
From c1b6bc02ee2534dc2b51d8184fb0ca6717c33cf3 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Sun, 28 May 2017 05:19:30 +0200
|
||||
Subject: [PATCH] ntdll: Implement NtQueryVirtualMemory(MemorySectionName).
|
||||
@ -8,42 +8,42 @@ Contains several improvements by Sebastian Lackner <sebastian@fds-team.de>.
|
||||
---
|
||||
dlls/ntdll/unix/file.c | 2 +-
|
||||
dlls/ntdll/unix/unix_private.h | 1 +
|
||||
dlls/ntdll/unix/virtual.c | 91 +++++++++++++++++++++++++++++++++-
|
||||
dlls/ntdll/unix/virtual.c | 96 +++++++++++++++++++++++++++++++++-
|
||||
dlls/psapi/tests/psapi_main.c | 8 +--
|
||||
server/mapping.c | 29 +++++++++++
|
||||
server/mapping.c | 29 ++++++++++
|
||||
server/protocol.def | 9 ++++
|
||||
6 files changed, 131 insertions(+), 9 deletions(-)
|
||||
6 files changed, 136 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index 551d0450584..49e807a5f24 100644
|
||||
index 6b0dbaa7b3d..2ac7fcaae35 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -1767,7 +1767,7 @@ static NTSTATUS fill_file_info( const struct stat *st, ULONG attr, void *ptr,
|
||||
}
|
||||
|
||||
|
||||
-static NTSTATUS server_get_unix_name( HANDLE handle, ANSI_STRING *unix_name )
|
||||
+NTSTATUS server_get_unix_name( HANDLE handle, ANSI_STRING *unix_name )
|
||||
-static NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name )
|
||||
+NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name )
|
||||
{
|
||||
data_size_t size = 1024;
|
||||
NTSTATUS ret;
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index e14da3ff7ec..b9a96424b4c 100644
|
||||
index 711a0bed2b7..466c59da75a 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -173,6 +173,7 @@ extern unsigned int server_queue_process_apc( HANDLE process, const apc_call_t *
|
||||
@@ -170,6 +170,7 @@ extern unsigned int server_queue_process_apc( HANDLE process, const apc_call_t *
|
||||
apc_result_t *result ) DECLSPEC_HIDDEN;
|
||||
extern int server_get_unix_fd( HANDLE handle, unsigned int wanted_access, int *unix_fd,
|
||||
int *needs_close, enum server_fd_type *type, unsigned int *options ) DECLSPEC_HIDDEN;
|
||||
+extern NTSTATUS server_get_unix_name( HANDLE handle, ANSI_STRING *unix_name ) DECLSPEC_HIDDEN;
|
||||
+extern NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name ) DECLSPEC_HIDDEN;
|
||||
extern void server_init_process(void) DECLSPEC_HIDDEN;
|
||||
extern size_t server_init_thread( void *entry_point, BOOL *suspend ) DECLSPEC_HIDDEN;
|
||||
extern int server_pipe( int fd[2] ) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
|
||||
index c49c60166c2..086943bdae8 100644
|
||||
index cd1bd162a2a..570a8a3bf49 100644
|
||||
--- a/dlls/ntdll/unix/virtual.c
|
||||
+++ b/dlls/ntdll/unix/virtual.c
|
||||
@@ -4011,6 +4011,93 @@ static NTSTATUS get_working_set_ex( HANDLE process, LPCVOID addr,
|
||||
@@ -4013,6 +4013,98 @@ static NTSTATUS get_working_set_ex( HANDLE process, LPCVOID addr,
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@ -53,7 +53,8 @@ index c49c60166c2..086943bdae8 100644
|
||||
+ SIZE_T len, SIZE_T *res_len )
|
||||
+{
|
||||
+ UNICODE_STRING nt_name;
|
||||
+ ANSI_STRING unix_name;
|
||||
+ WCHAR *nt_nameW;
|
||||
+ char *unix_name;
|
||||
+ data_size_t size = 1024;
|
||||
+ WCHAR *name = NULL;
|
||||
+ NTSTATUS status;
|
||||
@ -76,10 +77,14 @@ index c49c60166c2..086943bdae8 100644
|
||||
+ NtClose( mapping );
|
||||
+ if (!status)
|
||||
+ {
|
||||
+ status = wine_unix_to_nt_file_name( &unix_name, &nt_name );
|
||||
+ RtlFreeAnsiString( &unix_name );
|
||||
+ status = unix_to_nt_file_name( unix_name, &nt_nameW );
|
||||
+ RtlFreeHeap( GetProcessHeap(), 0, unix_name );
|
||||
+ }
|
||||
+ if (!status)
|
||||
+ {
|
||||
+ RtlInitUnicodeString( &nt_name, nt_nameW );
|
||||
+ goto found;
|
||||
+ }
|
||||
+ if (!status) goto found;
|
||||
+ if (status == STATUS_OBJECT_TYPE_MISMATCH) status = STATUS_FILE_INVALID;
|
||||
+ return status;
|
||||
+ }
|
||||
@ -137,7 +142,7 @@ index c49c60166c2..086943bdae8 100644
|
||||
#define UNIMPLEMENTED_INFO_CLASS(c) \
|
||||
case c: \
|
||||
FIXME("(process=%p,addr=%p) Unimplemented information class: " #c "\n", process, addr); \
|
||||
@@ -4035,8 +4122,10 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
|
||||
@@ -4037,8 +4129,10 @@ NTSTATUS WINAPI NtQueryVirtualMemory( HANDLE process, LPCVOID addr,
|
||||
case MemoryWorkingSetExInformation:
|
||||
return get_working_set_ex( process, addr, buffer, len, res_len );
|
||||
|
||||
@ -177,10 +182,10 @@ index da7524dd60a..bfe14231a9b 100644
|
||||
}
|
||||
|
||||
diff --git a/server/mapping.c b/server/mapping.c
|
||||
index 07c51c246d6..7f19a7572df 100644
|
||||
index db0debe0af5..6e74f5b770f 100644
|
||||
--- a/server/mapping.c
|
||||
+++ b/server/mapping.c
|
||||
@@ -1095,6 +1095,35 @@ DECL_HANDLER(unmap_view)
|
||||
@@ -1099,6 +1099,35 @@ DECL_HANDLER(unmap_view)
|
||||
if (view) free_memory_view( view );
|
||||
}
|
||||
|
||||
@ -217,10 +222,10 @@ index 07c51c246d6..7f19a7572df 100644
|
||||
DECL_HANDLER(get_mapping_committed_range)
|
||||
{
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 6416306c0a1..bdc1eeeb5c3 100644
|
||||
index bd6841d8000..345e0966c14 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -1853,6 +1853,15 @@ enum char_info_mode
|
||||
@@ -1756,6 +1756,15 @@ enum char_info_mode
|
||||
@END
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 01031e9eb282bffce2449891e68eb9efeded1ee9 Mon Sep 17 00:00:00 2001
|
||||
From bb973ee8d79d0a1117c437afe8d62f34b9d9d3c8 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sun, 28 May 2017 11:17:26 +0200
|
||||
Subject: [PATCH] ntdll: Resolve drive symlinks before returning section name.
|
||||
@ -11,10 +11,10 @@ Subject: [PATCH] ntdll: Resolve drive symlinks before returning section name.
|
||||
4 files changed, 34 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index 551d0450584..65ddf0df4a2 100644
|
||||
index 2ac7fcaae35..d39c98b2e49 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -3425,7 +3425,7 @@ static NTSTATUS nt_to_unix_file_name_internal( const UNICODE_STRING *nameW, ANSI
|
||||
@@ -3418,7 +3418,7 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, char *nam
|
||||
}
|
||||
|
||||
/* read the contents of an NT symlink object */
|
||||
@ -24,7 +24,7 @@ index 551d0450584..65ddf0df4a2 100644
|
||||
OBJECT_ATTRIBUTES attr;
|
||||
UNICODE_STRING targetW;
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index e14da3ff7ec..5410248e8a7 100644
|
||||
index 466c59da75a..884dff1e1b1 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -103,6 +103,7 @@ extern void CDECL get_initial_directory( UNICODE_STRING *dir ) DECLSPEC_HIDDEN;
|
||||
@ -36,7 +36,7 @@ index e14da3ff7ec..5410248e8a7 100644
|
||||
const LARGE_INTEGER *offset_ptr, SIZE_T *size_ptr, ULONG alloc_type,
|
||||
ULONG protect, pe_image_info_t *image_info ) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
|
||||
index 1515963b9c7..5cee0da5d24 100644
|
||||
index 570a8a3bf49..c040adfaf23 100644
|
||||
--- a/dlls/ntdll/unix/virtual.c
|
||||
+++ b/dlls/ntdll/unix/virtual.c
|
||||
@@ -188,6 +188,8 @@ static BYTE **pages_vprot;
|
||||
@ -48,14 +48,15 @@ index 1515963b9c7..5cee0da5d24 100644
|
||||
static struct file_view *view_block_start, *view_block_end, *next_free_view;
|
||||
#ifdef _WIN64
|
||||
static const size_t view_block_size = 0x200000;
|
||||
@@ -4016,12 +4018,15 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
|
||||
@@ -4018,13 +4020,16 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
|
||||
MEMORY_SECTION_NAME *info,
|
||||
SIZE_T len, SIZE_T *res_len )
|
||||
{
|
||||
+ static const WCHAR dosprefixW[] = {'\\','?','?','\\'};
|
||||
+ WCHAR symlinkW[MAX_DIR_ENTRY_LEN] = {0};
|
||||
UNICODE_STRING nt_name;
|
||||
ANSI_STRING unix_name;
|
||||
WCHAR *nt_nameW;
|
||||
char *unix_name;
|
||||
data_size_t size = 1024;
|
||||
- WCHAR *name = NULL;
|
||||
+ WCHAR *ptr, *name = NULL;
|
||||
@ -65,7 +66,7 @@ index 1515963b9c7..5cee0da5d24 100644
|
||||
|
||||
if (!addr || !info || !res_len) return STATUS_INVALID_PARAMETER;
|
||||
|
||||
@@ -4080,14 +4085,34 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
|
||||
@@ -4087,14 +4092,34 @@ static NTSTATUS get_section_name( HANDLE process, LPCVOID addr,
|
||||
}
|
||||
|
||||
found:
|
||||
|
@ -1,4 +1,4 @@
|
||||
From addb612dfe7429c29adeb31144976713cb0756b4 Mon Sep 17 00:00:00 2001
|
||||
From 56459884534d5b0acb6a410d2ba04f6f3aa15ded Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 27 Jul 2014 03:35:42 +0200
|
||||
Subject: [PATCH] ntdll: Allow special characters in pipe names.
|
||||
@ -38,18 +38,18 @@ index 3c7ca06a045..453dcc80b7b 100644
|
||||
}
|
||||
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index 61340a0e010..a7f22e83e12 100644
|
||||
index a0ad361fcbb..3c4670e114c 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -3319,6 +3319,7 @@ NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *u
|
||||
UINT disposition )
|
||||
@@ -3282,6 +3282,7 @@ static NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, char *
|
||||
NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret, UINT disposition )
|
||||
{
|
||||
static const WCHAR unixW[] = {'u','n','i','x'};
|
||||
+ static const WCHAR pipeW[] = {'p','i','p','e'};
|
||||
static const WCHAR invalid_charsW[] = { INVALID_NT_CHARS, 0 };
|
||||
|
||||
NTSTATUS status = STATUS_SUCCESS;
|
||||
@@ -3329,6 +3330,7 @@ NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *u
|
||||
@@ -3292,6 +3293,7 @@ NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret
|
||||
WCHAR prefix[MAX_DIR_ENTRY_LEN + 1];
|
||||
BOOLEAN check_case = FALSE;
|
||||
BOOLEAN is_unix = FALSE;
|
||||
@ -57,7 +57,7 @@ index 61340a0e010..a7f22e83e12 100644
|
||||
|
||||
name = nameW->Buffer;
|
||||
name_len = nameW->Length / sizeof(WCHAR);
|
||||
@@ -3362,13 +3364,17 @@ NTSTATUS CDECL nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *u
|
||||
@@ -3325,13 +3327,17 @@ NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret
|
||||
name += prefix_len;
|
||||
name_len -= prefix_len;
|
||||
|
||||
|
@ -1,5 +0,0 @@
|
||||
Fixes: Return correct thread creation time in SystemProcessInformation
|
||||
Fixes: Fill process virtual memory counters in NtQuerySystemInformation
|
||||
# Patch 6 is broken. We should really be returning this information from the
|
||||
# server, but that needs a bit more work.
|
||||
Disabled: true
|
@ -1,105 +0,0 @@
|
||||
From ee29bbfa7e10de295db39ab6b89f2175d00692c5 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Thu, 9 Mar 2017 22:56:45 +0100
|
||||
Subject: [PATCH] ntdll: Fill process virtual memory counters in
|
||||
NtQuerySystemInformation.
|
||||
|
||||
FIXME: fill_VM_COUNTERS now uses a different method ... which one is better?
|
||||
---
|
||||
dlls/ntdll/nt.c | 3 +++
|
||||
dlls/ntdll/ntdll_misc.h | 1 +
|
||||
dlls/ntdll/process.c | 2 +-
|
||||
dlls/ntdll/thread.c | 36 ++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 41 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
|
||||
index cbb7937631d..bb078c1aa21 100644
|
||||
--- a/dlls/ntdll/nt.c
|
||||
+++ b/dlls/ntdll/nt.c
|
||||
@@ -2686,8 +2686,11 @@ NTSTATUS WINAPI NtQuerySystemInformation(
|
||||
/* spi->ti will be set later on */
|
||||
|
||||
if (reply->unix_pid != -1)
|
||||
+ {
|
||||
read_process_time(reply->unix_pid, -1, clk_tck,
|
||||
&spi->KernelTime, &spi->UserTime);
|
||||
+ read_process_memory_stats(reply->unix_pid, &spi->vmCounters);
|
||||
+ }
|
||||
unix_pid = reply->unix_pid;
|
||||
}
|
||||
len += procstructlen;
|
||||
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
|
||||
index 6e77694d87b..d725a678246 100644
|
||||
--- a/dlls/ntdll/ntdll_misc.h
|
||||
+++ b/dlls/ntdll/ntdll_misc.h
|
||||
@@ -248,6 +248,7 @@ void WINAPI LdrInitializeThunk(CONTEXT*,void**,ULONG_PTR,ULONG_PTR);
|
||||
/* process / thread time */
|
||||
extern BOOL read_process_time(int unix_pid, int unix_tid, unsigned long clk_tck,
|
||||
LARGE_INTEGER *kernel, LARGE_INTEGER *user) DECLSPEC_HIDDEN;
|
||||
+extern BOOL read_process_memory_stats(int unix_pid, VM_COUNTERS *pvmi) DECLSPEC_HIDDEN;
|
||||
|
||||
/* string functions */
|
||||
int __cdecl NTDLL_tolower( int c );
|
||||
diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c
|
||||
index 35937ce6026..b4f2dbc8160 100644
|
||||
--- a/dlls/ntdll/process.c
|
||||
+++ b/dlls/ntdll/process.c
|
||||
@@ -192,7 +192,7 @@ static void fill_VM_COUNTERS(VM_COUNTERS* pvmi)
|
||||
|
||||
static void fill_VM_COUNTERS(VM_COUNTERS* pvmi)
|
||||
{
|
||||
- /* FIXME : real data */
|
||||
+ read_process_memory_stats(getpid(), pvmi);
|
||||
}
|
||||
|
||||
#endif
|
||||
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
|
||||
index 14198d77b7b..8ae8251f975 100644
|
||||
--- a/dlls/ntdll/thread.c
|
||||
+++ b/dlls/ntdll/thread.c
|
||||
@@ -381,6 +381,42 @@ NTSTATUS WINAPI NtCreateThreadEx( HANDLE *handle_ptr, ACCESS_MASK access, OBJECT
|
||||
flags, zero_bits, stack_commit, stack_reserve, attr_list );
|
||||
}
|
||||
|
||||
+BOOL read_process_memory_stats(int unix_pid, VM_COUNTERS *pvmi)
|
||||
+{
|
||||
+ BOOL ret = FALSE;
|
||||
+#ifdef __linux__
|
||||
+ unsigned long size, resident, shared, trs, drs, lrs, dt;
|
||||
+ char buf[512];
|
||||
+ FILE *fp;
|
||||
+
|
||||
+ sprintf( buf, "/proc/%u/statm", unix_pid );
|
||||
+ if ((fp = fopen( buf, "r" )))
|
||||
+ {
|
||||
+ if (fscanf( fp, "%lu %lu %lu %lu %lu %lu %lu",
|
||||
+ &size, &resident, &shared, &trs, &drs, &lrs, &dt ) == 7)
|
||||
+ {
|
||||
+ pvmi->VirtualSize = size * page_size;
|
||||
+ pvmi->WorkingSetSize = resident * page_size;
|
||||
+ pvmi->PrivatePageCount = size - shared;
|
||||
+
|
||||
+ /* these values are not available through /proc/pid/statm */
|
||||
+ pvmi->PeakVirtualSize = pvmi->VirtualSize;
|
||||
+ pvmi->PageFaultCount = 0;
|
||||
+ pvmi->PeakWorkingSetSize = pvmi->WorkingSetSize;
|
||||
+ pvmi->QuotaPagedPoolUsage = pvmi->VirtualSize;
|
||||
+ pvmi->QuotaPeakPagedPoolUsage = pvmi->QuotaPagedPoolUsage;
|
||||
+ pvmi->QuotaPeakNonPagedPoolUsage = 0;
|
||||
+ pvmi->QuotaNonPagedPoolUsage = 0;
|
||||
+ pvmi->PagefileUsage = 0;
|
||||
+ pvmi->PeakPagefileUsage = 0;
|
||||
+
|
||||
+ ret = TRUE;
|
||||
+ }
|
||||
+ fclose( fp );
|
||||
+ }
|
||||
+#endif
|
||||
+ return ret;
|
||||
+}
|
||||
|
||||
/***********************************************************************
|
||||
* RtlCreateUserThread (NTDLL.@)
|
||||
--
|
||||
2.26.2
|
||||
|
@ -1,23 +1,23 @@
|
||||
From 73f255bdc5edef27f9a03b7e8917686490d3bf7a Mon Sep 17 00:00:00 2001
|
||||
From 9d4e8c921196c2303812e3673b27f781218943aa Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 7 Mar 2015 06:20:55 +0100
|
||||
Subject: [PATCH] nvcuda: Implement cuModuleLoad wrapper function.
|
||||
|
||||
---
|
||||
dlls/nvcuda/nvcuda.c | 46 +++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/nvcuda/nvcuda.c | 22 ++++++++++++++++++++++
|
||||
dlls/nvcuda/nvcuda.spec | 2 +-
|
||||
include/cuda.h | 1 +
|
||||
3 files changed, 48 insertions(+), 1 deletion(-)
|
||||
3 files changed, 24 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/nvcuda/nvcuda.c b/dlls/nvcuda/nvcuda.c
|
||||
index e11a1d51a9d..14b695f3371 100644
|
||||
index e11a1d51a9d..7c296cb6861 100644
|
||||
--- a/dlls/nvcuda/nvcuda.c
|
||||
+++ b/dlls/nvcuda/nvcuda.c
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
+#include "winternl.h"
|
||||
+#include "winnls.h"
|
||||
#include "wine/library.h"
|
||||
#include "wine/debug.h"
|
||||
#include "wine/list.h"
|
||||
@ -37,38 +37,14 @@ index e11a1d51a9d..14b695f3371 100644
|
||||
LOAD_FUNCPTR(cuModuleLoadData);
|
||||
LOAD_FUNCPTR(cuModuleLoadDataEx);
|
||||
LOAD_FUNCPTR(cuModuleLoadFatBinary);
|
||||
@@ -1883,6 +1886,49 @@ CUresult WINAPI wine_cuModuleGetTexRef(CUtexref *pTexRef, CUmodule hmod, const c
|
||||
@@ -1883,6 +1886,25 @@ CUresult WINAPI wine_cuModuleGetTexRef(CUtexref *pTexRef, CUmodule hmod, const c
|
||||
return pcuModuleGetTexRef(pTexRef, hmod, name);
|
||||
}
|
||||
|
||||
+/* FIXME: Should we pay attention to AreFileApisANSI() ? */
|
||||
+static BOOL get_unix_path(ANSI_STRING *unix_name, const char *filename)
|
||||
+{
|
||||
+ UNICODE_STRING dospathW, ntpathW;
|
||||
+ ANSI_STRING dospath;
|
||||
+ NTSTATUS status;
|
||||
+
|
||||
+ RtlInitAnsiString(&dospath, filename);
|
||||
+
|
||||
+ if (RtlAnsiStringToUnicodeString(&dospathW, &dospath, TRUE))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (!RtlDosPathNameToNtPathName_U(dospathW.Buffer, &ntpathW, NULL, NULL))
|
||||
+ {
|
||||
+ RtlFreeUnicodeString(&dospathW);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ status = wine_nt_to_unix_file_name(&ntpathW, unix_name, FILE_OPEN);
|
||||
+
|
||||
+ RtlFreeUnicodeString(&ntpathW);
|
||||
+ RtlFreeUnicodeString(&dospathW);
|
||||
+ return !status;
|
||||
+}
|
||||
+
|
||||
+CUresult WINAPI wine_cuModuleLoad(CUmodule *module, const char *fname)
|
||||
+{
|
||||
+ ANSI_STRING unix_name;
|
||||
+ WCHAR filenameW[MAX_PATH];
|
||||
+ char *unix_name;
|
||||
+ CUresult ret;
|
||||
+
|
||||
+ TRACE("(%p, %s)\n", module, fname);
|
||||
@ -76,11 +52,11 @@ index e11a1d51a9d..14b695f3371 100644
|
||||
+ if (!fname)
|
||||
+ return CUDA_ERROR_INVALID_VALUE;
|
||||
+
|
||||
+ if (!get_unix_path(&unix_name, fname))
|
||||
+ return CUDA_ERROR_FILE_NOT_FOUND;
|
||||
+ MultiByteToWideChar(CP_ACP, 0, fname, -1, filenameW, ARRAY_SIZE(filenameW));
|
||||
+ unix_name = wine_get_unix_file_name( filenameW );
|
||||
+
|
||||
+ ret = pcuModuleLoad(module, unix_name.Buffer);
|
||||
+ RtlFreeAnsiString(&unix_name);
|
||||
+ ret = pcuModuleLoad(module, unix_name);
|
||||
+ HeapFree(GetProcessHeap(), 0, unix_name);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
|
@ -1,19 +1,19 @@
|
||||
From ecde4f4f994831bbeb1029d93e0b06f815c503b2 Mon Sep 17 00:00:00 2001
|
||||
From 3519cb4a7b8bb9c9bbf3dacbd9e6766b48dd121b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Tue, 6 Jan 2015 05:16:36 +0100
|
||||
Subject: nvcuvid: First implementation. (rev 2)
|
||||
Subject: [PATCH] nvcuvid: First implementation. (rev 2)
|
||||
|
||||
Changes by Sebastian Lackner <sebastian@fds-team.de>:
|
||||
* Convert structures properly where the Windows and Linux definition differs.
|
||||
---
|
||||
configure.ac | 1 +
|
||||
dlls/nvcuvid/Makefile.in | 4 +
|
||||
dlls/nvcuvid/nvcuvid.c | 537 ++++++++++++++++++++++++++++++++++++++
|
||||
dlls/nvcuvid/nvcuvid.c | 513 ++++++++++++++++++++++++++++++++++++++
|
||||
dlls/nvcuvid/nvcuvid.spec | 24 ++
|
||||
include/Makefile.in | 2 +
|
||||
include/cuviddec.h | 99 +++++++
|
||||
include/cuviddec.h | 99 ++++++++
|
||||
include/nvcuvid.h | 79 ++++++
|
||||
7 files changed, 746 insertions(+)
|
||||
7 files changed, 722 insertions(+)
|
||||
create mode 100644 dlls/nvcuvid/Makefile.in
|
||||
create mode 100644 dlls/nvcuvid/nvcuvid.c
|
||||
create mode 100644 dlls/nvcuvid/nvcuvid.spec
|
||||
@ -44,10 +44,10 @@ index 00000000000..2c2dc8ccf67
|
||||
+ nvcuvid.c
|
||||
diff --git a/dlls/nvcuvid/nvcuvid.c b/dlls/nvcuvid/nvcuvid.c
|
||||
new file mode 100644
|
||||
index 00000000000..2704bfa9a63
|
||||
index 00000000000..a586c15eafb
|
||||
--- /dev/null
|
||||
+++ b/dlls/nvcuvid/nvcuvid.c
|
||||
@@ -0,0 +1,537 @@
|
||||
@@ -0,0 +1,513 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2015 Michael Müller
|
||||
+ *
|
||||
@ -73,7 +73,7 @@ index 00000000000..2704bfa9a63
|
||||
+
|
||||
+#include "windef.h"
|
||||
+#include "winbase.h"
|
||||
+#include "winternl.h"
|
||||
+#include "winnls.h"
|
||||
+#include "wine/library.h"
|
||||
+#include "wine/debug.h"
|
||||
+#include "nvcuvid.h"
|
||||
@ -320,36 +320,12 @@ index 00000000000..2704bfa9a63
|
||||
+ return CUDA_SUCCESS;
|
||||
+}
|
||||
+
|
||||
+/* FIXME: Should we pay attention to AreFileApisANSI() ? */
|
||||
+static BOOL get_unix_path(ANSI_STRING *unix_name, const char *filename)
|
||||
+{
|
||||
+ UNICODE_STRING dospathW, ntpathW;
|
||||
+ ANSI_STRING dospath;
|
||||
+ NTSTATUS status;
|
||||
+
|
||||
+ RtlInitAnsiString(&dospath, filename);
|
||||
+
|
||||
+ if (RtlAnsiStringToUnicodeString(&dospathW, &dospath, TRUE))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (!RtlDosPathNameToNtPathName_U(dospathW.Buffer, &ntpathW, NULL, NULL))
|
||||
+ {
|
||||
+ RtlFreeUnicodeString(&dospathW);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ status = wine_nt_to_unix_file_name(&ntpathW, unix_name, FILE_OPEN);
|
||||
+
|
||||
+ RtlFreeUnicodeString(&ntpathW);
|
||||
+ RtlFreeUnicodeString(&dospathW);
|
||||
+ return !status;
|
||||
+}
|
||||
+
|
||||
+CUresult WINAPI wine_cuvidCreateVideoSource(CUvideosource *pObj, const char *pszFileName, CUVIDSOURCEPARAMS *pParams)
|
||||
+{
|
||||
+ WCHAR filenameW[MAX_PATH];
|
||||
+ struct fake_source *source;
|
||||
+ CUVIDSOURCEPARAMS fake_params;
|
||||
+ ANSI_STRING unix_name;
|
||||
+ char *unix_name;
|
||||
+ CUresult ret;
|
||||
+
|
||||
+ TRACE("(%p, %s, %p)\n", pObj, pszFileName, pParams);
|
||||
@ -361,13 +337,13 @@ index 00000000000..2704bfa9a63
|
||||
+ if (!pszFileName)
|
||||
+ return CUDA_ERROR_UNKNOWN;
|
||||
+
|
||||
+ if (!get_unix_path(&unix_name, pszFileName))
|
||||
+ return CUDA_ERROR_UNKNOWN;
|
||||
+ MultiByteToWideChar(CP_ACP, 0, pszFileName, -1, filenameW, ARRAY_SIZE(filenameW));
|
||||
+ unix_name = wine_get_unix_file_name( filenameW );
|
||||
+
|
||||
+ source = HeapAlloc(GetProcessHeap(), 0, sizeof(*source));
|
||||
+ if (!source)
|
||||
+ {
|
||||
+ RtlFreeAnsiString(&unix_name);
|
||||
+ HeapFree(GetProcessHeap(), 0, &unix_name);
|
||||
+ return CUDA_ERROR_OUT_OF_MEMORY;
|
||||
+ }
|
||||
+
|
||||
@ -388,8 +364,8 @@ index 00000000000..2704bfa9a63
|
||||
+ source->orig_data = pParams->pUserData;
|
||||
+ fake_params.pUserData = source;
|
||||
+
|
||||
+ ret = pcuvidCreateVideoSource((void *)&source->orig_source, unix_name.Buffer, &fake_params);
|
||||
+ RtlFreeAnsiString(&unix_name);
|
||||
+ ret = pcuvidCreateVideoSource((void *)&source->orig_source, unix_name, &fake_params);
|
||||
+ HeapFree(GetProcessHeap(), 0, &unix_name);
|
||||
+
|
||||
+ if (ret)
|
||||
+ {
|
||||
|
@ -52,7 +52,7 @@ usage()
|
||||
# Get the upstream commit sha
|
||||
upstream_commit()
|
||||
{
|
||||
echo "262e4ab9e0eeb126dde5cb4cba13fbf7f1d1cef0"
|
||||
echo "18ae539c914a9b5a89f63d8cf9c2a21273eccc6c"
|
||||
}
|
||||
|
||||
# Show version information
|
||||
@ -177,7 +177,6 @@ patch_enable_all ()
|
||||
enable_ntdll_Heap_Improvements="$1"
|
||||
enable_ntdll_Hide_Wine_Exports="$1"
|
||||
enable_ntdll_Interrupt_0x2e="$1"
|
||||
enable_ntdll_Junction_Points="$1"
|
||||
enable_ntdll_Manifest_Range="$1"
|
||||
enable_ntdll_NtAccessCheck="$1"
|
||||
enable_ntdll_NtDevicePath="$1"
|
||||
@ -621,9 +620,6 @@ patch_enable ()
|
||||
ntdll-Interrupt-0x2e)
|
||||
enable_ntdll_Interrupt_0x2e="$2"
|
||||
;;
|
||||
ntdll-Junction_Points)
|
||||
enable_ntdll_Junction_Points="$2"
|
||||
;;
|
||||
ntdll-Manifest_Range)
|
||||
enable_ntdll_Manifest_Range="$2"
|
||||
;;
|
||||
@ -1575,13 +1571,6 @@ if test "$enable_server_Stored_ACLs" -eq 1; then
|
||||
enable_server_File_Permissions=1
|
||||
fi
|
||||
|
||||
if test "$enable_server_File_Permissions" -eq 1; then
|
||||
if test "$enable_ntdll_Junction_Points" -gt 1; then
|
||||
abort "Patchset ntdll-Junction_Points disabled, but server-File_Permissions depends on that."
|
||||
fi
|
||||
enable_ntdll_Junction_Points=1
|
||||
fi
|
||||
|
||||
if test "$enable_server_Desktop_Refcount" -eq 1; then
|
||||
if test "$enable_ws2_32_WSACleanup" -gt 1; then
|
||||
abort "Patchset ws2_32-WSACleanup disabled, but server-Desktop_Refcount depends on that."
|
||||
@ -1635,13 +1624,6 @@ if test "$enable_ntdll_NtDevicePath" -eq 1; then
|
||||
enable_ntdll_Pipe_SpecialCharacters=1
|
||||
fi
|
||||
|
||||
if test "$enable_ntdll_Junction_Points" -eq 1; then
|
||||
if test "$enable_ntdll_DOS_Attributes" -gt 1; then
|
||||
abort "Patchset ntdll-DOS_Attributes disabled, but ntdll-Junction_Points depends on that."
|
||||
fi
|
||||
enable_ntdll_DOS_Attributes=1
|
||||
fi
|
||||
|
||||
if test "$enable_ntdll_Hide_Wine_Exports" -eq 1; then
|
||||
if test "$enable_advapi32_Token_Integrity_Level" -gt 1; then
|
||||
abort "Patchset advapi32-Token_Integrity_Level disabled, but ntdll-Hide_Wine_Exports depends on that."
|
||||
@ -3518,9 +3500,9 @@ fi
|
||||
# | * dlls/ntdll/unix/file.c
|
||||
# |
|
||||
if test "$enable_ntdll_DeviceType_Systemroot" -eq 1; then
|
||||
patch_apply ntdll-DeviceType_Systemroot/0001-ntdll-Return-fake-device-type-when-systemroot-is-loc.patch
|
||||
patch_apply ntdll-DeviceType_Systemroot/0001-ntdll-Don-t-translate-Unix-virtual-disks-to-FILE_DEV.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Sebastian Lackner", "ntdll: Return fake device type when systemroot is located on virtual disk.", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "ntdll: Don'\''t translate Unix virtual disks to FILE_DEVICE_VIRTUAL_DISK.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
@ -3657,61 +3639,6 @@ if test "$enable_ntdll_Interrupt_0x2e" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-Junction_Points
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * ntdll-DOS_Attributes
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#12401] NET Framework 2.0, 3.0, 4.0 installers and other apps that make use of GAC API for managed assembly
|
||||
# | installation on NTFS filesystems need reparse point/junction API support
|
||||
# | (FSCTL_SET_REPARSE_POINT/FSCTL_GET_REPARSE_POINT)
|
||||
# | * [#44948] Multiple apps (Spine (Mod starter for Gothic), MS Office 365 installer) need CreateSymbolicLinkW implementation
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * configure.ac, dlls/kernel32/path.c, dlls/kernel32/tests/path.c, dlls/kernelbase/file.c, dlls/msvcp120/tests/msvcp120.c,
|
||||
# | dlls/msvcp140/tests/msvcp140.c, dlls/ntdll/tests/file.c, dlls/ntdll/unix/file.c, include/Makefile.in, include/ntifs.h,
|
||||
# | include/wine/port.h, include/winternl.h, libs/port/Makefile.in, libs/port/renameat2.c, server/fd.c
|
||||
# |
|
||||
if test "$enable_ntdll_Junction_Points" -eq 1; then
|
||||
patch_apply ntdll-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch
|
||||
patch_apply ntdll-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch
|
||||
patch_apply ntdll-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch
|
||||
patch_apply ntdll-Junction_Points/0004-ntdll-Add-a-test-for-junction-point-advertisement.patch
|
||||
patch_apply ntdll-Junction_Points/0005-kernel32-ntdll-Add-support-for-deleting-junction-poi.patch
|
||||
patch_apply ntdll-Junction_Points/0007-ntdll-Add-support-for-absolute-symlink-creation.patch
|
||||
patch_apply ntdll-Junction_Points/0008-ntdll-Add-support-for-reading-absolute-symlinks.patch
|
||||
patch_apply ntdll-Junction_Points/0009-ntdll-Add-support-for-deleting-symlinks.patch
|
||||
patch_apply ntdll-Junction_Points/0010-ntdll-Add-support-for-relative-symlink-creation.patch
|
||||
patch_apply ntdll-Junction_Points/0011-ntdll-Add-support-for-reading-relative-symlinks.patch
|
||||
patch_apply ntdll-Junction_Points/0012-ntdll-Add-support-for-file-symlinks.patch
|
||||
patch_apply ntdll-Junction_Points/0013-ntdll-Allow-creation-of-dangling-reparse-points-to-n.patch
|
||||
patch_apply ntdll-Junction_Points/0014-ntdll-Correctly-report-file-symbolic-links-as-files.patch
|
||||
patch_apply ntdll-Junction_Points/0016-server-Properly-handle-file-symlink-deletion.patch
|
||||
patch_apply ntdll-Junction_Points/0017-ntdll-Always-report-symbolic-links-as-containing-zer.patch
|
||||
patch_apply ntdll-Junction_Points/0018-ntdll-Find-dangling-symlinks-quickly.patch
|
||||
patch_apply ntdll-Junction_Points/0019-kernel32-Implement-CreateSymbolicLink-A-W-with-ntdll.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for junction point creation.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading junction points.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for deleting junction points.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add a test for junction point advertisement.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "kernel32,ntdll: Add support for deleting junction points with RemoveDirectory.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for absolute symlink creation.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading absolute symlinks.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for deleting symlinks.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for relative symlink creation.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for reading relative symlinks.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Add support for file symlinks.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Allow creation of dangling reparse points to non-existent paths.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Correctly report file symbolic links as files.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "server: Properly handle file symlink deletion.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Always report symbolic links as containing zero bytes.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "ntdll: Find dangling symlinks quickly.", 1 },';
|
||||
printf '%s\n' '+ { "Erich E. Hoover", "kernel32: Implement CreateSymbolicLink[A|W] with ntdll reparse points.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ntdll-Manifest_Range
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@ -4367,9 +4294,6 @@ fi
|
||||
|
||||
# Patchset server-File_Permissions
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * ntdll-DOS_Attributes, ntdll-Junction_Points
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#44691] Improve mapping of DACL to file permissions
|
||||
# |
|
||||
@ -4400,7 +4324,7 @@ fi
|
||||
# Patchset server-Stored_ACLs
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * ntdll-DOS_Attributes, ntdll-Junction_Points, server-File_Permissions
|
||||
# | * ntdll-DOS_Attributes, server-File_Permissions
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#33576] Support for stored file ACLs
|
||||
@ -4431,7 +4355,7 @@ fi
|
||||
# Patchset server-Inherited_ACLs
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * ntdll-DOS_Attributes, ntdll-Junction_Points, server-File_Permissions, server-Stored_ACLs
|
||||
# | * ntdll-DOS_Attributes, server-File_Permissions, server-Stored_ACLs
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/advapi32/tests/security.c, server/file.c
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 9ecf9653d3f4d564f000d4e0f7f96ae0cd3610b2 Mon Sep 17 00:00:00 2001
|
||||
From b1dcc9759921e696a554c46d7aee2c4c29d3c7ae Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Fri, 3 Apr 2015 03:58:47 +0200
|
||||
Subject: [PATCH] server: Allow to open files without any permission bits. (try
|
||||
@ -13,7 +13,7 @@ Changes in v2:
|
||||
2 files changed, 32 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
|
||||
index 1ec2e6bbb48..cc59210e609 100644
|
||||
index 825f8451904..948c257cea2 100644
|
||||
--- a/dlls/advapi32/tests/security.c
|
||||
+++ b/dlls/advapi32/tests/security.c
|
||||
@@ -3702,17 +3702,13 @@ static void test_CreateDirectoryA(void)
|
||||
@ -65,10 +65,10 @@ index 1ec2e6bbb48..cc59210e609 100644
|
||||
|
||||
done:
|
||||
diff --git a/server/fd.c b/server/fd.c
|
||||
index d238c43cf1f..8292a0b82f2 100644
|
||||
index e5e1fdbbf32..188a632575f 100644
|
||||
--- a/server/fd.c
|
||||
+++ b/server/fd.c
|
||||
@@ -1825,6 +1825,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
|
||||
@@ -1835,6 +1835,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
|
||||
int root_fd = -1;
|
||||
int rw_mode;
|
||||
char *path;
|
||||
@ -76,10 +76,10 @@ index d238c43cf1f..8292a0b82f2 100644
|
||||
int created = (flags & O_CREAT);
|
||||
|
||||
if (((options & FILE_DELETE_ON_CLOSE) && !(access & DELETE)) ||
|
||||
@@ -1891,10 +1892,28 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
|
||||
fd->unix_fd = open( name, rw_mode | O_SYMLINK | (flags & ~O_TRUNC), *mode );
|
||||
@@ -1894,10 +1895,28 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
|
||||
if ((access & FILE_UNIX_WRITE_ACCESS) || (flags & O_CREAT))
|
||||
fd->unix_fd = open( name, O_RDONLY | (flags & ~(O_TRUNC | O_CREAT | O_EXCL)), *mode );
|
||||
}
|
||||
#endif
|
||||
+ else if (errno == EACCES)
|
||||
+ {
|
||||
+ /* try to change permissions temporarily to open a file descriptor */
|
||||
@ -105,14 +105,14 @@ index d238c43cf1f..8292a0b82f2 100644
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
@@ -1909,6 +1928,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
|
||||
@@ -1912,6 +1931,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode,
|
||||
closed_fd->unix_fd = fd->unix_fd;
|
||||
closed_fd->unlink = 0;
|
||||
closed_fd->unix_name = fd->unix_name;
|
||||
+ if (do_chmod) chmod( name, *mode );
|
||||
lstat( fd->unix_name, &st );
|
||||
fstat( fd->unix_fd, &st );
|
||||
*mode = st.st_mode;
|
||||
|
||||
--
|
||||
2.25.1
|
||||
2.27.0
|
||||
|
||||
|
@ -1,3 +1,2 @@
|
||||
Fixes: Allow to open files/directories without any access rights in order to query attributes
|
||||
Fixes: [44691] Improve mapping of DACL to file permissions
|
||||
Depends: ntdll-Junction_Points
|
||||
|
@ -1 +1 @@
|
||||
262e4ab9e0eeb126dde5cb4cba13fbf7f1d1cef0
|
||||
18ae539c914a9b5a89f63d8cf9c2a21273eccc6c
|
||||
|
Loading…
Reference in New Issue
Block a user