| 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 |