Alexandre Julliard : ntdll: Add strtok_s and wcstok_s.

Alexandre Julliard julliard at winehq.org
Wed Jun 29 16:25:53 CDT 2022


Module: wine
Branch: master
Commit: b44ebda3888fbd746a44b745d1f971e1a95a9025
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b44ebda3888fbd746a44b745d1f971e1a95a9025

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Jun 29 11:50:12 2022 +0200

ntdll: Add strtok_s and wcstok_s.

Implementation copied from msvcrt.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/ntdll.spec |  2 ++
 dlls/ntdll/string.c   | 27 +++++++++++++++++++++++++++
 dlls/ntdll/wcstring.c | 27 +++++++++++++++++++++++++++
 3 files changed, 56 insertions(+)

diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index e02c4278deb..18055fe3b9c 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -1604,6 +1604,7 @@
 @ cdecl strrchr(str long)
 @ cdecl strspn(str str)
 @ cdecl strstr(str str)
+@ cdecl strtok_s(str str ptr)
 @ cdecl strtol(str ptr long)
 @ cdecl strtoul(str ptr long)
 @ varargs swprintf(ptr wstr) NTDLL_swprintf
@@ -1637,6 +1638,7 @@
 @ cdecl wcsspn(wstr wstr)
 @ cdecl wcsstr(wstr wstr)
 @ cdecl wcstok(wstr wstr)
+@ cdecl wcstok_s(wstr wstr ptr)
 @ cdecl wcstol(wstr ptr long)
 @ cdecl wcstombs(ptr ptr long)
 @ cdecl wcstoul(wstr ptr long)
diff --git a/dlls/ntdll/string.c b/dlls/ntdll/string.c
index 6c4ac47803a..d0330f48926 100644
--- a/dlls/ntdll/string.c
+++ b/dlls/ntdll/string.c
@@ -795,6 +795,33 @@ int CDECL _tolower(int c)
 }
 
 
+/*********************************************************************
+ *                  strtok_s   (NTDLL.@)
+ */
+char * __cdecl strtok_s( char *str, const char *delim, char **ctx )
+{
+    char *next;
+
+    if (!delim || !ctx) return NULL;
+    if (!str)
+    {
+        str = *ctx;
+        if (!str) return NULL;
+    }
+    while (*str && strchr( delim, *str )) str++;
+    if (!*str)
+    {
+        *ctx = str;
+        return NULL;
+    }
+    next = str + 1;
+    while (*next && !strchr( delim, *next )) next++;
+    if (*next) *next++ = 0;
+    *ctx = next;
+    return str;
+}
+
+
 static int char_to_int( char c )
 {
     if ('0' <= c && c <= '9') return c - '0';
diff --git a/dlls/ntdll/wcstring.c b/dlls/ntdll/wcstring.c
index e481c89ca71..ed9e1612918 100644
--- a/dlls/ntdll/wcstring.c
+++ b/dlls/ntdll/wcstring.c
@@ -455,6 +455,33 @@ LPWSTR __cdecl wcstok( LPWSTR str, LPCWSTR delim )
 }
 
 
+/*********************************************************************
+ *                  wcstok_s   (NTDLL.@)
+ */
+wchar_t * __cdecl wcstok_s( wchar_t *str, const wchar_t *delim, wchar_t **ctx )
+{
+    wchar_t *next;
+
+    if (!delim || !ctx) return NULL;
+    if (!str)
+    {
+        str = *ctx;
+        if (!str) return NULL;
+    }
+    while (*str && wcschr( delim, *str )) str++;
+    if (!*str)
+    {
+        *ctx = str;
+        return NULL;
+    }
+    next = str + 1;
+    while (*next && !wcschr( delim, *next )) next++;
+    if (*next) *next++ = 0;
+    *ctx = next;
+    return str;
+}
+
+
 /*********************************************************************
  *           wcstombs    (NTDLL.@)
  */




More information about the wine-cvs mailing list