Alexandre Julliard : mountmgr: Use wine_get_dos_file_name() instead of wine_unix_to_nt_file_name().
Alexandre Julliard
julliard at winehq.org
Wed Jul 8 15:34:35 CDT 2020
Module: wine
Branch: master
Commit: 3aa4feb578fb1afd4a3b600c86b6eda48a3f0305
URL: https://source.winehq.org/git/wine.git/?a=commit;h=3aa4feb578fb1afd4a3b600c86b6eda48a3f0305
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Jul 8 14:16:21 2020 +0200
mountmgr: Use wine_get_dos_file_name() instead of wine_unix_to_nt_file_name().
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mountmgr.sys/device.c | 22 ++++++++--------------
dlls/mountmgr.sys/mountmgr.c | 19 +++++++++++--------
2 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/dlls/mountmgr.sys/device.c b/dlls/mountmgr.sys/device.c
index 40176131ca..f7a1f1e9b5 100644
--- a/dlls/mountmgr.sys/device.c
+++ b/dlls/mountmgr.sys/device.c
@@ -1017,32 +1017,26 @@ static struct volume *find_matching_volume( const char *udi, const char *device,
static BOOL get_volume_device_info( struct volume *volume )
{
const char *unix_device = volume->device->unix_device;
- ANSI_STRING unix_name;
- UNICODE_STRING nt_name;
- OBJECT_ATTRIBUTES attr;
+ WCHAR *name;
HANDLE handle;
- NTSTATUS ret;
CDROM_TOC toc;
DWORD size;
BYTE superblock[SUPERBLOCK_SIZE];
- IO_STATUS_BLOCK io;
if (!unix_device)
return FALSE;
- RtlInitAnsiString( &unix_name, unix_device );
- if ((ret = wine_unix_to_nt_file_name( &unix_name, &nt_name )))
+ if (!(name = wine_get_dos_file_name( unix_device )))
{
- ERR("Failed to convert %s to NT, status %#x\n", debugstr_a(unix_device), ret);
+ ERR("Failed to convert %s to NT, err %u\n", debugstr_a(unix_device), GetLastError());
return FALSE;
}
-
- InitializeObjectAttributes( &attr, &nt_name, OBJ_CASE_INSENSITIVE, 0, NULL );
- if ((ret = NtOpenFile( &handle, GENERIC_READ | SYNCHRONIZE, &attr, &io, FILE_SHARE_READ | FILE_SHARE_WRITE,
- FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT )))
+ handle = CreateFileW( name, GENERIC_READ | SYNCHRONIZE, FILE_SHARE_READ | FILE_SHARE_WRITE,
+ NULL, OPEN_EXISTING, 0, 0 );
+ RtlFreeHeap( GetProcessHeap(), 0, name );
+ if (handle == INVALID_HANDLE_VALUE)
{
- WARN("Failed to open %s, status %#x\n", debugstr_a(unix_device), ret);
- RtlFreeUnicodeString( &nt_name );
+ WARN("Failed to open %s, err %u\n", debugstr_a(unix_device), GetLastError());
return FALSE;
}
diff --git a/dlls/mountmgr.sys/mountmgr.c b/dlls/mountmgr.sys/mountmgr.c
index cf12f03a73..6393dbf022 100644
--- a/dlls/mountmgr.sys/mountmgr.c
+++ b/dlls/mountmgr.sys/mountmgr.c
@@ -432,7 +432,7 @@ static void WINAPI query_symbol_file( TP_CALLBACK_INSTANCE *instance, void *cont
IRP *irp = context;
MOUNTMGR_TARGET_NAME *result;
CFStringRef query_cfstring;
- WCHAR *unix_buf = NULL;
+ WCHAR *filename, *unix_buf = NULL;
ANSI_STRING unix_path;
UNICODE_STRING path;
MDQueryRef mdquery;
@@ -489,16 +489,19 @@ static void WINAPI query_symbol_file( TP_CALLBACK_INSTANCE *instance, void *cont
HeapFree( GetProcessHeap(), 0, unix_buf );
if (status) goto done;
- status = wine_unix_to_nt_file_name( &unix_path, &path );
+ filename = wine_get_dos_file_name( unix_path.Buffer );
RtlFreeAnsiString( &unix_path );
- if (status) goto done;
-
+ if (!filename)
+ {
+ status = STATUS_NO_SUCH_FILE;
+ goto done;
+ }
result = irp->AssociatedIrp.SystemBuffer;
- result->DeviceNameLength = path.Length;
- size = FIELD_OFFSET(MOUNTMGR_TARGET_NAME, DeviceName[path.Length / sizeof(WCHAR)]);
+ result->DeviceNameLength = lstrlenW(filename) * sizeof(WCHAR);
+ size = FIELD_OFFSET(MOUNTMGR_TARGET_NAME, DeviceName[lstrlenW(filename)]);
if (size <= IoGetCurrentIrpStackLocation(irp)->Parameters.DeviceIoControl.OutputBufferLength)
{
- memcpy( result->DeviceName, path.Buffer, path.Length );
+ memcpy( result->DeviceName, filename, lstrlenW(filename) * sizeof(WCHAR) );
irp->IoStatus.Information = size;
status = STATUS_SUCCESS;
}
@@ -507,7 +510,7 @@ static void WINAPI query_symbol_file( TP_CALLBACK_INSTANCE *instance, void *cont
irp->IoStatus.Information = sizeof(*result);
status = STATUS_BUFFER_OVERFLOW;
}
- RtlFreeUnicodeString( &path );
+ RtlFreeHeap( GetProcessHeap(), 0, filename );
done:
irp->IoStatus.u.Status = status;
More information about the wine-cvs
mailing list