Module: wine Branch: master Commit: 8f3a5198bc5abe1a0f105c1665f82fdc3973ce74 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8f3a5198bc5abe1a0f105c1665...
Author: Piotr Caban piotr@codeweavers.com Date: Thu Dec 22 18:24:55 2011 +0100
msvcp90: Added ctype<wchar_t>::toupper functions implementation.
---
dlls/msvcp90/locale.c | 29 +++++++++++++++++++++-------- dlls/msvcp90/msvcp90.spec | 2 +- 2 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c index 24d521f..0ffc25c 100644 --- a/dlls/msvcp90/locale.c +++ b/dlls/msvcp90/locale.c @@ -2207,15 +2207,23 @@ const wchar_t* __thiscall ctype_wchar_tolower(const ctype_wchar *this, return call_ctype_wchar_do_tolower(this, first, last); }
+/* _Towupper */ +wchar_t __cdecl _Towupper(wchar_t ch, const _Ctypevec *ctype) +{ + TRACE("(%d %p)\n", ch, ctype); + return toupperW(ch); +} + /* ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z */ /* ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z */ /* ?do_toupper@?$ctype@G@std@@MBEGG@Z */ /* ?do_toupper@?$ctype@G@std@@MEBAGG@Z */ DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper_ch, 8) +#define call_ctype_wchar_do_toupper_ch(this, ch) CALL_VTBL_FUNC(this, 32, \ + wchar_t, (const ctype_wchar*, wchar_t), (this, ch)) wchar_t __thiscall ctype_wchar_do_toupper_ch(const ctype_wchar *this, wchar_t ch) { - FIXME("(%p %d) stub\n", this, ch); - return 0; + return _Towupper(ch, &this->ctype); }
/* ?do_toupper@?$ctype@_W@std@@MBEPB_WPA_WPB_W@Z */ @@ -2223,11 +2231,16 @@ wchar_t __thiscall ctype_wchar_do_toupper_ch(const ctype_wchar *this, wchar_t ch /* ?do_toupper@?$ctype@G@std@@MBEPBGPAGPBG@Z */ /* ?do_toupper@?$ctype@G@std@@MEBAPEBGPEAGPEBG@Z */ DEFINE_THISCALL_WRAPPER(ctype_wchar_do_toupper, 12) +#define call_ctype_wchar_do_toupper(this, first, last) CALL_VTBL_FUNC(this, 28, \ + const wchar_t*, (const ctype_wchar*, wchar_t*, const wchar_t*), \ + (this, first, last)) const wchar_t* __thiscall ctype_wchar_do_toupper(const ctype_wchar *this, wchar_t *first, const wchar_t *last) { - FIXME("(%p %p %p) stub\n", this, first, last); - return NULL; + TRACE("(%p %p %p)\n", this, first, last); + for(; first<last; first++) + *first = _Towupper(*first, &this->ctype); + return last; }
/* ?toupper@?$ctype@_W@std@@QBE_W_W@Z */ @@ -2237,8 +2250,8 @@ const wchar_t* __thiscall ctype_wchar_do_toupper(const ctype_wchar *this, DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper_ch, 8) wchar_t __thiscall ctype_wchar_toupper_ch(const ctype_wchar *this, wchar_t ch) { - FIXME("(%p %d) stub\n", this, ch); - return 0; + TRACE("(%p %d)\n", this, ch); + return call_ctype_wchar_do_toupper_ch(this, ch); }
/* ?toupper@?$ctype@_W@std@@QBEPB_WPA_WPB_W@Z */ @@ -2249,8 +2262,8 @@ DEFINE_THISCALL_WRAPPER(ctype_wchar_toupper, 12) const wchar_t* __thiscall ctype_wchar_toupper(const ctype_wchar *this, wchar_t *first, const wchar_t *last) { - FIXME("(%p %p %p) stub\n", this, first, last); - return NULL; + TRACE("(%p %p %p)\n", this, first, last); + return call_ctype_wchar_do_toupper(this, first, last); }
/* ?do_is@?$ctype@_W@std@@MBE_NF_W@Z */ diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index f03e024..1555fac 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -5801,7 +5801,7 @@ @ cdecl _Tolower(long ptr) @ cdecl _Toupper(long ptr) @ cdecl _Towlower(long ptr) -@ stub _Towupper +@ cdecl _Towupper(long ptr) @ cdecl _Wcrtomb(ptr long ptr ptr) @ cdecl _Wcscoll(ptr ptr ptr ptr ptr) @ stub _Wcsxfrm