[CRT]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 9 Mar 2011 15:29:13 +0000 (15:29 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 9 Mar 2011 15:29:13 +0000 (15:29 +0000)
Patch by Thomas Faber: Fix nt version of mbstowcs.

See issue #5983 for more details.

svn path=/trunk/; revision=51003

reactos/lib/sdk/crt/string/mbstowcs_nt.c

index 4b61336..7058558 100644 (file)
@@ -4,26 +4,35 @@
 #include <ndk/rtlfuncs.h>
 #include <string.h>
 
 #include <ndk/rtlfuncs.h>
 #include <string.h>
 
+WCHAR NTAPI RtlAnsiCharToUnicodeChar(IN OUT PUCHAR *AnsiChar);
+#undef MB_CUR_MAX
+#define MB_CUR_MAX 2
+
 /*
  * @implemented
  */
 int mbtowc (wchar_t *wchar, const char *mbchar, size_t count)
 {
 /*
  * @implemented
  */
 int mbtowc (wchar_t *wchar, const char *mbchar, size_t count)
 {
-       NTSTATUS Status;
-       ULONG Size;
+       UCHAR mbarr[MB_CUR_MAX] = { 0 };
+       PUCHAR mbs = mbarr;
+       WCHAR wc;
+
+       if (mbchar == NULL)
+               return 0;
 
        if (wchar == NULL)
                return 0;
 
 
        if (wchar == NULL)
                return 0;
 
-       Status = RtlMultiByteToUnicodeN (wchar,
-                                        sizeof(WCHAR),
-                                        &Size,
-                                        mbchar,
-                                        count);
-       if (!NT_SUCCESS(Status))
+       memcpy(mbarr, mbchar, min(count, sizeof mbarr));
+
+       wc = RtlAnsiCharToUnicodeChar(&mbs);
+
+       if (wc == L' ' && mbarr[0] != ' ')
                return -1;
 
                return -1;
 
-       return (int)Size;
+       *wchar = wc;
+
+       return mbs - mbarr;
 }
 
 /*
 }
 
 /*