2
* Copyright (c) 1987, 1993
3
* The Regents of the University of California. All rights reserved.
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. All advertising materials mentioning features or use of this software
14
* must display the following acknowledgement:
15
* This product includes software developed by the University of
16
* California, Berkeley and its contributors.
17
* 4. Neither the name of the University nor the names of its contributors
18
* may be used to endorse or promote products derived from this software
19
* without specific prior written permission.
21
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34
#include "db_config.h"
37
static const char revid[] = "$Id$";
40
#ifndef NO_SYSTEM_INCLUDES
45
* This array is designed for mapping upper and lower case letter
46
* together for a case independent comparison. The mappings are
47
* based upon ascii character sequences.
49
static const unsigned char charmap[] = {
50
'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
51
'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
52
'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
53
'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
54
'\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
55
'\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
56
'\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
57
'\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
58
'\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
59
'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
60
'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
61
'\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
62
'\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
63
'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
64
'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
65
'\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
66
'\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
67
'\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
68
'\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
69
'\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
70
'\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
71
'\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
72
'\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
73
'\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
74
'\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
75
'\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
76
'\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
77
'\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
78
'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
79
'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
80
'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
81
'\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
86
* Do strcmp(3) in a case-insensitive manner.
88
* PUBLIC: #ifndef HAVE_STRCASECMP
89
* PUBLIC: int strcasecmp __P((const char *, const char *));
96
register const unsigned char *cm = charmap,
97
*us1 = (const unsigned char *)s1,
98
*us2 = (const unsigned char *)s2;
100
while (cm[*us1] == cm[*us2++])
103
return (cm[*us1] - cm[*--us2]);
108
* Do strncmp(3) in a case-insensitive manner.
110
* PUBLIC: #ifndef HAVE_STRCASECMP
111
* PUBLIC: int strncasecmp __P((const char *, const char *, size_t));
115
strncasecmp(s1, s2, n)
120
register const unsigned char *cm = charmap,
121
*us1 = (const unsigned char *)s1,
122
*us2 = (const unsigned char *)s2;
125
if (cm[*us1] != cm[*us2++])
126
return (cm[*us1] - cm[*--us2]);