@c Documentation of gnulib module 'c-strcasestr'.

@c Copyright (C) 2008--2020 Free Software Foundation, Inc.

@c Permission is granted to copy, distribute and/or modify this document
@c under the terms of the GNU Free Documentation License, Version 1.3 or
@c any later version published by the Free Software Foundation; with no
@c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
@c copy of the license is at <https://www.gnu.org/licenses/fdl-1.3.en.html>.

The @code{c-strcasestr} module contains a case-insensitive string search
function operating on single-byte character strings, that operate as if the
locale encoding was ASCII.
(The "C" locale on many systems has the locale encoding "ASCII".)

The function is:
@smallexample
extern char *c_strcasestr (const char *haystack, const char *needle);
@end smallexample

For case conversion here, only ASCII characters are considered to be
upper case or lower case.

Note: The function @code{strcasestr} from @code{<string.h>} supports only
unibyte locales; for multibyte locales, you need the function
@code{mbscasestr}.
