From 1e7e2c656bce712048f9514c253680d8cd10d11f Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Mon, 24 May 2021 10:25:32 +0200 Subject: [PATCH] string: add and test strtok (DONE) --- CMakeLists.txt | 1 + STATUS | 2 +- src/libc/string/strtok.c | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/libc/string/strtok.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a63ea9..6a8f193 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -158,6 +158,7 @@ set(SOURCES src/libc/string/strspn.c src/libc/string/strstr.c src/libc/string/strstr_base.c + src/libc/string/strtok.c src/libc/string/strxfrm.c) if(vhex-generic IN_LIST TARGET_FOLDERS) diff --git a/STATUS b/STATUS index 3f427b4..9cb6e0e 100644 --- a/STATUS +++ b/STATUS @@ -127,7 +127,7 @@ DONE: Function/symbol/macro is defined, builds, links, and is tested 7.21.5.5 strrchr: DONE 7.21.5.6 strspn: DONE 7.21.5.7 strstr: DONE -! 7.21.5.8 strtok: TODO + 7.21.5.8 strtok: DONE 7.21.6.1 memset: DONE 7.21.6.2 strerror: DONE 7.21.6.3 strlen: DONE diff --git a/src/libc/string/strtok.c b/src/libc/string/strtok.c new file mode 100644 index 0000000..11d81d3 --- /dev/null +++ b/src/libc/string/strtok.c @@ -0,0 +1,18 @@ +#include + +char *strtok(char * restrict new_s, char const * restrict separators) +{ + static char *s = NULL; + if(new_s) s = new_s; + + /* Skip leading delimiters */ + s += strspn(s, separators); + if(!*s) return NULL; + + /* Skip non-delimiters */ + char *token = s; + s += strcspn(s, separators); + *s++ = 0; + + return token; +}