From 729db5025b7f98adf17c87a79492b577c59f9704 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Tue, 1 Sep 2015 15:39:09 +0200 Subject: add strtok functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- include/string.h | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/wchar.h | 45 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) (limited to 'include') diff --git a/include/string.h b/include/string.h index 676a721..a351e8d 100644 --- a/include/string.h +++ b/include/string.h @@ -1013,6 +1013,65 @@ char* stpbrk(const char*, const char*) __GCC_ONLY(__attribute__((warn_unused_result, nonnull))); +/** + * Tokenise a string. + * + * @param string The string to tokenise on the first, + * `NULL` on subsequent calls. + * All bytes found in `delimiters` will + * be overriden with NUL bytes. + * @param delimiters Delimiting bytes (not characters). + * @return The next non-empty string that does not + * contain a byte from `delimiters`. The + * returned string will be as long as possible. + * `NULL` is returned the search as reached + * the end of the string, and there therefore + * are no more tokens. + */ +char* strtok(char* restrict, const char* restrict) + __GCC_ONLY(__attribute__((warn_unused_result, nonnull(2)))); + +/** + * Tokenise a string. + * + * @param string The string to tokenise on the first, + * `NULL` on subsequent calls. + * All bytes found in `delimiters` will + * be overriden with NUL bytes. + * @param delimiters Delimiting bytes (not characters). + * @param state Pointer to a `char*` that the function + * can use to keep track of its state. + * It is reasonable to make it point to `NULL` + * on the first call. + * @return The next non-empty string that does not + * contain a byte from `delimiters`. The + * returned string will be as long as possible. + * `NULL` is returned the search as reached + * the end of the string, and there therefore + * are no more tokens. + */ +char* strtok_r(char* restrict, const char* restrict, char** restrict) + __GCC_ONLY(__attribute__((warn_unused_result, nonnull(2, 3)))); + +/** + * Tokenise a string. + * + * @param string Pointer to the string to tokenise on the first call, + * will be updated to keep track of the state. + * All bytes found in `delimiters` will + * be overriden with NUL bytes. + * @param delimiters Delimiting bytes (not characters). + * @return The next, possibly empty, string that does + * not contain a byte from `delimiters`. The + * returned string will be as long as possible. + * `NULL` is returned the search as reached + * the end of the string, and there therefore + * are no more tokens. + */ +char* strsep(char** restrict, const char* restrict) + __GCC_ONLY(__attribute__((warn_unused_result, nonnull))); + + #endif diff --git a/include/wchar.h b/include/wchar.h index 31e985d..faf9275 100644 --- a/include/wchar.h +++ b/include/wchar.h @@ -978,6 +978,51 @@ wchar_t* wcpbrk(const wchar_t*, const wchar_t*) __GCC_ONLY(__attribute__((warn_unused_result, nonnull))); +/** + * Tokenise a string. + * + * @param string The string to tokenise on the first, + * `NULL` on subsequent calls. + * All characters found in `delimiters` will + * be overriden with NUL characters. + * @param delimiters Delimiting characters. + * @param state Pointer to a `char*` that the function + * can use to keep track of its state. + * It is reasonable to make it point to `NULL` + * on the first call. + * @return The next non-empty string that does not + * contain a byte from `delimiters`. The + * returned string will be as long as possible. + * `NULL` is returned the search as reached + * the end of the string, and there therefore + * are no more tokens. + */ +wchar_t* wcstok(wchar_t* restrict, const wchar_t* restrict, wchar_t** restrict) + __GCC_ONLY(__attribute__((warn_unused_result, nonnull(2, 3)))); + +#if defined(_SLIBC_SOURCE) && !defined(__PORTABLE) +/** + * Tokenise a string. + * + * This is a slibc extension. + * + * @param string Pointer to the string to tokenise on the first call, + * will be updated to keep track of the state. + * All characters found in `delimiters` will + * be overriden with NUL characters. + * @param delimiters Delimiting characters. + * @return The next, possibly empty, string that does + * not contain a byte from `delimiters`. The + * returned string will be as long as possible. + * `NULL` is returned the search as reached + * the end of the string, and there therefore + * are no more tokens. + */ +wchar_t* wcssep(wchar_t** restrict, const wchar_t* restrict) + __GCC_ONLY(__attribute__((warn_unused_result, nonnull))); +#endif + + #endif #endif -- cgit v1.2.3-70-g09d2