strcasecmp.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 1987, 1993
  3.  * The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  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.
  20.  *
  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
  31.  * SUCH DAMAGE.
  32.  */
  33. #include "db_config.h"
  34. #ifndef lint
  35. static const char revid[] = "$Id: strcasecmp.c,v 1.7 2001/11/15 17:51:38 bostic Exp $";
  36. #endif /* not lint */
  37. #ifndef NO_SYSTEM_INCLUDES
  38. #include <string.h>
  39. #endif
  40. /*
  41.  * This array is designed for mapping upper and lower case letter
  42.  * together for a case independent comparison.  The mappings are
  43.  * based upon ascii character sequences.
  44.  */
  45. static const unsigned char charmap[] = {
  46. '00', '01', '02', '03', '04', '05', '06', '07',
  47. '10', '11', '12', '13', '14', '15', '16', '17',
  48. '20', '21', '22', '23', '24', '25', '26', '27',
  49. '30', '31', '32', '33', '34', '35', '36', '37',
  50. '40', '41', '42', '43', '44', '45', '46', '47',
  51. '50', '51', '52', '53', '54', '55', '56', '57',
  52. '60', '61', '62', '63', '64', '65', '66', '67',
  53. '70', '71', '72', '73', '74', '75', '76', '77',
  54. '100', '141', '142', '143', '144', '145', '146', '147',
  55. '150', '151', '152', '153', '154', '155', '156', '157',
  56. '160', '161', '162', '163', '164', '165', '166', '167',
  57. '170', '171', '172', '133', '134', '135', '136', '137',
  58. '140', '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', '173', '174', '175', '176', '177',
  62. '200', '201', '202', '203', '204', '205', '206', '207',
  63. '210', '211', '212', '213', '214', '215', '216', '217',
  64. '220', '221', '222', '223', '224', '225', '226', '227',
  65. '230', '231', '232', '233', '234', '235', '236', '237',
  66. '240', '241', '242', '243', '244', '245', '246', '247',
  67. '250', '251', '252', '253', '254', '255', '256', '257',
  68. '260', '261', '262', '263', '264', '265', '266', '267',
  69. '270', '271', '272', '273', '274', '275', '276', '277',
  70. '300', '301', '302', '303', '304', '305', '306', '307',
  71. '310', '311', '312', '313', '314', '315', '316', '317',
  72. '320', '321', '322', '323', '324', '325', '326', '327',
  73. '330', '331', '332', '333', '334', '335', '336', '337',
  74. '340', '341', '342', '343', '344', '345', '346', '347',
  75. '350', '351', '352', '353', '354', '355', '356', '357',
  76. '360', '361', '362', '363', '364', '365', '366', '367',
  77. '370', '371', '372', '373', '374', '375', '376', '377'
  78. };
  79. /*
  80.  * strcasecmp --
  81.  * Do strcmp(3) in a case-insensitive manner.
  82.  *
  83.  * PUBLIC: #ifndef HAVE_STRCASECMP
  84.  * PUBLIC: int strcasecmp __P((const char *, const char *));
  85.  * PUBLIC: #endif
  86.  */
  87. int
  88. strcasecmp(s1, s2)
  89. const char *s1, *s2;
  90. {
  91. register const unsigned char *cm = charmap,
  92. *us1 = (const unsigned char *)s1,
  93. *us2 = (const unsigned char *)s2;
  94. while (cm[*us1] == cm[*us2++])
  95. if (*us1++ == '')
  96. return (0);
  97. return (cm[*us1] - cm[*--us2]);
  98. }
  99. /*
  100.  * strncasecmp --
  101.  * Do strncmp(3) in a case-insensitive manner.
  102.  *
  103.  * PUBLIC: #ifndef HAVE_STRCASECMP
  104.  * PUBLIC: int strncasecmp __P((const char *, const char *, size_t));
  105.  * PUBLIC: #endif
  106.  */
  107. int
  108. strncasecmp(s1, s2, n)
  109. const char *s1, *s2;
  110. register size_t n;
  111. {
  112. if (n != 0) {
  113. register const unsigned char *cm = charmap,
  114. *us1 = (const unsigned char *)s1,
  115. *us2 = (const unsigned char *)s2;
  116. do {
  117. if (cm[*us1] != cm[*us2++])
  118. return (cm[*us1] - cm[*--us2]);
  119. if (*us1++ == '')
  120. break;
  121. } while (--n != 0);
  122. }
  123. return (0);
  124. }