diff --git a/CMakeLists.txt b/CMakeLists.txt index 4be5096..945fae2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -140,6 +140,7 @@ set(SOURCES src/libc/string/strchrnul.c src/libc/string/strcmp.c src/libc/string/strcpy.c + src/libc/string/strcspn.c src/libc/string/strdup.c src/libc/string/strerror.c src/libc/string/strlen.c @@ -148,7 +149,8 @@ set(SOURCES src/libc/string/strncpy.c src/libc/string/strndup.c src/libc/string/strnlen.c - src/libc/string/strrchr.c) + src/libc/string/strrchr.c + src/libc/string/strspn.c) if(vhex-generic IN_LIST TARGET_FOLDERS) # TODO diff --git a/STATUS b/STATUS index ee805ca..dbbc4bd 100644 --- a/STATUS +++ b/STATUS @@ -122,10 +122,10 @@ DONE: Function/symbol/macro is defined, builds, links, and is tested ! 7.21.4.5 strxfrm: TODO 7.21.5.1 memchr: DONE 7.21.5.2 strchr: DONE -! 7.21.5.3 strcspn: TODO + 7.21.5.3 strcspn: DONE ! 7.21.5.4 strpbrk: TODO 7.21.5.5 strrchr: DONE -! 7.21.5.6 strspn: TODO + 7.21.5.6 strspn: DONE ! 7.21.5.7 strstr: TODO ! 7.21.5.8 strtok: TODO 7.21.6.1 memset: DONE diff --git a/include/string.h b/include/string.h index 1cd8f35..3b3eab0 100644 --- a/include/string.h +++ b/include/string.h @@ -54,7 +54,7 @@ extern void *memchr(void const *__s, int __c, size_t __n); extern char *strchr(char const *__s, int __c); /* Count initial characters of __s that are not in __exclude. */ -extern char *strcspn(char const *__s, char const *__exclude); +extern size_t strcspn(char const *__s, char const *__exclude); /* Find the first character of __s that is also in __include. */ extern char *strpbrk(char const *__s, char const *__include); @@ -63,7 +63,7 @@ extern char *strpbrk(char const *__s, char const *__include); extern char *strrchr(char const *__s, int __c); /* Count initial characters of __s that are in __include. */ -extern char *strspn(char const *__s, char const *__include); +extern size_t strspn(char const *__s, char const *__include); /* Find the first occurrence of __s2 as a substring of __s1. */ extern char *strstr(char const *__s1, char const *__s2); diff --git a/src/libc/string/strcspn.c b/src/libc/string/strcspn.c new file mode 100644 index 0000000..2a43612 --- /dev/null +++ b/src/libc/string/strcspn.c @@ -0,0 +1,8 @@ +#include + +size_t strcspn(char const *s, char const *reject) +{ + size_t i = 0; + while(s[i] && !strchr(reject, s[i])) i++; + return i; +} diff --git a/src/libc/string/strspn.c b/src/libc/string/strspn.c new file mode 100644 index 0000000..67fb58f --- /dev/null +++ b/src/libc/string/strspn.c @@ -0,0 +1,8 @@ +#include + +size_t strspn(char const *s, char const *accept) +{ + size_t i = 0; + while(s[i] && strchr(accept, s[i])) i++; + return i; +}