msvcrt: Added _tolower_l implementation.

oldstable
Piotr Caban 2011-05-12 11:38:32 +02:00 committed by Alexandre Julliard
parent 1e981e5e9c
commit 0ea4e668f5
2 changed files with 45 additions and 2 deletions

View File

@ -379,6 +379,49 @@ int CDECL MSVCRT__toupper(int c)
return c - 0x20; /* sic */
}
/*********************************************************************
* _tolower_l (MSVCRT.@)
*/
int CDECL MSVCRT__tolower_l(int c, MSVCRT__locale_t locale)
{
if(!locale)
locale = get_locale();
if(c < 256)
return locale->locinfo->pclmap[c];
if(locale->locinfo->pctype[(c>>8)&255] & MSVCRT__LEADBYTE)
{
WCHAR wide, upper;
char str[2], *p = str;
*p++ = (c>>8) & 255;
*p++ = c & 255;
if(!MultiByteToWideChar(locale->locinfo->lc_codepage,
MB_ERR_INVALID_CHARS, str, 2, &wide, 1))
return c;
upper = tolowerW(wide);
if(upper == wide)
return c;
WideCharToMultiByte(locale->locinfo->lc_codepage, 0,
&upper, 1, str, 2, NULL, NULL);
return str[0] + (str[1]<<8);
}
return c;
}
/*********************************************************************
* tolower (MSVCRT.@)
*/
int CDECL MSVCRT_tolower(int c)
{
return MSVCRT__tolower_l(c, NULL);
}
/*********************************************************************
* _tolower (MSVCRT.@)
*/

View File

@ -977,7 +977,7 @@
@ cdecl _time64(ptr) MSVCRT__time64
@ extern _timezone MSVCRT___timezone
@ cdecl _tolower(long) MSVCRT__tolower
# stub _tolower_l(long ptr)
@ cdecl _tolower_l(long ptr) MSVCRT__tolower_l
@ cdecl _toupper(long) MSVCRT__toupper
@ cdecl _toupper_l(long ptr) MSVCRT__toupper_l
@ cdecl _towlower_l(long ptr) MSVCRT__towlower_l
@ -1425,7 +1425,7 @@
# stub tmpfile_s(ptr)
@ cdecl tmpnam(ptr) MSVCRT_tmpnam
# stub tmpnam_s(ptr long)
@ cdecl tolower(long) ntdll.tolower
@ cdecl tolower(long) MSVCRT_tolower
@ cdecl toupper(long) MSVCRT_toupper
@ cdecl towlower(long) ntdll.towlower
@ cdecl towupper(long) ntdll.towupper