+*/
+
+static inline __SIZE_TYPE__ strlen(const char *str)
+{
+ const char *char_ptr;
+ const unsigned long *long_ptr;
+ unsigned long int longword, magic_bits, himagic, lomagic;
+ int abort(void);
+
+ for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof(longword)-1)) != 0; ++char_ptr) {
+ if (*char_ptr == '\0')
+ return char_ptr - str;
+ }
+
+ long_ptr = (unsigned long int*) char_ptr;
+ magic_bits = 0x7efefeffL;
+ himagic = 0x80808080L;
+ lomagic = 0x01010101L;
+ if (sizeof(longword) > 4)
+ abort();
+
+ for(;;) {
+ longword = *long_ptr++;
+ if (((longword - lomagic) & himagic) != 0) {
+ const char *cp = (const char*) (long_ptr - 1);
+ if (cp[0] == 0)
+ return cp-str;
+ if (cp[1] == 0)
+ return cp-str+1;
+ if (cp[2] == 0)
+ return cp-str+2;
+ if (cp[3] == 0)
+ return cp-str+3;
+ }
+ }
+}
+
+static inline char *strcpy(char *dest, const char *source)
+{
+ char *d = dest;
+ while ((*d++ = *source++) != '\0') {}
+ return dest;
+}