|
@@ -59,22 +59,19 @@ char *strchrnul (const char *s, int c_in)
|
|
|
|
|
|
The 1-bits make sure that carries propagate to the next 0-bit.
|
|
|
The 0-bits provide holes for carries to fall into. */
|
|
|
- switch (sizeof (longword))
|
|
|
- {
|
|
|
- case 4: magic_bits = 0x7efefeffL; break;
|
|
|
- case 8: magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL; break;
|
|
|
- default:
|
|
|
- abort ();
|
|
|
- }
|
|
|
|
|
|
-
|
|
|
+#if __WORDSIZE == 32
|
|
|
+ magic_bits = 0x7efefeffL;
|
|
|
charmask = c | (c << 8);
|
|
|
charmask |= charmask << 16;
|
|
|
- if (sizeof (longword) > 4)
|
|
|
-
|
|
|
- charmask |= (charmask << 16) << 16;
|
|
|
- if (sizeof (longword) > 8)
|
|
|
- abort ();
|
|
|
+#elif __WORDSIZE == 64
|
|
|
+ magic_bits = ((0x7efefefeL << 16) << 16) | 0xfefefeffL;
|
|
|
+ charmask = c | (c << 8);
|
|
|
+ charmask |= charmask << 16;
|
|
|
+ charmask |= (charmask << 16) << 16;
|
|
|
+#else
|
|
|
+ #error unexpected integer size strchr()
|
|
|
+#endif
|
|
|
|
|
|
|
|
|
we will test a longword at a time. The tricky part is testing
|