xref: /reactos/sdk/lib/crt/stdlib/mbtowc.c (revision 11345aed)
1 /*
2  * COPYRIGHT:   See COPYING in the top level directory
3  * PROJECT:     ReactOS system libraries
4  * FILE:        lib/sdk/crt/stdlib/mbtowc.c
5  * PURPOSE:     Unknown
6  * PROGRAMER:   Unknown
7  * UPDATE HISTORY:
8  *              25/11/05: Added license header
9  */
10 
11 #include <precomp.h>
12 
13 /*********************************************************************
14  *		_mbtowc_l(MSVCRT.@)
15  */
16 int CDECL _mbtowc_l(wchar_t *dst, const char* str, size_t n, _locale_t locale)
17 {
18     MSVCRT_pthreadlocinfo locinfo;
19     wchar_t tmpdst = '\0';
20 
21     if (!locale)
22         locinfo = get_locinfo();
23     else
24         locinfo = (MSVCRT_pthreadlocinfo)(locale->locinfo);
25 
26     if (n <= 0 || !str)
27         return 0;
28 
29     if (!*str) {
30         if (dst) *dst = 0;
31         return 0;
32     }
33 
34     if (!locinfo->lc_codepage) {
35         if (dst) *dst = (unsigned char)*str;
36         return 1;
37     }
38     if (n >= 2 && _isleadbyte_l((unsigned char)*str, locale)) {
39         if (!MultiByteToWideChar(locinfo->lc_codepage, 0, str, 2, &tmpdst, 1))
40             return -1;
41         if (dst) *dst = tmpdst;
42         return 2;
43     }
44     if (!MultiByteToWideChar(locinfo->lc_codepage, 0, str, 1, &tmpdst, 1))
45         return -1;
46     if (dst) *dst = tmpdst;
47     return 1;
48 }
49 
50 /*********************************************************************
51  *              mbtowc(MSVCRT.@)
52  */
53 int CDECL mbtowc(wchar_t *dst, const char* str, size_t n)
54 {
55     return _mbtowc_l(dst, str, n, NULL);
56 }
57