Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F24326346
strcasestr.c
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Referenced Files
None
Subscribers
None
strcasestr.c
View Options
/* strcasestr.c -- case insensitive substring search in C locale
Copyright (C) 2005 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2005.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
#include
"defines.h"
/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
comparison.
Note: This function may, in multibyte locales, return success even if
strlen (haystack) < strlen (needle) ! */
char
*
rpl_strcasestr
(
const
char
*
haystack
,
const
char
*
needle
)
{
/* Be careful not to look at the entire extent of haystack or needle
until needed. This is useful because of these two cases:
- haystack may be very long, and a match of needle found early,
- needle may be very long, and not even a short initial segment of
needle may be found in haystack. */
if
(
*
needle
!=
'\0'
)
{
/* Speed up the following searches of needle by caching its first
character. */
unsigned
char
b
=
tolower
((
unsigned
char
)
*
needle
);
needle
++
;
for
(;;
haystack
++
)
{
if
(
*
haystack
==
'\0'
)
/* No match. */
return
NULL
;
if
(
tolower
((
unsigned
char
)
*
haystack
)
==
b
)
/* The first character matches. */
{
const
char
*
rhaystack
=
haystack
+
1
;
const
char
*
rneedle
=
needle
;
for
(;;
rhaystack
++
,
rneedle
++
)
{
if
(
*
rneedle
==
'\0'
)
/* Found a match. */
return
(
char
*
)
haystack
;
if
(
*
rhaystack
==
'\0'
)
/* No match. */
return
NULL
;
if
(
tolower
((
unsigned
char
)
*
rhaystack
)
!=
tolower
((
unsigned
char
)
*
rneedle
))
/* Nothing in this round. */
break
;
}
}
}
}
else
return
(
char
*
)
haystack
;
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Mon, Feb 16, 08:40 (1 d, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3344361
Default Alt Text
strcasestr.c (2 KB)
Attached To
Mode
rDARKBOT Darkbot
Attached
Detach File
Event Timeline
Log In to Comment