update for HEAD-2003091401
[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 /*
9  * @implemented
10  */
11 int mbtowc(wchar_t *dst, const char *str, size_t n)
12 {
13 //    printf("\t\t\tmbtowc(%p, %p, %d) called.\n", dst, str, n);
14
15     if (n <= 0 || !str)
16         return 0;
17
18     *dst = *str;
19
20     if (!*str)
21         return 0;
22     return 1;
23 }
24
25 #else
26
27 int mbtowc(wchar_t *dst, const char *str, size_t n)
28 {
29     if (n <= 0 || !str)
30         return 0;
31     if (!MultiByteToWideChar(CP_ACP, 0, str, n, dst, (dst == NULL) ? 0 : 1)) {
32         DWORD err = GetLastError();
33         switch (err) {
34         case ERROR_INSUFFICIENT_BUFFER:
35             break;
36         case ERROR_INVALID_FLAGS:
37             break;
38         case ERROR_INVALID_PARAMETER:
39             break;
40         case ERROR_NO_UNICODE_TRANSLATION:
41             break;
42         default:
43             return 1;
44         }
45         return -1;
46     }
47     /* return the number of bytes from src that have been used */
48     if (!*str)
49         return 0;
50     if (n >= 2 && isleadbyte(*str) && str[1])
51         return 2;
52     return 1;
53 }
54
55 #endif