.\" 386BSD man pages
.\" Modified Sat Jul 24 18:50:48 1993 by Rik Faith (faith@cs.unc.edu)
.\" Interchanged 'needle' and 'haystack'; added history, aeb, 980113.
-.TH MEMMEM 3 2014-03-17 "GNU" "Linux Programmer's Manual"
+.TH MEMMEM 3 2017-03-13 "GNU" "Linux Programmer's Manual"
.SH NAME
memmem \- locate a substring
.SH SYNOPSIS
.nf
.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
.B #include <string.h>
-.sp
+.PP
.BI "void *memmem(const void *" haystack ", size_t " haystacklen ,
.BI " const void *" needle ", size_t " needlelen );
.fi
function returns a pointer to the beginning of the
substring, or NULL if the substring is not found.
.SH ATTRIBUTES
-.SS Multithreading (see pthreads(7))
-The
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
.BR memmem ()
-function is thread-safe.
+T} Thread safety MT-Safe
+.TE
.SH CONFORMING TO
-This function is a GNU extension.
+This function is not specified in POSIX.1,
+but is present on a number of other systems.
.SH BUGS
.\" This function was broken in Linux libraries up to and including libc 5.0.9;
.\" there the
.\" and a pointer to the end of the first occurrence of
.\" .I needle
.\" was returned.
-.\"
+.\"
.\" Both old and new libc's have the bug that if
.\" .I needle
.\" is empty,
.\" (instead of
.\" .IR haystack )
.\" is returned.
-And glibc 2.0 makes it worse, returning a pointer to the
-last byte of
+In glibc 2.0, if
+.I needle
+is empty,
+.BR memmem ()
+returns a pointer to the last byte of
.IR haystack .
This is fixed in glibc 2.1.
.SH SEE ALSO
+.BR bstring (3),
.BR strstr (3)