[2/2] msvcrt: Implement _mbslwr_s (try3, resend).
Konrad Rzepecki
hannibal at astral.lodz.pl
Fri Mar 18 05:05:20 CDT 2011
Line wrap fix, spoted by Dmitry Timoshkov.
---
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 a4589e1..1812407 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -921,7 +921,7 @@
@ stub _mbslen_l
@ cdecl _mbslwr(str) msvcrt._mbslwr
@ stub _mbslwr_l
-@ stub _mbslwr_s
+@ cdecl _mbslwr_s(str long) msvcrt._mbslwr_s
@ stub _mbslwr_s_l
@ cdecl _mbsnbcat(str str long) msvcrt._mbsnbcat
@ stub _mbsnbcat_l
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index b491d87..8b58e7d 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -767,7 +767,7 @@
@ stub _mbslen_l
@ cdecl _mbslwr(str) msvcrt._mbslwr
@ stub _mbslwr_l
-@ stub _mbslwr_s
+@ cdecl _mbslwr_s(str long) msvcrt._mbslwr_s
@ stub _mbslwr_s_l
@ cdecl _mbsnbcat(str str long) msvcrt._mbsnbcat
@ stub _mbsnbcat_l
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index d1cae36..d18651d 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -755,7 +755,7 @@
@ stub _mbslen_l
@ cdecl _mbslwr(str) msvcrt._mbslwr
@ stub _mbslwr_l
-@ stub _mbslwr_s
+@ cdecl _mbslwr_s(str long) msvcrt._mbslwr_s
@ stub _mbslwr_s_l
@ cdecl _mbsnbcat(str str long) msvcrt._mbsnbcat
@ stub _mbsnbcat_l
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index e2ea820..4c8a8d5 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -1544,6 +1544,42 @@ unsigned char* CDECL _mbslwr(unsigned char* s)
/*********************************************************************
+ * _mbslwr_s(MSVCRT.@)
+ */
+int CDECL _mbslwr_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 = _mbctolower(_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 = tolower(*s);
+ if (*s)
+ {
+ *s = '\0';
+ *MSVCRT__errno() = MSVCRT_ERANGE;
+ return MSVCRT_ERANGE;
+ }
+ return 0;
+}
+
+
+/*********************************************************************
* _mbsupr(MSVCRT.@)
*/
unsigned char* CDECL _mbsupr(unsigned char* s)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index e43c3f5..103142e 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -703,7 +703,7 @@
# stub _mbslen_l
@ cdecl _mbslwr(str)
# stub _mbslwr_l
-# stub _mbslwr_s
+@ cdecl _mbslwr_s(str long)
# stub _mbslwr_s_l
@ cdecl _mbsnbcat(str str long)
# stub _mbsnbcat_l
--
1.7.4.1
More information about the wine-patches
mailing list