diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-01-07 02:33:00 +0000 |
---|---|---|
committer | <ralf@linux-mips.org> | 1997-01-07 02:33:00 +0000 |
commit | beb116954b9b7f3bb56412b2494b562f02b864b1 (patch) | |
tree | 120e997879884e1b9d93b265221b939d2ef1ade1 /include/asm-ppc/string.h | |
parent | 908d4681a1dc3792ecafbe64265783a86c4cccb6 (diff) |
Import of Linux/MIPS 2.1.14
Diffstat (limited to 'include/asm-ppc/string.h')
-rw-r--r-- | include/asm-ppc/string.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/include/asm-ppc/string.h b/include/asm-ppc/string.h new file mode 100644 index 000000000..7d550d1ed --- /dev/null +++ b/include/asm-ppc/string.h @@ -0,0 +1,62 @@ +#ifndef _PPC_STRING_H_ +#define _PPC_STRING_H_ + + + +/* + * keep things happy, the compile became unhappy since memset is + * in include/string.h and lib/string.c with different args + * -- Cort + */ + +#define __HAVE_ARCH_MEMSET +extern inline void * memset(void * s,int c,size_t count) +{ + char *xs = (char *) s; + + while (count--) + *xs++ = c; + + return s; +} +#define __HAVE_ARCH_STRSTR +/* Return the first occurrence of NEEDLE in HAYSTACK. */ +extern inline char * +strstr(const char *haystack, const char *needle) +{ + const char *const needle_end = strchr(needle, '\0'); + const char *const haystack_end = strchr(haystack, '\0'); + const size_t needle_len = needle_end - needle; + const size_t needle_last = needle_len - 1; + const char *begin; + + if (needle_len == 0) +#ifdef __linux__ + return (char *) haystack; +#else + return (char *) haystack_end; +#endif + if ((size_t) (haystack_end - haystack) < needle_len) + return NULL; + + for (begin = &haystack[needle_last]; begin < haystack_end; ++begin) + { + register const char *n = &needle[needle_last]; + register const char *h = begin; + + do + if (*h != *n) + goto loop; /* continue for loop */ + while (--n >= needle && --h >= haystack); + + return (char *) h; + + loop:; + } + + return NULL; +} + + + +#endif |