strcasecmp.c
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:4k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. /*
  2.  * Copyright (c) 1987 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted
  6.  * provided that: (1) source distributions retain this entire copyright
  7.  * notice and comment, and (2) distributions including binaries display
  8.  * the following acknowledgement:  ``This product includes software
  9.  * developed by the University of California, Berkeley and its contributors''
  10.  * in the documentation or other materials provided with the distribution
  11.  * and in all advertising materials mentioning features or use of this
  12.  * software. Neither the name of the University nor the names of its
  13.  * contributors may be used to endorse or promote products derived
  14.  * from this software without specific prior written permission.
  15.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  16.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  17.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  */
  19. #include <sys/types.h>
  20. #include <string.h>
  21. #if defined(LIBC_SCCS) && !defined(lint)
  22. static const char sccsid[] = "@(#)strcasecmp.c 5.9 (Berkeley) 6/1/90";
  23. #endif /* LIBC_SCCS and not lint */
  24. /*
  25.  * This array is designed for mapping upper and lower case letter
  26.  * together for a case independent comparison.  The mappings are
  27.  * based upon ascii character sequences.
  28.  */
  29. static const unsigned char charmap[] = {
  30. '00', '01', '02', '03', '04', '05', '06', '07',
  31. '10', '11', '12', '13', '14', '15', '16', '17',
  32. '20', '21', '22', '23', '24', '25', '26', '27',
  33. '30', '31', '32', '33', '34', '35', '36', '37',
  34. '40', '41', '42', '43', '44', '45', '46', '47',
  35. '50', '51', '52', '53', '54', '55', '56', '57',
  36. '60', '61', '62', '63', '64', '65', '66', '67',
  37. '70', '71', '72', '73', '74', '75', '76', '77',
  38. '100', '141', '142', '143', '144', '145', '146', '147',
  39. '150', '151', '152', '153', '154', '155', '156', '157',
  40. '160', '161', '162', '163', '164', '165', '166', '167',
  41. '170', '171', '172', '133', '134', '135', '136', '137',
  42. '140', '141', '142', '143', '144', '145', '146', '147',
  43. '150', '151', '152', '153', '154', '155', '156', '157',
  44. '160', '161', '162', '163', '164', '165', '166', '167',
  45. '170', '171', '172', '173', '174', '175', '176', '177',
  46. '200', '201', '202', '203', '204', '205', '206', '207',
  47. '210', '211', '212', '213', '214', '215', '216', '217',
  48. '220', '221', '222', '223', '224', '225', '226', '227',
  49. '230', '231', '232', '233', '234', '235', '236', '237',
  50. '240', '241', '242', '243', '244', '245', '246', '247',
  51. '250', '251', '252', '253', '254', '255', '256', '257',
  52. '260', '261', '262', '263', '264', '265', '266', '267',
  53. '270', '271', '272', '273', '274', '275', '276', '277',
  54. '300', '301', '302', '303', '304', '305', '306', '307',
  55. '310', '311', '312', '313', '314', '315', '316', '317',
  56. '320', '321', '322', '323', '324', '325', '326', '327',
  57. '330', '331', '332', '333', '334', '335', '336', '337',
  58. '340', '341', '342', '343', '344', '345', '346', '347',
  59. '350', '351', '352', '353', '354', '355', '356', '357',
  60. '360', '361', '362', '363', '364', '365', '366', '367',
  61. '370', '371', '372', '373', '374', '375', '376', '377',
  62. };
  63. int
  64. strcasecmp(s1, s2)
  65. const char *s1, *s2;
  66. {
  67. register const unsigned char *cm = charmap,
  68. *us1 = (const unsigned char *)s1,
  69. *us2 = (const unsigned char *)s2;
  70. while (cm[*us1] == cm[*us2++])
  71. if (*us1++ == '')
  72. return (0);
  73. return (cm[*us1] - cm[*--us2]);
  74. }
  75. int
  76. strncasecmp(s1, s2, n)
  77. const char *s1, *s2;
  78. register size_t n;
  79. {
  80. if (n != 0) {
  81. register const unsigned char *cm = charmap,
  82. *us1 = (const unsigned char *)s1,
  83. *us2 = (const unsigned char *)s2;
  84. do {
  85. if (cm[*us1] != cm[*us2++])
  86. return (cm[*us1] - cm[*--us2]);
  87. if (*us1++ == '')
  88. break;
  89. } while (--n != 0);
  90. }
  91. return (0);
  92. }