Annotation of mandoc/compat_strcasestr.c, Revision 1.3
1.1 schwarze 1: #include "config.h"
2:
1.3 ! schwarze 3: #if HAVE_STRCASESTR
1.1 schwarze 4:
5: int dummy;
6:
7: #else
8:
9: /* ($)NetBSD: strcasestr.c,v 1.2 2005/02/09 21:35:47 kleink Exp $ */
10:
11: /*-
12: * Copyright (c) 1990, 1993
13: * The Regents of the University of California. All rights reserved.
14: *
15: * This code is derived from software contributed to Berkeley by
16: * Chris Torek.
17: *
18: * Redistribution and use in source and binary forms, with or without
19: * modification, are permitted provided that the following conditions
20: * are met:
21: * 1. Redistributions of source code must retain the above copyright
22: * notice, this list of conditions and the following disclaimer.
23: * 2. Redistributions in binary form must reproduce the above copyright
24: * notice, this list of conditions and the following disclaimer in the
25: * documentation and/or other materials provided with the distribution.
26: * 3. Neither the name of the University nor the names of its contributors
27: * may be used to endorse or promote products derived from this software
28: * without specific prior written permission.
29: *
30: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
31: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
32: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
33: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
34: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
35: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
36: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
37: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
38: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
39: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
40: * SUCH DAMAGE.
41: */
42:
43: #include <sys/types.h>
44: #include <ctype.h>
45: #include <string.h>
46:
47: #define __UNCONST(a) ((void *)(unsigned long)(const void *)(a))
48:
49: /*
50: * Find the first occurrence of find in s, ignore case.
51: */
52: char *
53: strcasestr(const char *s, const char *find)
54: {
55: char c, sc;
56: size_t len;
57:
58: if ((c = *find++) != 0) {
59: c = tolower((unsigned char)c);
60: len = strlen(find);
61: do {
62: do {
63: if ((sc = *s++) == 0)
64: return (NULL);
65: } while ((char)tolower((unsigned char)sc) != c);
66: } while (strncasecmp(s, find, len) != 0);
67: s--;
68: }
69: return __UNCONST(s);
70: }
71:
72: #endif
CVSweb