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 */
_mbtowc_l(wchar_t * dst,const char * str,size_t n,_locale_t locale)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 */
mbtowc(wchar_t * dst,const char * str,size_t n)53 int CDECL mbtowc(wchar_t *dst, const char* str, size_t n)
54 {
55 return _mbtowc_l(dst, str, n, NULL);
56 }
57