scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit 0cc26f9abb8c7f8a5ad30563d63bda35a5345322
parent 281fd80448d875367f4be096a00ebbc847a06c1b
Author: Roberto E. Vargas Caballero <k0ga@shike2.net>
Date:   Wed, 26 Mar 2025 14:46:30 +0100

libc/wchar: Add wcspbrk()

Diffstat:
Msrc/libc/objs/common-objs.mk | 1+
Asrc/libc/wchar/wcspbrk.c | 10++++++++++
Mtests/libc/execute/.gitignore | 1+
Atests/libc/execute/0063-wcspbrk.c | 28++++++++++++++++++++++++++++
Mtests/libc/execute/libc-tests.lst | 1+
5 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/src/libc/objs/common-objs.mk b/src/libc/objs/common-objs.mk @@ -139,6 +139,7 @@ COMMON_OBJS =\ wchar/wcsxfrm.$O\ wchar/wcsspn.$O\ wchar/wcscspn.$O\ + wchar/wcspbrk.$O\ wchar/wcsrtombs.$O\ wchar/wcwidth.$O\ wchar/wmemchr.$O\ diff --git a/src/libc/wchar/wcspbrk.c b/src/libc/wchar/wcspbrk.c @@ -0,0 +1,10 @@ +#include <wchar.h> + +#undef wcspbrk + +wchar_t * +wcspbrk(const wchar_t *s1, const wchar_t *s2) +{ + s1 += wcscspn(s1, s2); + return (*s1 != L'\0') ? (wchar_t *) s1 : NULL; +} diff --git a/tests/libc/execute/.gitignore b/tests/libc/execute/.gitignore @@ -59,4 +59,5 @@ 0060-wcsxfrm 0061-wcsspn 0062-wcscspn +0063-wcspbrk test.log diff --git a/tests/libc/execute/0063-wcspbrk.c b/tests/libc/execute/0063-wcspbrk.c @@ -0,0 +1,28 @@ +#include <assert.h> +#include <stdio.h> +#include <wchar.h> + +/* +output: +testing +done +end: +*/ + +int +main() +{ + wchar_t buf[] = L"abcdef"; + + puts("testing"); + assert(wcspbrk(buf, L"a") == buf); + assert(wcspbrk(buf, L"") == NULL); + assert(wcspbrk(L"", L"a") == NULL); + assert(wcspbrk(L"", L"") == NULL); + assert(wcspbrk(buf, L"1234") == NULL); + assert(wcspbrk(buf, L"f") == buf + 5); + assert(wcspbrk(buf, L"12345a") == buf); + puts("done"); + + return 0; +} diff --git a/tests/libc/execute/libc-tests.lst b/tests/libc/execute/libc-tests.lst @@ -58,3 +58,4 @@ 0060-wcsxfrm 0061-wcsspn 0062-wcscspn +0063-wcspbrk