2007-03-14 20:24:57 +00:00
|
|
|
/*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS system libraries
|
2015-09-19 13:50:57 +00:00
|
|
|
* FILE: lib/sdk/crt/stdlib/mbtowc.c
|
2007-03-14 20:24:57 +00:00
|
|
|
* PURPOSE: Unknown
|
|
|
|
* PROGRAMER: Unknown
|
|
|
|
* UPDATE HISTORY:
|
|
|
|
* 25/11/05: Added license header
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <precomp.h>
|
|
|
|
|
2014-05-18 18:35:45 +00:00
|
|
|
/*********************************************************************
|
|
|
|
* _mbtowc_l(MSVCRT.@)
|
2007-03-14 20:24:57 +00:00
|
|
|
*/
|
2014-05-18 18:35:45 +00:00
|
|
|
int CDECL _mbtowc_l(wchar_t *dst, const char* str, size_t n, _locale_t locale)
|
2007-03-14 20:24:57 +00:00
|
|
|
{
|
2014-05-18 18:35:45 +00:00
|
|
|
MSVCRT_pthreadlocinfo locinfo;
|
|
|
|
wchar_t tmpdst = '\0';
|
|
|
|
|
2020-04-21 09:28:07 +00:00
|
|
|
if (!locale)
|
2014-05-18 18:35:45 +00:00
|
|
|
locinfo = get_locinfo();
|
|
|
|
else
|
|
|
|
locinfo = (MSVCRT_pthreadlocinfo)(locale->locinfo);
|
|
|
|
|
2020-04-21 09:28:07 +00:00
|
|
|
if (n <= 0 || !str)
|
2014-05-18 18:35:45 +00:00
|
|
|
return 0;
|
2020-04-21 09:28:07 +00:00
|
|
|
|
|
|
|
if (!*str) {
|
|
|
|
if (dst) *dst = 0;
|
2014-05-18 18:35:45 +00:00
|
|
|
return 0;
|
2020-04-21 09:28:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!locinfo->lc_codepage) {
|
|
|
|
if (dst) *dst = (unsigned char)*str;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (n >= 2 && _isleadbyte_l((unsigned char)*str, locale)) {
|
|
|
|
if (!MultiByteToWideChar(locinfo->lc_codepage, 0, str, 2, &tmpdst, 1))
|
|
|
|
return -1;
|
|
|
|
if (dst) *dst = tmpdst;
|
2014-05-18 18:35:45 +00:00
|
|
|
return 2;
|
2020-04-21 09:28:07 +00:00
|
|
|
}
|
|
|
|
if (!MultiByteToWideChar(locinfo->lc_codepage, 0, str, 1, &tmpdst, 1))
|
|
|
|
return -1;
|
|
|
|
if (dst) *dst = tmpdst;
|
2014-05-18 18:35:45 +00:00
|
|
|
return 1;
|
|
|
|
}
|
2007-03-14 20:24:57 +00:00
|
|
|
|
2014-05-18 18:35:45 +00:00
|
|
|
/*********************************************************************
|
|
|
|
* mbtowc(MSVCRT.@)
|
|
|
|
*/
|
|
|
|
int CDECL mbtowc(wchar_t *dst, const char* str, size_t n)
|
|
|
|
{
|
|
|
|
return _mbtowc_l(dst, str, n, NULL);
|
2008-06-06 17:49:24 +00:00
|
|
|
}
|