Partial implementation of RtlDosPathNameToNtPathName_U (take 2)

Mike McCormack mike at codeweavers.com
Tue Nov 12 23:31:43 CST 2002


ChangeLog:
Partial implementation of RtlDosPathNameToNtPathName_U



-------------- next part --------------
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;
 }
 


More information about the wine-patches mailing list