xref: /csrg-svn/lib/libc/string/strcasecmp.c (revision 32663)
131745Sbostic /*
231745Sbostic  * Copyright (c) 1987 Regents of the University of California.
331745Sbostic  * All rights reserved.  The Berkeley software License Agreement
431745Sbostic  * specifies the terms and conditions for redistribution.
531745Sbostic  */
631745Sbostic 
731745Sbostic #if defined(LIBC_SCCS) && !defined(lint)
8*32663Sbostic static char sccsid[] = "@(#)strcasecmp.c	5.4 (Berkeley) 11/23/87";
9*32663Sbostic #endif /* LIBC_SCCS and not lint */
1031745Sbostic 
11*32663Sbostic #include <sys/types.h>
12*32663Sbostic 
1331745Sbostic /*
1431747Sbostic  * This array is designed for mapping upper and lower case letter
1531747Sbostic  * together for a case independent comparison.  The mappings are
1631747Sbostic  * based upon ascii character sequences.
1731745Sbostic  */
18*32663Sbostic static u_char charmap[] = {
1931747Sbostic 	'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
2031747Sbostic 	'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
2131747Sbostic 	'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
2231747Sbostic 	'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
2331747Sbostic 	'\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
2431747Sbostic 	'\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
2531747Sbostic 	'\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
2631747Sbostic 	'\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
2731747Sbostic 	'\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
2831747Sbostic 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
2931747Sbostic 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
3031747Sbostic 	'\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
3131747Sbostic 	'\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
3231747Sbostic 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
3331747Sbostic 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
3431747Sbostic 	'\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
3531747Sbostic 	'\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
3631747Sbostic 	'\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
3731747Sbostic 	'\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
3831747Sbostic 	'\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
3931747Sbostic 	'\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
4031747Sbostic 	'\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
4131747Sbostic 	'\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
4231747Sbostic 	'\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
4331747Sbostic 	'\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
4431747Sbostic 	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
4531747Sbostic 	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
4631747Sbostic 	'\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
4731747Sbostic 	'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
4831747Sbostic 	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
4931747Sbostic 	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
5031747Sbostic 	'\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
5131747Sbostic };
5231747Sbostic 
5331745Sbostic strcasecmp(s1, s2)
54*32663Sbostic 	char *s1, *s2;
5531745Sbostic {
56*32663Sbostic 	register u_char	*cm = charmap,
57*32663Sbostic 			*us1 = (u_char *)s1,
58*32663Sbostic 			*us2 = (u_char *)s2;
5931745Sbostic 
60*32663Sbostic 	while (cm[*us1] == cm[*us2++])
61*32663Sbostic 		if (*us1++ == '\0')
6231745Sbostic 			return(0);
63*32663Sbostic 	return(cm[*us1] - cm[*--us2]);
6431745Sbostic }
6531745Sbostic 
6631993Sbostic strncasecmp(s1, s2, n)
67*32663Sbostic 	char *s1, *s2;
6831747Sbostic 	register int n;
6931745Sbostic {
70*32663Sbostic 	register u_char	*cm = charmap,
71*32663Sbostic 			*us1 = (u_char *)s1,
72*32663Sbostic 			*us2 = (u_char *)s2;
7331745Sbostic 
74*32663Sbostic 	while (--n >= 0 && cm[*us1] == cm[*us2++])
75*32663Sbostic 		if (*us1++ == '\0')
7631745Sbostic 			return(0);
77*32663Sbostic 	return(n < 0 ? 0 : cm[*us1] - cm[*--us2]);
7831745Sbostic }
79