ChangeLog: Partial implementation of RtlDosPathNameToNtPathName_U
Index: dlls/ntdll/rtl.c =================================================================== RCS file: /home/wine/wine/dlls/ntdll/rtl.c,v retrieving revision 1.50 diff -u -r1.50 rtl.c --- dlls/ntdll/rtl.c 12 Sep 2002 22:07:03 -0000 1.50 +++ dlls/ntdll/rtl.c 13 Nov 2002 05:26:16 -0000 @@ -25,6 +25,7 @@ #include <stdio.h> #include <string.h> #include "wine/debug.h" +#include "wine/unicode.h" #include "windef.h" #include "winerror.h" #include "stackframe.h" @@ -335,13 +336,48 @@ /************************************************************************** * 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; }