update for HEAD-2003021201
[reactos.git] / 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