From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 57 ++++++++++++++++++++++++------------- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 +-- 8 files changed, 45 insertions(+), 28 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 5996051d5ed..97f179bc977 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1200,7 +1200,7 @@ @ stub _mbstrnlen @ stub _mbstrnlen_l @ cdecl _mbsupr(str) -@ stub _mbsupr_l +@ cdecl _mbsupr_l(str ptr) @ cdecl _mbsupr_s(str long) @ cdecl _mbsupr_s_l(str long ptr) @ cdecl _mbtowc_l(ptr str long ptr) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 1dacd170343..10b922c4a68 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1557,7 +1557,7 @@ @ stub _mbstrnlen @ stub _mbstrnlen_l @ cdecl _mbsupr(str) -@ stub _mbsupr_l +@ cdecl _mbsupr_l(str ptr) @ cdecl _mbsupr_s(str long) @ cdecl _mbsupr_s_l(str long ptr) @ cdecl _mbtowc_l(ptr str long ptr) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index b0e7c83101c..15b25cbd094 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1568,7 +1568,7 @@ @ stub _mbstrnlen @ stub _mbstrnlen_l @ cdecl _mbsupr(str) -@ stub _mbsupr_l +@ cdecl _mbsupr_l(str ptr) @ cdecl _mbsupr_s(str long) @ cdecl _mbsupr_s_l(str long ptr) @ cdecl _mbtowc_l(ptr str long ptr) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 68660cd6e87..43c59ab7cfc 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -872,7 +872,7 @@ @ stub _mbstrnlen @ stub _mbstrnlen_l @ cdecl _mbsupr(str) -@ stub _mbsupr_l +@ cdecl _mbsupr_l(str ptr) @ cdecl _mbsupr_s(str long) @ cdecl _mbsupr_s_l(str long ptr) @ cdecl _mbtowc_l(ptr str long ptr) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 5f38afdbdfc..d590ffda47f 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -850,7 +850,7 @@ @ stub _mbstrnlen @ stub _mbstrnlen_l @ cdecl _mbsupr(str) -@ stub _mbsupr_l +@ cdecl _mbsupr_l(str ptr) @ cdecl _mbsupr_s(str long) @ cdecl _mbsupr_s_l(str long ptr) @ cdecl _mbtowc_l(ptr str long ptr) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 3fe40cfc98e..897ebc8a9a5 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2433,30 +2433,47 @@ int CDECL _mbslwr_s(unsigned char* str, size_t len) }
/********************************************************************* - * _mbsupr(MSVCRT.@) + * _mbsupr_l(MSVCRT.@) */ -unsigned char* CDECL _mbsupr(unsigned char* s) +unsigned char* CDECL _mbsupr_l(unsigned char* s, _locale_t locale) { - unsigned char *ret = s; - if (!s) - return NULL; - if (get_mbcinfo()->ismbcodepage) - { - unsigned int c; - while (*s) + unsigned char *ret = s; + pthreadmbcinfo mbcinfo; + + if (!MSVCRT_CHECK_PMT(s)) + return NULL; + + if (locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + + if (mbcinfo->ismbcodepage) { - c = _mbctoupper(_mbsnextc(s)); - /* Note that I assume that the size of the character is unchanged */ - if (c > 255) - { - *s++=(c>>8); - c=c & 0xff; - } - *s++=c; + unsigned int c; + while (*s) + { + c = _mbctoupper_l(_mbsnextc_l(s, locale), locale); + /* Note that I assume that the size of the character is unchanged */ + if (c > 255) + { + *s++ = (c >> 8); + c = c & 0xff; + } + *s++ = c; + } } - } - else for ( ; *s; s++) *s = _toupper_l(*s, NULL); - return ret; + else + for ( ; *s; s++) *s = _toupper_l(*s, locale); + return ret; +} + +/********************************************************************* + * _mbsupr(MSVCRT.@) + */ +unsigned char* CDECL _mbsupr(unsigned char* s) +{ + return _mbsupr_l(s, NULL); }
/********************************************************************* diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 7d7c81f72dd..ac180d8d718 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -821,7 +821,7 @@ # stub _mbstrnlen(str long) # stub _mbstrnlen_l(str long ptr) @ cdecl _mbsupr(str) -# stub _mbsupr_l(str ptr) +@ cdecl _mbsupr_l(str ptr) @ cdecl _mbsupr_s(str long) @ cdecl _mbsupr_s_l(str long ptr) @ cdecl _mbtowc_l(ptr str long ptr) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 995237dcc5c..dba8a6ed056 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -716,7 +716,7 @@ @ stub _mbstrnlen @ stub _mbstrnlen_l @ cdecl _mbsupr(str) -@ stub _mbsupr_l +@ cdecl _mbsupr_l(str ptr) @ cdecl _mbsupr_s(str long) @ cdecl _mbsupr_s_l(str long ptr) @ cdecl _mbtowc_l(ptr str long ptr) @@ -1285,7 +1285,7 @@ @ stub _o__mbstrnlen @ stub _o__mbstrnlen_l @ cdecl _o__mbsupr(str) _mbsupr -@ stub _o__mbsupr_l +@ cdecl _o__mbsupr_l(str ptr) _mbsupr_l @ cdecl _o__mbsupr_s(str long) _mbsupr_s @ cdecl _o__mbsupr_s_l(str long ptr) _mbsupr_s_l @ cdecl _o__mbtowc_l(ptr str long ptr) _mbtowc_l