projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix broken thread list unlocking after fork
[musl]
/
src
/
string
/
strchrnul.c
diff --git
a/src/string/strchrnul.c
b/src/string/strchrnul.c
index
f2b9ae1
..
39e2635
100644
(file)
--- a/
src/string/strchrnul.c
+++ b/
src/string/strchrnul.c
@@
-9,16
+9,19
@@
char *__strchrnul(const char *s, int c)
{
char *__strchrnul(const char *s, int c)
{
- size_t *w, k;
-
c = (unsigned char)c;
if (!c) return (char *)s + strlen(s);
c = (unsigned char)c;
if (!c) return (char *)s + strlen(s);
+#ifdef __GNUC__
+ 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;
for (; (uintptr_t)s % ALIGN; s++)
if (!*s || *(unsigned char *)s == c) return (char *)s;
- k = ONES * c;
+
size_t
k = ONES * c;
for (w = (void *)s; !HASZERO(*w) && !HASZERO(*w^k); w++);
for (w = (void *)s; !HASZERO(*w) && !HASZERO(*w^k); w++);
- for (s = (void *)w; *s && *(unsigned char *)s != c; s++);
+ s = (void *)w;
+#endif
+ for (; *s && *(unsigned char *)s != c; s++);
return (char *)s;
}
return (char *)s;
}