OLD | NEW |
1 #include <string.h> | 1 #include <string.h> |
2 | 2 |
3 #define BITOP(a,b,op) \ | 3 #define BITOP(a, b, op) \ |
4 ((a)[(size_t)(b)/(8*sizeof *(a))] op (size_t)1<<((size_t)(b)%(8*sizeof *(a)))) | 4 ((a)[(size_t)(b) / (8 * sizeof *(a))] op(size_t) 1 \ |
| 5 << ((size_t)(b) % (8 * sizeof *(a)))) |
5 | 6 |
6 char *__strchrnul(const char *, int); | 7 char* __strchrnul(const char*, int); |
7 | 8 |
8 size_t strcspn(const char *s, const char *c) | 9 size_t strcspn(const char* s, const char* c) { |
9 { | 10 const char* a = s; |
10 » const char *a = s; | 11 size_t byteset[32 / sizeof(size_t)]; |
11 » size_t byteset[32/sizeof(size_t)]; | |
12 | 12 |
13 » if (!c[0] || !c[1]) return __strchrnul(s, *c)-a; | 13 if (!c[0] || !c[1]) |
| 14 return __strchrnul(s, *c) - a; |
14 | 15 |
15 » memset(byteset, 0, sizeof byteset); | 16 memset(byteset, 0, sizeof byteset); |
16 » for (; *c && BITOP(byteset, *(unsigned char *)c, |=); c++); | 17 for (; *c && BITOP(byteset, *(unsigned char*)c, |=); c++) |
17 » for (; *s && !BITOP(byteset, *(unsigned char *)s, &); s++); | 18 ; |
18 » return s-a; | 19 for (; *s && !BITOP(byteset, *(unsigned char*)s, &); s++) |
| 20 ; |
| 21 return s - a; |
19 } | 22 } |
OLD | NEW |