xref: /csrg-svn/lib/libc/string/strcasecmp.c (revision 31993)
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*31993Sbostic static char sccsid[] = "@(#)strcasecmp.c	5.3 (Berkeley) 08/03/87";
931745Sbostic #endif LIBC_SCCS and not lint
1031745Sbostic 
1131745Sbostic /*
1231747Sbostic  * This array is designed for mapping upper and lower case letter
1331747Sbostic  * together for a case independent comparison.  The mappings are
1431747Sbostic  * based upon ascii character sequences.
1531745Sbostic  */
1631747Sbostic static char charmap[] = {
1731747Sbostic 	'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
1831747Sbostic 	'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
1931747Sbostic 	'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
2031747Sbostic 	'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
2131747Sbostic 	'\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
2231747Sbostic 	'\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
2331747Sbostic 	'\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
2431747Sbostic 	'\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
2531747Sbostic 	'\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
2631747Sbostic 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
2731747Sbostic 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
2831747Sbostic 	'\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
2931747Sbostic 	'\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
3031747Sbostic 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
3131747Sbostic 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
3231747Sbostic 	'\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
3331747Sbostic 	'\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
3431747Sbostic 	'\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
3531747Sbostic 	'\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
3631747Sbostic 	'\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
3731747Sbostic 	'\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
3831747Sbostic 	'\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
3931747Sbostic 	'\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
4031747Sbostic 	'\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
4131747Sbostic 	'\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
4231747Sbostic 	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
4331747Sbostic 	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
4431747Sbostic 	'\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
4531747Sbostic 	'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
4631747Sbostic 	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
4731747Sbostic 	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
4831747Sbostic 	'\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
4931747Sbostic };
5031747Sbostic 
5131745Sbostic strcasecmp(s1, s2)
5231747Sbostic 	register char *s1, *s2;
5331745Sbostic {
5431747Sbostic 	register char *cm = charmap;
5531745Sbostic 
5631747Sbostic 	while (cm[*s1] == cm[*s2++])
5731747Sbostic 		if (*s1++ == '\0')
5831745Sbostic 			return(0);
5931747Sbostic 	return(cm[*s1] - cm[*--s2]);
6031745Sbostic }
6131745Sbostic 
62*31993Sbostic strncasecmp(s1, s2, n)
6331747Sbostic 	register char *s1, *s2;
6431747Sbostic 	register int n;
6531745Sbostic {
6631747Sbostic 	register char *cm = charmap;
6731745Sbostic 
6831747Sbostic 	while (--n >= 0 && cm[*s1] == cm[*s2++])
6931747Sbostic 		if (*s1++ == '\0')
7031745Sbostic 			return(0);
7131747Sbostic 	return(n < 0 ? 0 : cm[*s1] - cm[*--s2]);
7231745Sbostic }
73