source: trunk/third/sendmail/libsm/strcasecmp.c @ 19204

Revision 19204, 3.2 KB checked in by zacheiss, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r19203, which included commits to RCS files with non-trunk default branches.
Line 
1/*
2 * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers.
3 *      All rights reserved.
4 * Copyright (c) 1983, 1995-1997 Eric P. Allman.  All rights reserved.
5 * Copyright (c) 1987, 1988, 1993
6 *      The Regents of the University of California.  All rights reserved.
7 *
8 * By using this file, you agree to the terms and conditions set
9 * forth in the LICENSE file which can be found at the top level of
10 * the sendmail distribution.
11 *
12 */
13
14#include <sm/gen.h>
15SM_RCSID("@(#)$Id: strcasecmp.c,v 1.1.1.1 2003-04-08 15:06:05 zacheiss Exp $")
16
17#include <sm/config.h>
18#include <sm/string.h>
19#include <string.h>
20
21/*
22**  SM_STRCASECMP -- 8-bit clean version of strcasecmp
23**
24**      Thank you, vendors, for making this all necessary.
25*/
26
27/*
28**  This array is designed for mapping upper and lower case letter
29**  together for a case independent comparison.  The mappings are
30**  based upon ascii character sequences.
31*/
32
33const unsigned char charmap[] =
34{
35        0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,
36        0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,
37        0020, 0021, 0022, 0023, 0024, 0025, 0026, 0027,
38        0030, 0031, 0032, 0033, 0034, 0035, 0036, 0037,
39        0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047,
40        0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057,
41        0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,
42        0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077,
43        0100, 0141, 0142, 0143, 0144, 0145, 0146, 0147,
44        0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,
45        0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,
46        0170, 0171, 0172, 0133, 0134, 0135, 0136, 0137,
47        0140, 0141, 0142, 0143, 0144, 0145, 0146, 0147,
48        0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,
49        0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,
50        0170, 0171, 0172, 0173, 0174, 0175, 0176, 0177,
51        0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207,
52        0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217,
53        0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227,
54        0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237,
55        0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247,
56        0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257,
57        0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267,
58        0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277,
59        0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307,
60        0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317,
61        0320, 0321, 0322, 0323, 0324, 0325, 0326, 0327,
62        0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337,
63        0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347,
64        0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357,
65        0360, 0361, 0362, 0363, 0364, 0365, 0366, 0367,
66        0370, 0371, 0372, 0373, 0374, 0375, 0376, 0377,
67};
68
69int
70sm_strcasecmp(s1, s2)
71        const char *s1, *s2;
72{
73        const unsigned char *us1 = (const unsigned char *)s1;
74        const unsigned char *us2 = (const unsigned char *)s2;
75
76        while (charmap[*us1] == charmap[*us2])
77        {
78                if (*us1 == '\0')
79                        return 0;
80                ++us1;
81                ++us2;
82        }
83        return charmap[*us1] - charmap[*us2];
84}
85
86int
87sm_strncasecmp(s1, s2, n)
88        const char *s1, *s2;
89        register size_t n;
90{
91        if (n != 0)
92        {
93                register const unsigned char *cm = charmap;
94                register const unsigned char *us1 = (const unsigned char *)s1;
95                register const unsigned char *us2 = (const unsigned char *)s2;
96
97                do
98                {
99                        if (cm[*us1] != cm[*us2++])
100                                return (cm[*us1] - cm[*--us2]);
101                        if (*us1++ == '\0')
102                                break;
103                } while (--n != 0);
104        }
105        return 0;
106}
Note: See TracBrowser for help on using the repository browser.