2 ** Copyright 2001, Travis Geiselbrecht. All rights reserved.
3 ** Distributed under the terms of the NewOS License.
7 #include <SupportDefs.h>
10 /* From Bit twiddling hacks:
11 http://graphics.stanford.edu/~seander/bithacks.html */
12 #define LACKS_ZERO_BYTE(value) \
13 (((value - 0x01010101) & ~value & 0x80808080) == 0)
17 strlen(const char* string
)
21 /* Align access for four byte reads */
22 for (; (((addr_t
)string
+ length
) & 3) != 0; length
++) {
23 if (string
[length
] == '\0')
27 /* Check four bytes for zero char */
28 uint32
* valuePointer
= (uint32
*)(string
+ length
);
29 for (; LACKS_ZERO_BYTE(*valuePointer
); valuePointer
++)
32 /* Find the exact length */
33 for (length
= ((char*)valuePointer
) - string
; string
[length
] != '\0';