123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #include <string.h>
- #include <stddef.h>
- #ifdef __USE_GNU
- void *memmem (const void *haystack, size_t haystack_len,
- const void *needle, size_t needle_len)
- {
- const char *begin;
- const char *const last_possible
- = (const char *) haystack + haystack_len - needle_len;
- if (needle_len == 0)
-
- return (void *) haystack;
-
- if (__builtin_expect (haystack_len < needle_len, 0))
- return NULL;
- for (begin = (const char *) haystack; begin <= last_possible; ++begin)
- if (begin[0] == ((const char *) needle)[0] &&
- !memcmp ((const void *) &begin[1],
- (const void *) ((const char *) needle + 1),
- needle_len - 1))
- return (void *) begin;
- return NULL;
- }
- #endif
|