libc/wchar: Add wcsncmp() - scc - simple c99 compiler | |
git clone git://git.simple-cc.org/scc | |
Log | |
Files | |
Refs | |
Submodules | |
README | |
LICENSE | |
--- | |
commit 01921365fc084e3b592c00bdd090d0d457502904 | |
parent e5399b363bcd8af06edc6bb4ba9edb034bcbe728 | |
Author: Roberto E. Vargas Caballero <[email protected]> | |
Date: Fri, 21 Mar 2025 19:21:44 +0100 | |
libc/wchar: Add wcsncmp() | |
Diffstat: | |
M src/libc/objs/common-objs.mk | 1 + | |
A src/libc/wchar/wcsncmp.c | 18 ++++++++++++++++++ | |
M tests/libc/execute/.gitignore | 1 + | |
A tests/libc/execute/0046-wcsncmp.c | 30 ++++++++++++++++++++++++++++++ | |
M tests/libc/execute/libc-tests.lst | 1 + | |
5 files changed, 51 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/src/libc/objs/common-objs.mk b/src/libc/objs/common-objs.mk | |
@@ -128,6 +128,7 @@ COMMON_OBJS =\ | |
wchar/wcrtomb.$O\ | |
wchar/wcslen.$O\ | |
wchar/wcscmp.$O\ | |
+ wchar/wcsncmp.$O\ | |
wchar/wcsrtombs.$O\ | |
wchar/wcwidth.$O\ | |
wchar/putwc.$O\ | |
diff --git a/src/libc/wchar/wcsncmp.c b/src/libc/wchar/wcsncmp.c | |
@@ -0,0 +1,18 @@ | |
+#include <wchar.h> | |
+ | |
+#undef wcsncmp | |
+ | |
+int | |
+wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n) | |
+{ | |
+ unsigned long l1, l2; | |
+ | |
+ for ( ; n > 0 && *s1 == *s2; --n) | |
+ ++s1, ++s2; | |
+ | |
+ if (n == 0) | |
+ return 0; | |
+ l1 = *s1, l2 = *s2; | |
+ | |
+ return l1 - l2; | |
+} | |
diff --git a/tests/libc/execute/.gitignore b/tests/libc/execute/.gitignore | |
@@ -41,4 +41,5 @@ | |
0041-mbrlen | |
0044-wcslen | |
0045-wcscmp | |
+0046-wcsncmp | |
test.log | |
diff --git a/tests/libc/execute/0046-wcsncmp.c b/tests/libc/execute/0046-wcsncm… | |
@@ -0,0 +1,30 @@ | |
+#include <assert.h> | |
+#include <stdio.h> | |
+#include <wchar.h> | |
+ | |
+/* | |
+output: | |
+testing | |
+done | |
+end: | |
+*/ | |
+ | |
+int | |
+main(void) | |
+{ | |
+ wchar_t t1[] = {0}; | |
+ wchar_t t2[] = {0}; | |
+ wchar_t t3[] = {0x31, 0}; | |
+ wchar_t t4[] = {0x31, 0}; | |
+ wchar_t t5[] = {0x32, 0x33, 0}; | |
+ | |
+ puts("testing"); | |
+ assert(wcsncmp(t1, t1, 0) == 0); | |
+ assert(wcsncmp(t1, t2, 0) == 0); | |
+ assert(wcsncmp(t3, t4, 1) == 0); | |
+ assert(wcsncmp(t3, t5, 1) < 0); | |
+ assert(wcsncmp(t5, t3, 1) > 0); | |
+ puts("done"); | |
+ | |
+ return 0; | |
+} | |
diff --git a/tests/libc/execute/libc-tests.lst b/tests/libc/execute/libc-tests.… | |
@@ -40,3 +40,4 @@ | |
0041-mbrlen | |
0044-wcslen | |
0045-wcscmp | |
+0046-wcsncmp |