Piotr Caban : msvcrt: Added _toupper_l implementation.
Alexandre Julliard
julliard at winehq.org
Thu May 12 13:57:48 CDT 2011
Module: wine
Branch: master
Commit: 1e981e5e9c6cfa3f0943cc6d53e8b44e9ed1c297
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1e981e5e9c6cfa3f0943cc6d53e8b44e9ed1c297
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu May 12 11:38:23 2011 +0200
msvcrt: Added _toupper_l implementation.
---
dlls/msvcrt/ctype.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
dlls/msvcrt/msvcrt.spec | 4 ++--
2 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/ctype.c b/dlls/msvcrt/ctype.c
index 2149591..9de24e8 100644
--- a/dlls/msvcrt/ctype.c
+++ b/dlls/msvcrt/ctype.c
@@ -20,6 +20,7 @@
#include "msvcrt.h"
#include "winnls.h"
+#include "wine/unicode.h"
/* Some abbreviations to make the following table readable */
#define _C_ MSVCRT__CONTROL
@@ -328,6 +329,49 @@ int CDECL MSVCRT___iscsymf(int c)
}
/*********************************************************************
+ * _toupper_l (MSVCRT.@)
+ */
+int CDECL MSVCRT__toupper_l(int c, MSVCRT__locale_t locale)
+{
+ if(!locale)
+ locale = get_locale();
+
+ if(c < 256)
+ return locale->locinfo->pcumap[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 = toupperW(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;
+}
+
+/*********************************************************************
+ * toupper (MSVCRT.@)
+ */
+int CDECL MSVCRT_toupper(int c)
+{
+ return MSVCRT__toupper_l(c, NULL);
+}
+
+/*********************************************************************
* _toupper (MSVCRT.@)
*/
int CDECL MSVCRT__toupper(int c)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 15de47a..ebef717 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -979,7 +979,7 @@
@ cdecl _tolower(long) MSVCRT__tolower
# stub _tolower_l(long ptr)
@ cdecl _toupper(long) MSVCRT__toupper
-# stub _toupper_l(long ptr)
+@ cdecl _toupper_l(long ptr) MSVCRT__toupper_l
@ cdecl _towlower_l(long ptr) MSVCRT__towlower_l
@ cdecl _towupper_l(long ptr) MSVCRT__towupper_l
@ extern _tzname MSVCRT__tzname
@@ -1426,7 +1426,7 @@
@ cdecl tmpnam(ptr) MSVCRT_tmpnam
# stub tmpnam_s(ptr long)
@ cdecl tolower(long) ntdll.tolower
-@ cdecl toupper(long) ntdll.toupper
+@ cdecl toupper(long) MSVCRT_toupper
@ cdecl towlower(long) ntdll.towlower
@ cdecl towupper(long) ntdll.towupper
@ cdecl ungetc(long ptr) MSVCRT_ungetc
More information about the wine-cvs
mailing list