140266059SGregory Neil Shapiro /* 25dd76dd0SGregory Neil Shapiro * Copyright (c) 2001 Proofpoint, Inc. and its suppliers. 340266059SGregory Neil Shapiro * All rights reserved. 440266059SGregory Neil Shapiro * 540266059SGregory Neil Shapiro * By using this file, you agree to the terms and conditions set 640266059SGregory Neil Shapiro * forth in the LICENSE file which can be found at the top level of 740266059SGregory Neil Shapiro * the sendmail distribution. 840266059SGregory Neil Shapiro * 940266059SGregory Neil Shapiro */ 1040266059SGregory Neil Shapiro 1140266059SGregory Neil Shapiro #include <sm/gen.h> 12*4313cc83SGregory Neil Shapiro SM_RCSID("@(#)$Id: strrevcmp.c,v 1.6 2013-11-22 20:51:43 ca Exp $") 1340266059SGregory Neil Shapiro 1440266059SGregory Neil Shapiro #include <sm/config.h> 1540266059SGregory Neil Shapiro #include <sm/string.h> 1640266059SGregory Neil Shapiro #include <string.h> 1740266059SGregory Neil Shapiro 1840266059SGregory Neil Shapiro /* strcasecmp.c */ 1940266059SGregory Neil Shapiro extern const unsigned char charmap[]; 2040266059SGregory Neil Shapiro 2140266059SGregory Neil Shapiro /* 2240266059SGregory Neil Shapiro ** SM_STRREVCASECMP -- compare two strings starting at the end (ignore case) 2340266059SGregory Neil Shapiro ** 2440266059SGregory Neil Shapiro ** Parameters: 2540266059SGregory Neil Shapiro ** s1 -- first string. 2640266059SGregory Neil Shapiro ** s2 -- second string. 2740266059SGregory Neil Shapiro ** 2840266059SGregory Neil Shapiro ** Returns: 2940266059SGregory Neil Shapiro ** strcasecmp(reverse(s1), reverse(s2)) 3040266059SGregory Neil Shapiro */ 3140266059SGregory Neil Shapiro 3240266059SGregory Neil Shapiro int 3340266059SGregory Neil Shapiro sm_strrevcasecmp(s1, s2) 3440266059SGregory Neil Shapiro const char *s1, *s2; 3540266059SGregory Neil Shapiro { 3640266059SGregory Neil Shapiro register int i1, i2; 3740266059SGregory Neil Shapiro 3840266059SGregory Neil Shapiro i1 = strlen(s1) - 1; 3940266059SGregory Neil Shapiro i2 = strlen(s2) - 1; 4040266059SGregory Neil Shapiro while (i1 >= 0 && i2 >= 0 && 4140266059SGregory Neil Shapiro charmap[(unsigned char) s1[i1]] == 4240266059SGregory Neil Shapiro charmap[(unsigned char) s2[i2]]) 4340266059SGregory Neil Shapiro { 4440266059SGregory Neil Shapiro --i1; 4540266059SGregory Neil Shapiro --i2; 4640266059SGregory Neil Shapiro } 4740266059SGregory Neil Shapiro if (i1 < 0) 4840266059SGregory Neil Shapiro { 4940266059SGregory Neil Shapiro if (i2 < 0) 5040266059SGregory Neil Shapiro return 0; 5140266059SGregory Neil Shapiro else 5240266059SGregory Neil Shapiro return -1; 5340266059SGregory Neil Shapiro } 5440266059SGregory Neil Shapiro else 5540266059SGregory Neil Shapiro { 5640266059SGregory Neil Shapiro if (i2 < 0) 5740266059SGregory Neil Shapiro return 1; 5840266059SGregory Neil Shapiro else 5940266059SGregory Neil Shapiro return (charmap[(unsigned char) s1[i1]] - 6040266059SGregory Neil Shapiro charmap[(unsigned char) s2[i2]]); 6140266059SGregory Neil Shapiro } 6240266059SGregory Neil Shapiro } 6340266059SGregory Neil Shapiro /* 6440266059SGregory Neil Shapiro ** SM_STRREVCMP -- compare two strings starting at the end 6540266059SGregory Neil Shapiro ** 6640266059SGregory Neil Shapiro ** Parameters: 6740266059SGregory Neil Shapiro ** s1 -- first string. 6840266059SGregory Neil Shapiro ** s2 -- second string. 6940266059SGregory Neil Shapiro ** 7040266059SGregory Neil Shapiro ** Returns: 7140266059SGregory Neil Shapiro ** strcmp(reverse(s1), reverse(s2)) 7240266059SGregory Neil Shapiro */ 7340266059SGregory Neil Shapiro 7440266059SGregory Neil Shapiro int 7540266059SGregory Neil Shapiro sm_strrevcmp(s1, s2) 7640266059SGregory Neil Shapiro const char *s1, *s2; 7740266059SGregory Neil Shapiro { 7840266059SGregory Neil Shapiro register int i1, i2; 7940266059SGregory Neil Shapiro 8040266059SGregory Neil Shapiro i1 = strlen(s1) - 1; 8140266059SGregory Neil Shapiro i2 = strlen(s2) - 1; 8240266059SGregory Neil Shapiro while (i1 >= 0 && i2 >= 0 && s1[i1] == s2[i2]) 8340266059SGregory Neil Shapiro { 8440266059SGregory Neil Shapiro --i1; 8540266059SGregory Neil Shapiro --i2; 8640266059SGregory Neil Shapiro } 8740266059SGregory Neil Shapiro if (i1 < 0) 8840266059SGregory Neil Shapiro { 8940266059SGregory Neil Shapiro if (i2 < 0) 9040266059SGregory Neil Shapiro return 0; 9140266059SGregory Neil Shapiro else 9240266059SGregory Neil Shapiro return -1; 9340266059SGregory Neil Shapiro } 9440266059SGregory Neil Shapiro else 9540266059SGregory Neil Shapiro { 9640266059SGregory Neil Shapiro if (i2 < 0) 9740266059SGregory Neil Shapiro return 1; 9840266059SGregory Neil Shapiro else 9940266059SGregory Neil Shapiro return s1[i1] - s2[i2]; 10040266059SGregory Neil Shapiro } 10140266059SGregory Neil Shapiro } 102