140266059SGregory Neil Shapiro /*
25dd76dd0SGregory Neil Shapiro * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers.
340266059SGregory Neil Shapiro * All rights reserved.
440266059SGregory Neil Shapiro * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
540266059SGregory Neil Shapiro * Copyright (c) 1987, 1988, 1993
640266059SGregory Neil Shapiro * The Regents of the University of California. All rights reserved.
740266059SGregory Neil Shapiro *
840266059SGregory Neil Shapiro * By using this file, you agree to the terms and conditions set
940266059SGregory Neil Shapiro * forth in the LICENSE file which can be found at the top level of
1040266059SGregory Neil Shapiro * the sendmail distribution.
1140266059SGregory Neil Shapiro *
1240266059SGregory Neil Shapiro */
1340266059SGregory Neil Shapiro
1440266059SGregory Neil Shapiro #include <sm/gen.h>
15*4313cc83SGregory Neil Shapiro SM_RCSID("@(#)$Id: strcasecmp.c,v 1.16 2013-11-22 20:51:43 ca Exp $")
1640266059SGregory Neil Shapiro
1740266059SGregory Neil Shapiro #include <sm/config.h>
1840266059SGregory Neil Shapiro #include <sm/string.h>
1940266059SGregory Neil Shapiro #include <string.h>
2040266059SGregory Neil Shapiro
2140266059SGregory Neil Shapiro /*
2240266059SGregory Neil Shapiro ** SM_STRCASECMP -- 8-bit clean version of strcasecmp
2340266059SGregory Neil Shapiro **
2440266059SGregory Neil Shapiro ** Thank you, vendors, for making this all necessary.
2540266059SGregory Neil Shapiro */
2640266059SGregory Neil Shapiro
2740266059SGregory Neil Shapiro /*
2840266059SGregory Neil Shapiro ** This array is designed for mapping upper and lower case letter
2940266059SGregory Neil Shapiro ** together for a case independent comparison. The mappings are
3040266059SGregory Neil Shapiro ** based upon ascii character sequences.
3140266059SGregory Neil Shapiro */
3240266059SGregory Neil Shapiro
3340266059SGregory Neil Shapiro const unsigned char charmap[] =
3440266059SGregory Neil Shapiro {
3540266059SGregory Neil Shapiro 0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,
3640266059SGregory Neil Shapiro 0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,
3740266059SGregory Neil Shapiro 0020, 0021, 0022, 0023, 0024, 0025, 0026, 0027,
3840266059SGregory Neil Shapiro 0030, 0031, 0032, 0033, 0034, 0035, 0036, 0037,
3940266059SGregory Neil Shapiro 0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047,
4040266059SGregory Neil Shapiro 0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057,
4140266059SGregory Neil Shapiro 0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,
4240266059SGregory Neil Shapiro 0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077,
4340266059SGregory Neil Shapiro 0100, 0141, 0142, 0143, 0144, 0145, 0146, 0147,
4440266059SGregory Neil Shapiro 0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,
4540266059SGregory Neil Shapiro 0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,
4640266059SGregory Neil Shapiro 0170, 0171, 0172, 0133, 0134, 0135, 0136, 0137,
4740266059SGregory Neil Shapiro 0140, 0141, 0142, 0143, 0144, 0145, 0146, 0147,
4840266059SGregory Neil Shapiro 0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,
4940266059SGregory Neil Shapiro 0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,
5040266059SGregory Neil Shapiro 0170, 0171, 0172, 0173, 0174, 0175, 0176, 0177,
5140266059SGregory Neil Shapiro 0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207,
5240266059SGregory Neil Shapiro 0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217,
5340266059SGregory Neil Shapiro 0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227,
5440266059SGregory Neil Shapiro 0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237,
5540266059SGregory Neil Shapiro 0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247,
5640266059SGregory Neil Shapiro 0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257,
5740266059SGregory Neil Shapiro 0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267,
5840266059SGregory Neil Shapiro 0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277,
5940266059SGregory Neil Shapiro 0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307,
6040266059SGregory Neil Shapiro 0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317,
6140266059SGregory Neil Shapiro 0320, 0321, 0322, 0323, 0324, 0325, 0326, 0327,
6240266059SGregory Neil Shapiro 0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337,
6340266059SGregory Neil Shapiro 0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347,
6440266059SGregory Neil Shapiro 0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357,
6540266059SGregory Neil Shapiro 0360, 0361, 0362, 0363, 0364, 0365, 0366, 0367,
6640266059SGregory Neil Shapiro 0370, 0371, 0372, 0373, 0374, 0375, 0376, 0377,
6740266059SGregory Neil Shapiro };
6840266059SGregory Neil Shapiro
6940266059SGregory Neil Shapiro int
sm_strcasecmp(s1,s2)7040266059SGregory Neil Shapiro sm_strcasecmp(s1, s2)
7140266059SGregory Neil Shapiro const char *s1, *s2;
7240266059SGregory Neil Shapiro {
7340266059SGregory Neil Shapiro const unsigned char *us1 = (const unsigned char *)s1;
7440266059SGregory Neil Shapiro const unsigned char *us2 = (const unsigned char *)s2;
7540266059SGregory Neil Shapiro
7640266059SGregory Neil Shapiro while (charmap[*us1] == charmap[*us2])
7740266059SGregory Neil Shapiro {
7840266059SGregory Neil Shapiro if (*us1 == '\0')
7940266059SGregory Neil Shapiro return 0;
8040266059SGregory Neil Shapiro ++us1;
8140266059SGregory Neil Shapiro ++us2;
8240266059SGregory Neil Shapiro }
8340266059SGregory Neil Shapiro return charmap[*us1] - charmap[*us2];
8440266059SGregory Neil Shapiro }
8540266059SGregory Neil Shapiro
8640266059SGregory Neil Shapiro int
sm_strncasecmp(s1,s2,n)8740266059SGregory Neil Shapiro sm_strncasecmp(s1, s2, n)
8840266059SGregory Neil Shapiro const char *s1, *s2;
8940266059SGregory Neil Shapiro register size_t n;
9040266059SGregory Neil Shapiro {
9140266059SGregory Neil Shapiro if (n != 0)
9240266059SGregory Neil Shapiro {
9340266059SGregory Neil Shapiro register const unsigned char *cm = charmap;
9440266059SGregory Neil Shapiro register const unsigned char *us1 = (const unsigned char *)s1;
9540266059SGregory Neil Shapiro register const unsigned char *us2 = (const unsigned char *)s2;
9640266059SGregory Neil Shapiro
9740266059SGregory Neil Shapiro do
9840266059SGregory Neil Shapiro {
9940266059SGregory Neil Shapiro if (cm[*us1] != cm[*us2++])
10040266059SGregory Neil Shapiro return (cm[*us1] - cm[*--us2]);
10140266059SGregory Neil Shapiro if (*us1++ == '\0')
10240266059SGregory Neil Shapiro break;
10340266059SGregory Neil Shapiro } while (--n != 0);
10440266059SGregory Neil Shapiro }
10540266059SGregory Neil Shapiro return 0;
10640266059SGregory Neil Shapiro }
107