Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/lib/libc/string/strcasestr.c
39476 views
1
/*-
2
* SPDX-License-Identifier: BSD-3-Clause
3
*
4
* Copyright (c) 1990, 1993
5
* The Regents of the University of California. All rights reserved.
6
*
7
* This code is derived from software contributed to Berkeley by
8
* Chris Torek.
9
*
10
* Copyright (c) 2011 The FreeBSD Foundation
11
*
12
* Portions of this software were developed by David Chisnall
13
* under sponsorship from the FreeBSD Foundation.
14
*
15
* Redistribution and use in source and binary forms, with or without
16
* modification, are permitted provided that the following conditions
17
* are met:
18
* 1. Redistributions of source code must retain the above copyright
19
* notice, this list of conditions and the following disclaimer.
20
* 2. Redistributions in binary form must reproduce the above copyright
21
* notice, this list of conditions and the following disclaimer in the
22
* documentation and/or other materials provided with the distribution.
23
* 3. Neither the name of the University nor the names of its contributors
24
* may be used to endorse or promote products derived from this software
25
* without specific prior written permission.
26
*
27
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
28
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
31
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37
* SUCH DAMAGE.
38
*/
39
40
#include <ctype.h>
41
#include <string.h>
42
#include "xlocale_private.h"
43
44
/*
45
* Find the first occurrence of find in s, ignore case.
46
*/
47
char *
48
strcasestr_l(const char *s, const char *find, locale_t locale)
49
{
50
char c, sc;
51
size_t len;
52
FIX_LOCALE(locale);
53
54
if ((c = *find++) != 0) {
55
c = tolower_l((unsigned char)c, locale);
56
len = strlen(find);
57
do {
58
do {
59
if ((sc = *s++) == 0)
60
return (NULL);
61
} while ((char)tolower_l((unsigned char)sc, locale) != c);
62
} while (strncasecmp_l(s, find, len, locale) != 0);
63
s--;
64
}
65
return ((char *)s);
66
}
67
char *
68
strcasestr(const char *s, const char *find)
69
{
70
return strcasestr_l(s, find, __get_locale());
71
}
72
73