aboutsummaryrefslogtreecommitdiff
path: root/pk/strlen.c
diff options
context:
space:
mode:
Diffstat (limited to 'pk/strlen.c')
-rw-r--r--pk/strlen.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/pk/strlen.c b/pk/strlen.c
index f600d47..12b3836 100644
--- a/pk/strlen.c
+++ b/pk/strlen.c
@@ -1,13 +1,18 @@
#include <string.h>
-#include <stdlib.h>
+#include <limits.h>
+
+#if ULONG_MAX != 18446744073709551615UL && ULONG_MAX != 4294967295UL
+# error need sizeof(long) == 4 or sizeof(long) == 8
+#endif
// from http://www-graphics.stanford.edu/~seander/bithacks.html
static inline long hasZeroByte(long l)
{
- if(sizeof(long) == 4)
- return (l - 0x01010101UL) & ~l & 0x80808080UL;
- else if(sizeof(long) == 8)
- return (l - 0x0101010101010101UL) & ~l & 0x8080808080808080UL;
+#if ULONG_MAX == 4294967295UL
+ return (l - 0x01010101UL) & ~l & 0x80808080UL;
+#else
+ return (l - 0x0101010101010101UL) & ~l & 0x8080808080808080UL;
+#endif
}
size_t strlen(const char* s)