msvcrt: Add function _mbsspnp.

Duane Clark fpga at pacbell.net
Fri Dec 22 17:24:30 CST 2006


Changelog: Add function _mbsspnp.
-------------- next part --------------

---

 dlls/msvcrt/mbcs.c         |   34 ++++++++++++++++++++++++++++++++++
 dlls/msvcrt/msvcrt.spec    |    2 +-
 dlls/msvcrt/tests/string.c |   19 +++++++++++++++++++
 3 files changed, 54 insertions(+), 1 deletions(-)

f96ff94dfe9e102a54e6ad8a40699aba6a771de6
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c
index 06c07e4..91549eb 100644
--- a/dlls/msvcrt/mbcs.c
+++ b/dlls/msvcrt/mbcs.c
@@ -1196,6 +1196,40 @@ MSVCRT_size_t CDECL _mbsspn(const unsign
 }
 
 /*********************************************************************
+ *              _mbsspnp (MSVCRT.@)
+ */
+const unsigned char* CDECL _mbsspnp(const unsigned char* string, const unsigned char* set)
+{
+    const unsigned char *p, *q;
+
+    for (p = string; *p; p++)
+    {
+        if (MSVCRT_isleadbyte(*p))
+        {
+            for (q = set; *q; q++)
+            {
+                if (!q[1])
+                    break;
+                if ((*p == *q) &&  (p[1] == q[1]))
+                    break;
+                q++;
+            }
+            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 p;
+}
+
+/*********************************************************************
  *		_mbscspn(MSVCRT.@)
  */
 MSVCRT_size_t CDECL _mbscspn(const unsigned char* str, const unsigned char* cmp)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 7712045..165ad42 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -386,7 +386,7 @@
 @ cdecl _mbsrev(str)
 @ cdecl _mbsset(str long)
 @ cdecl _mbsspn(str str)
-@ stub _mbsspnp #(str str)
+@ cdecl _mbsspnp(str str)
 @ cdecl _mbsstr(str str)
 @ cdecl _mbstok(str str)
 @ cdecl _mbstrlen(str)
diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c
index cd4ca02..8ff8bbd 100644
--- a/dlls/msvcrt/tests/string.c
+++ b/dlls/msvcrt/tests/string.c
@@ -99,6 +99,24 @@ static void test_mbsspn( void)
     ok( ret==0, "_mbsspn returns %d should be 0\n", ret);
 }
 
+static void test_mbsspnp( void)
+{
+    unsigned char str1[]="cabernet";
+    unsigned char str2[]="shiraz";
+    unsigned char set[]="abc";
+    unsigned char empty[]="";
+    unsigned char full[]="abcenrt";
+    unsigned char* ret;
+    ret=_mbsspnp( str1, set);
+    ok( ret[0]=='e', "_mbsspnp returns %c should be e\n", ret[0]);
+    ret=_mbsspnp( str2, set);
+    ok( ret[0]=='s', "_mbsspnp returns %c should be s\n", ret[0]);
+    ret=_mbsspnp( str1, empty);
+    ok( ret[0]=='c', "_mbsspnp returns %c should be c\n", ret[0]);
+    ret=_mbsspnp( str1, full);
+    ok( ret==NULL, "_mbsspnp returns %p should be NULL\n", ret);
+}
+
 static void test_strdup(void)
 {
    char *str;
@@ -138,6 +156,7 @@ START_TEST(string)
     test_ismbblead();
    /* test _mbsspn */
     test_mbsspn();
+    test_mbsspnp();
    /* test _strdup */
     test_strdup();
 }
-- 
1.1.4


More information about the wine-patches mailing list