strcasecmp.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
- /*
- * Copyright (c) 1987, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
- #include "db_config.h"
- #ifndef lint
- static const char revid[] = "$Id: strcasecmp.c,v 1.7 2001/11/15 17:51:38 bostic Exp $";
- #endif /* not lint */
- #ifndef NO_SYSTEM_INCLUDES
- #include <string.h>
- #endif
- /*
- * This array is designed for mapping upper and lower case letter
- * together for a case independent comparison. The mappings are
- * based upon ascii character sequences.
- */
- static const unsigned char charmap[] = {
- ' 00', ' 01', ' 02', ' 03', ' 04', ' 05', ' 06', ' 07',
- ' 10', ' 11', ' 12', ' 13', ' 14', ' 15', ' 16', ' 17',
- ' 20', ' 21', ' 22', ' 23', ' 24', ' 25', ' 26', ' 27',
- ' 30', ' 31', ' 32', ' 33', ' 34', ' 35', ' 36', ' 37',
- ' 40', ' 41', ' 42', ' 43', ' 44', ' 45', ' 46', ' 47',
- ' 50', ' 51', ' 52', ' 53', ' 54', ' 55', ' 56', ' 57',
- ' 60', ' 61', ' 62', ' 63', ' 64', ' 65', ' 66', ' 67',
- ' 70', ' 71', ' 72', ' 73', ' 74', ' 75', ' 76', ' 77',
- '100', '141', '142', '143', '144', '145', '146', '147',
- '150', '151', '152', '153', '154', '155', '156', '157',
- '160', '161', '162', '163', '164', '165', '166', '167',
- '170', '171', '172', '133', '134', '135', '136', '137',
- '140', '141', '142', '143', '144', '145', '146', '147',
- '150', '151', '152', '153', '154', '155', '156', '157',
- '160', '161', '162', '163', '164', '165', '166', '167',
- '170', '171', '172', '173', '174', '175', '176', '177',
- '200', '201', '202', '203', '204', '205', '206', '207',
- '210', '211', '212', '213', '214', '215', '216', '217',
- '220', '221', '222', '223', '224', '225', '226', '227',
- '230', '231', '232', '233', '234', '235', '236', '237',
- '240', '241', '242', '243', '244', '245', '246', '247',
- '250', '251', '252', '253', '254', '255', '256', '257',
- '260', '261', '262', '263', '264', '265', '266', '267',
- '270', '271', '272', '273', '274', '275', '276', '277',
- '300', '301', '302', '303', '304', '305', '306', '307',
- '310', '311', '312', '313', '314', '315', '316', '317',
- '320', '321', '322', '323', '324', '325', '326', '327',
- '330', '331', '332', '333', '334', '335', '336', '337',
- '340', '341', '342', '343', '344', '345', '346', '347',
- '350', '351', '352', '353', '354', '355', '356', '357',
- '360', '361', '362', '363', '364', '365', '366', '367',
- '370', '371', '372', '373', '374', '375', '376', '377'
- };
- /*
- * strcasecmp --
- * Do strcmp(3) in a case-insensitive manner.
- *
- * PUBLIC: #ifndef HAVE_STRCASECMP
- * PUBLIC: int strcasecmp __P((const char *, const char *));
- * PUBLIC: #endif
- */
- int
- strcasecmp(s1, s2)
- const char *s1, *s2;
- {
- register const unsigned char *cm = charmap,
- *us1 = (const unsigned char *)s1,
- *us2 = (const unsigned char *)s2;
- while (cm[*us1] == cm[*us2++])
- if (*us1++ == ' ')
- return (0);
- return (cm[*us1] - cm[*--us2]);
- }
- /*
- * strncasecmp --
- * Do strncmp(3) in a case-insensitive manner.
- *
- * PUBLIC: #ifndef HAVE_STRCASECMP
- * PUBLIC: int strncasecmp __P((const char *, const char *, size_t));
- * PUBLIC: #endif
- */
- int
- strncasecmp(s1, s2, n)
- const char *s1, *s2;
- register size_t n;
- {
- if (n != 0) {
- register const unsigned char *cm = charmap,
- *us1 = (const unsigned char *)s1,
- *us2 = (const unsigned char *)s2;
- do {
- if (cm[*us1] != cm[*us2++])
- return (cm[*us1] - cm[*--us2]);
- if (*us1++ == ' ')
- break;
- } while (--n != 0);
- }
- return (0);
- }