diff options
author | Guillaume Cottenceau <gc@mandriva.com> | 2001-01-04 20:04:45 +0000 |
---|---|---|
committer | Guillaume Cottenceau <gc@mandriva.com> | 2001-01-04 20:04:45 +0000 |
commit | 02fec4701cee79f875c1d02b8b4aee09380dbcb8 (patch) | |
tree | f4f291aedbb2e60ee58351481858a8cd3ec80b6b /mdk-stage1/dietlibc/lib/strlen.c | |
parent | 9887fe04751edf39e8389f2c3ec3f020b5e1c17d (diff) | |
download | drakx-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar drakx-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.gz drakx-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.bz2 drakx-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.xz drakx-02fec4701cee79f875c1d02b8b4aee09380dbcb8.zip |
integrate dietlibc/stdio per default for cdrom and disk only installs
Diffstat (limited to 'mdk-stage1/dietlibc/lib/strlen.c')
-rw-r--r-- | mdk-stage1/dietlibc/lib/strlen.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/lib/strlen.c b/mdk-stage1/dietlibc/lib/strlen.c new file mode 100644 index 000000000..56c085dac --- /dev/null +++ b/mdk-stage1/dietlibc/lib/strlen.c @@ -0,0 +1,47 @@ +#include <endian.h> +#include "dietfeatures.h" +#include <string.h> + +#ifdef WANT_SMALL_STRING_ROUTINES +size_t strlen(const char *s) { + register int i; + if (!s) return 0; + for (i=0; *s; ++s) ++i; + return i; +} +#else +static const unsigned long magic = 0x01010101; + +size_t strlen(const char *s) +{ + const char *t = s; + unsigned long word; + + if (!s) return 0; + + /* Byte compare up until word boundary */ + for (; ((unsigned long) t & 3); t++) + if (!*t) return t - s; + + /* Word compare */ + do { + word = *((unsigned long *) t); t += 4; + word = (word - magic) &~ word; + word &= (magic << 7); + } while (word == 0); + +#if BYTE_ORDER == LITTLE_ENDIAN + /* word & 0x80808080 == word */ + word = (word - 1) & (magic << 10); + word += (word << 8) + (word << 16); + t += word >> 26; +#else + if ((word & 0x80800000) == 0) { + word <<= 16; + t += 2; + } + if ((word & 0x80000000) == 0) t += 1; +#endif + return ((const char *) t) - 4 - s; +} +#endif |