Improved unicode fileio support.
[reactos.git] / reactos / lib / msvcrt / stdlib / mbtowc.c
1 #include <windows.h>
2 #include <msvcrt/stdlib.h>
3 #include <msvcrt/ctype.h>
4
5
6 #if 1
7
8 int mbtowc(wchar_t *dst, const char *str, size_t n)
9 {
10 // printf("\t\t\tmbtowc(%p, %p, %d) called.\n", dst, str, n);
11
12 if (n <= 0 || !str)
13 return 0;
14
15 *dst = *str;
16
17 if (!*str)
18 return 0;
19 return 1;
20 }
21
22 #else
23
24 int mbtowc(wchar_t *dst, const char *str, size_t n)
25 {
26 if (n <= 0 || !str)
27 return 0;
28 if (!MultiByteToWideChar(CP_ACP, 0, str, n, dst, (dst == NULL) ? 0 : 1)) {
29 DWORD err = GetLastError();
30 switch (err) {
31 case ERROR_INSUFFICIENT_BUFFER:
32 break;
33 case ERROR_INVALID_FLAGS:
34 break;
35 case ERROR_INVALID_PARAMETER:
36 break;
37 case ERROR_NO_UNICODE_TRANSLATION:
38 break;
39 default:
40 return 1;
41 }
42 return -1;
43 }
44 /* return the number of bytes from src that have been used */
45 if (!*str)
46 return 0;
47 if (n >= 2 && isleadbyte(*str) && str[1])
48 return 2;
49 return 1;
50 }
51
52 #endif