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