Akihiro Sagawa : msvcrt: Reimplement _mbsspnp using _mbsspn.
Alexandre Julliard
julliard at winehq.org
Mon Sep 2 14:50:19 CDT 2019
Module: wine
Branch: master
Commit: ab525d3f6f813e23af8164ed2d6023f3eeb3e018
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ab525d3f6f813e23af8164ed2d6023f3eeb3e018
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Mon Sep 2 19:50:29 2019 +0200
msvcrt: Reimplement _mbsspnp using _mbsspn.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47693
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msvcrt/mbcs.c | 47 +++++++++++++++-------------------------------
dlls/msvcrt/tests/string.c | 4 ++--
2 files changed, 17 insertions(+), 34 deletions(-)
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index cc2a9f2..6f965f5 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -2028,19 +2028,26 @@ int CDECL _mbsupr_s(unsigned char* s, MSVCRT_size_t len)
MSVCRT_size_t CDECL _mbsspn(const unsigned char* string, const unsigned char* set)
{
const unsigned char *p, *q;
- unsigned int pc, qc;
for (p = string; *p; p++)
{
- pc = _mbsnextc(p);
for (q = set; *q; q++)
{
- qc = _mbsnextc(q);
- if (pc == qc) break;
- if (qc > 255 && q[1]) q++;
+ if (_ismbblead(*q))
+ {
+ if (p[0] == q[0] && p[1] == q[1])
+ {
+ p++;
+ break;
+ }
+ q++;
+ }
+ else
+ {
+ if (p[0] == q[0]) break;
+ }
}
if (!*q) break;
- if (pc > 255 && p[1]) p++;
}
return p - string;
}
@@ -2050,32 +2057,8 @@ MSVCRT_size_t CDECL _mbsspn(const unsigned char* string, const unsigned char* se
*/
unsigned char* CDECL _mbsspnp(const unsigned char* string, const unsigned char* set)
{
- const unsigned char *p, *q;
-
- for (p = string; *p; p++)
- {
- if (_ismbblead(*p))
- {
- for (q = set; *q; q += 2)
- {
- if (!q[1])
- break;
- if ((*p == *q) && (p[1] == q[1]))
- break;
- }
- if (!q[0] || !q[1]) break;
- }
- else
- {
- for (q = set; *q; q++)
- if (*p == *q)
- break;
- if (!*q) break;
- }
- }
- if (*p == '\0')
- return NULL;
- return (unsigned char *)p;
+ string += _mbsspn( string, set );
+ return *string ? (unsigned char*)string : NULL;
}
/*********************************************************************
diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c
index ed459bc..b937f17 100644
--- a/dlls/msvcrt/tests/string.c
+++ b/dlls/msvcrt/tests/string.c
@@ -565,13 +565,13 @@ static void test_mbsspnp( void)
_setmbcp( 932);
ret=_mbsspnp( mbstr, mbset1);
- todo_wine ok( ret==mbstr+8, "_mbsspnp returns %p should be %p\n", ret, mbstr+8);
+ ok( ret==mbstr+8, "_mbsspnp returns %p should be %p\n", ret, mbstr+8);
ret=_mbsspnp( mbstr, mbset2);
ok( ret==mbstr+1, "_mbsspnp returns %p should be %p\n", ret, mbstr+1);
ret=_mbsspnp( mbstr+8, mbset1);
ok( ret==mbstr+8, "_mbsspnp returns %p should be %p\n", ret, mbstr+8);
ret=_mbsspnp( mbstr+8, mbset2);
- todo_wine ok( ret==mbstr+10, "_mbsspnp returns %p should be %p\n", ret, mbstr+10);
+ ok( ret==mbstr+10, "_mbsspnp returns %p should be %p\n", ret, mbstr+10);
_setmbcp( cp);
}
More information about the wine-cvs
mailing list