Alexandre Julliard : ntdll: Add strtok_s and wcstok_s.
Module: wine Branch: master Commit: b44ebda3888fbd746a44b745d1f971e1a95a9025 URL: https://source.winehq.org/git/wine.git/?a=commit;h=b44ebda3888fbd746a44b745d... Author: Alexandre Julliard <julliard(a)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(a)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.@) */
participants (1)
-
Alexandre Julliard