[1/2] msvcrt: Implement _mbsupr_s (try2).
Konrad Rzepecki
hannibal at astral.lodz.pl
Thu Mar 17 15:31:36 CDT 2011
Split previous patch to sepratare each function implementation.
Sugested by Austin English.
---
dlls/msvcr100/msvcr100.spec | 2 +-
dlls/msvcr80/msvcr80.spec | 2 +-
dlls/msvcr90/msvcr90.spec | 2 +-
dlls/msvcrt/mbcs.c | 36
++++++++++++++++++++++++++++++++++++
dlls/msvcrt/msvcrt.spec | 2 +-
5 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 473f663..a4589e1 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1001,7 +1001,7 @@
@ stub _mbstrnlen_l
@ cdecl _mbsupr(str) msvcrt._mbsupr
@ stub _mbsupr_l
-@ stub _mbsupr_s
+@ cdecl _mbsupr_s(str long) msvcrt._mbsupr_s
@ stub _mbsupr_s_l
@ stub _mbtowc_l
@ cdecl _memccpy(ptr ptr long long) msvcrt._memccpy
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 9da91db..b491d87 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -847,7 +847,7 @@
@ stub _mbstrnlen_l
@ cdecl _mbsupr(str) msvcrt._mbsupr
@ stub _mbsupr_l
-@ stub _mbsupr_s
+@ cdecl _mbsupr_s(str long) msvcrt._mbsupr_s
@ stub _mbsupr_s_l
@ stub _mbtowc_l
@ cdecl _memccpy(ptr ptr long long) msvcrt._memccpy
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 96d4589..d1cae36 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -835,7 +835,7 @@
@ stub _mbstrnlen_l
@ cdecl _mbsupr(str) msvcrt._mbsupr
@ stub _mbsupr_l
-@ stub _mbsupr_s
+@ cdecl _mbsupr_s(str long) msvcrt._mbsupr_s
@ stub _mbsupr_s_l
@ stub _mbtowc_l
@ cdecl _memccpy(ptr ptr long long) msvcrt._memccpy
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index 5767242..e2ea820 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -1572,6 +1572,42 @@ unsigned char* CDECL _mbsupr(unsigned char* s)
/*********************************************************************
+ * _mbsupr_s(MSVCRT.@)
+ */
+int CDECL _mbsupr_s(unsigned char* s, MSVCRT_size_t len)
+{
+ if (!s)
+ {
+ *MSVCRT__errno() = MSVCRT_EINVAL;
+ return MSVCRT_EINVAL;
+ }
+ if (get_locale()->locinfo->mb_cur_max > 1)
+ {
+ unsigned int c;
+ for ( ; *s && len > 0; len--)
+ {
+ 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;
+ }
+ }
+ else for ( ; *s && len > 0; s++, len--) *s = toupper(*s);
+ if (*s)
+ {
+ *s = '\0';
+ *MSVCRT__errno() = MSVCRT_ERANGE;
+ return MSVCRT_ERANGE;
+ }
+ return 0;
+}
+
+
+/*********************************************************************
* _mbsspn (MSVCRT.@)
*/
MSVCRT_size_t CDECL _mbsspn(const unsigned char* string, const
unsigned char* set)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index c324dea..e43c3f5 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -783,7 +783,7 @@
# stub _mbstrnlen_l
@ cdecl _mbsupr(str)
# stub _mbsupr_l
-# stub _mbsupr_s
+@ cdecl _mbsupr_s(str long)
# stub _mbsupr_s_l
# stub _mbtowc_l
@ cdecl _memccpy(ptr ptr long long) ntdll._memccpy
--
1.7.4.1
More information about the wine-patches
mailing list