[CRT]
[reactos.git] / reactos / lib / sdk / crt / stdlib / mbstowcs.c
1 #include <precomp.h>
2
3 /*********************************************************************
4 * _mbstowcs_l
5 */
6 size_t CDECL _mbstowcs_l(wchar_t *wcstr, const char *mbstr,
7 size_t count, _locale_t locale)
8 {
9 MSVCRT_pthreadlocinfo locinfo;
10 size_t i, size;
11
12 if(!locale)
13 locinfo = get_locinfo();
14 else
15 locinfo = ((MSVCRT__locale_t)locale)->locinfo;
16
17 /* Ignore count parameter */
18 if(!wcstr)
19 return MultiByteToWideChar(locinfo->lc_codepage, 0, mbstr, -1, NULL, 0)-1;
20
21 for(i=0, size=0; i<count; i++) {
22 if(mbstr[size] == '\0')
23 break;
24
25 size += (_isleadbyte_l((unsigned char)mbstr[size], locale) ? 2 : 1);
26 }
27
28 size = MultiByteToWideChar(locinfo->lc_codepage, 0,
29 mbstr, size, wcstr, count);
30
31 if(size<count && wcstr)
32 wcstr[size] = '\0';
33
34 return size;
35 }
36
37 /*
38 * @implemented
39 */
40 size_t mbstowcs (wchar_t *widechar, const char *multibyte, size_t number)
41 {
42 return _mbstowcs_l(widechar, multibyte, number, NULL);
43 }