memmem - locate a substring
void *memmem(const void *haystack, size_t haystacklen,
const void *needle, size_t needlelen));
The memmem() function finds the start of the first
occurrence of the substring needle of length needlelen in
the memory area haystack of length haystacklen.
The memmem() function returns a pointer to the beginning of
the substring, or NULL if the substring is not found.
This function is a GNU extension.
This function was broken in Linux libraries up to and
including libc 5.0.9; there the `needle' and `haystack'
arguments were interchanged, and a pointer to the end of the
first occurrence of needle was returned. Since libc 5.0.9
is still widely used, this is a dangerous function to use.
Both old and new libc's have the bug that if needle is empty
haystack-1 (instead of haystack) is returned. And glibc
(2.0.5) makes it worse, and returns a pointer to the last
byte of `haystack'. Hopefully this will be fixed. For the
time being, memmem() should not be used with an empty `nee-