Index: fusl/src/string/strspn.c |
diff --git a/fusl/src/string/strspn.c b/fusl/src/string/strspn.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9543dad09a3aba8bf2c616fb00d492f0e9fb94cd |
--- /dev/null |
+++ b/fusl/src/string/strspn.c |
@@ -0,0 +1,20 @@ |
+#include <string.h> |
+ |
+#define BITOP(a,b,op) \ |
+ ((a)[(size_t)(b)/(8*sizeof *(a))] op (size_t)1<<((size_t)(b)%(8*sizeof *(a)))) |
+ |
+size_t strspn(const char *s, const char *c) |
+{ |
+ const char *a = s; |
+ size_t byteset[32/sizeof(size_t)] = { 0 }; |
+ |
+ if (!c[0]) return 0; |
+ if (!c[1]) { |
+ for (; *s == *c; s++); |
+ return s-a; |
+ } |
+ |
+ for (; *c && BITOP(byteset, *(unsigned char *)c, |=); c++); |
+ for (; *s && BITOP(byteset, *(unsigned char *)s, &); s++); |
+ return s-a; |
+} |