From 40f81e7cc33f8c46b711b235254161976e9ffc46 Mon Sep 17 00:00:00 2001 From: Mike McCormack Date: Fri, 15 Nov 2002 01:00:08 +0000 Subject: [PATCH] Partial implementation of RtlDosPathNameToNtPathName_U. --- dlls/ntdll/rtl.c | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c index 36ca648334c..574f3e4e585 100644 --- a/dlls/ntdll/rtl.c +++ b/dlls/ntdll/rtl.c @@ -24,13 +24,12 @@ #include #include #include -#include "wine/debug.h" #include "windef.h" #include "winerror.h" -#include "stackframe.h" - #include "winternl.h" #include "winreg.h" +#include "wine/unicode.h" +#include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(ntdll); @@ -335,13 +334,48 @@ void WINAPI NTDLL_alloca_probe( CONTEXT86 *context ) /************************************************************************** * RtlDosPathNameToNtPathName_U [NTDLL.@] * - * FIXME: convert to UNC or whatever is expected here + * szwDosPath: a fully qualified DOS path name + * ntpath: pointer to a UNICODE_STRING to hold the converted + * path name + * + * FIXME: Should we not allocate the ntpath buffer under some + * circumstances? + * Are the conversions static? (always prepend '\??\' ?) + * Not really sure about the last two arguments. */ BOOLEAN WINAPI RtlDosPathNameToNtPathName_U( - LPWSTR from,PUNICODE_STRING us,DWORD x2,DWORD x3) + LPWSTR szwDosPath,PUNICODE_STRING ntpath, + DWORD x2,DWORD x3) { - FIXME("(%s,%p,%08lx,%08lx)\n",debugstr_w(from),us,x2,x3); - if (us) RtlCreateUnicodeString( us, from ); + ULONG length; + UNICODE_STRING pathprefix; + WCHAR szPrefix[] = { '\\', '?', '?', '\\', 0 }; + + FIXME("(%s,%p,%08lx,%08lx) partial stub\n", + debugstr_w(szwDosPath),ntpath,x2,x3); + + if ( !szwDosPath ) + return FALSE; + + if ( !szwDosPath[0] ) + return FALSE; + + if ( szwDosPath[1]!= ':' ) + return FALSE; + + length = strlenW(szwDosPath) * sizeof (WCHAR) + sizeof szPrefix; + + ntpath->Buffer = RtlAllocateHeap(GetProcessHeap(), 0, length); + ntpath->Length = 0; + ntpath->MaximumLength = length; + + if ( !ntpath->Buffer ) + return FALSE; + + RtlInitUnicodeString( &pathprefix, szPrefix ); + RtlCopyUnicodeString( ntpath, &pathprefix ); + RtlAppendUnicodeToString( ntpath, szwDosPath ); + return TRUE; }