| char *__strchrnul(const char *s, int c) | |
| { | |
| c = (unsigned char)c; | |
| if (!c) return (char *)s + strlen(s); | |
| /* XXX EMSCRIPTEN: add __has_feature check */ | |
| typedef size_t __attribute__((__may_alias__)) word; | |
| const word *w; | |
| for (; (uintptr_t)s % ALIGN; s++) | |
| if (!*s || *(unsigned char *)s == c) return (char *)s; | |
| size_t k = ONES * c; | |
| for (w = (void *)s; !HASZERO(*w) && !HASZERO(*w^k); w++); | |
| s = (void *)w; | |
| for (; *s && *(unsigned char *)s != c; s++); | |
| return (char *)s; | |
| } | |
| weak_alias(__strchrnul, strchrnul); | |