Author: tkreuzer Date: Wed Mar 9 15:29:13 2011 New Revision: 51003
URL: http://svn.reactos.org/svn/reactos?rev=51003&view=rev Log: [CRT] Patch by Thomas Faber: Fix nt version of mbstowcs.
See issue #5983 for more details.
Modified: trunk/reactos/lib/sdk/crt/string/mbstowcs_nt.c
Modified: trunk/reactos/lib/sdk/crt/string/mbstowcs_nt.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/string/mbstowcs... ============================================================================== --- trunk/reactos/lib/sdk/crt/string/mbstowcs_nt.c [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/string/mbstowcs_nt.c [iso-8859-1] Wed Mar 9 15:29:13 2011 @@ -4,26 +4,35 @@ #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) { - 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;
- 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 (int)Size; + *wchar = wc; + + return mbs - mbarr; }
/*