memmem
finds the start of the first
occurrence of the substring needle
of length needlelen in the memory
area haystack of length
haystacklen.
memmem
returns a pointer to the beginning
of the substring, or NULL if the substring
is not found.
memmem
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 is returned (instead of haystack). And glibc 2.0 makes it worse, returning a pointer to the last byte of haystack. This is fixed in glibc 2.1.