xref: /csrg-svn/lib/libc/string/strcasecmp.c (revision 32676)
131745Sbostic /*
231745Sbostic  * Copyright (c) 1987 Regents of the University of California.
3*32676Sbostic  * All rights reserved.
4*32676Sbostic  *
5*32676Sbostic  * Redistribution and use in source and binary forms are permitted
6*32676Sbostic  * provided that this notice is preserved and that due credit is given
7*32676Sbostic  * to the University of California at Berkeley. The name of the University
8*32676Sbostic  * may not be used to endorse or promote products derived from this
9*32676Sbostic  * software without specific written prior permission. This software
10*32676Sbostic  * is provided ``as is'' without express or implied warranty.
1131745Sbostic  */
1231745Sbostic 
1331745Sbostic #if defined(LIBC_SCCS) && !defined(lint)
14*32676Sbostic static char sccsid[] = "@(#)strcasecmp.c	5.5 (Berkeley) 11/24/87";
1532663Sbostic #endif /* LIBC_SCCS and not lint */
1631745Sbostic 
1732663Sbostic #include <sys/types.h>
1832663Sbostic 
1931745Sbostic /*
2031747Sbostic  * This array is designed for mapping upper and lower case letter
2131747Sbostic  * together for a case independent comparison.  The mappings are
2231747Sbostic  * based upon ascii character sequences.
2331745Sbostic  */
2432663Sbostic static u_char charmap[] = {
2531747Sbostic 	'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
2631747Sbostic 	'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
2731747Sbostic 	'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
2831747Sbostic 	'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
2931747Sbostic 	'\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
3031747Sbostic 	'\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
3131747Sbostic 	'\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
3231747Sbostic 	'\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
3331747Sbostic 	'\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
3431747Sbostic 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
3531747Sbostic 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
3631747Sbostic 	'\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
3731747Sbostic 	'\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
3831747Sbostic 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
3931747Sbostic 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
4031747Sbostic 	'\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
4131747Sbostic 	'\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
4231747Sbostic 	'\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
4331747Sbostic 	'\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
4431747Sbostic 	'\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
4531747Sbostic 	'\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
4631747Sbostic 	'\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
4731747Sbostic 	'\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
4831747Sbostic 	'\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
4931747Sbostic 	'\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
5031747Sbostic 	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
5131747Sbostic 	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
5231747Sbostic 	'\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
5331747Sbostic 	'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
5431747Sbostic 	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
5531747Sbostic 	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
5631747Sbostic 	'\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
5731747Sbostic };
5831747Sbostic 
5931745Sbostic strcasecmp(s1, s2)
6032663Sbostic 	char *s1, *s2;
6131745Sbostic {
6232663Sbostic 	register u_char	*cm = charmap,
6332663Sbostic 			*us1 = (u_char *)s1,
6432663Sbostic 			*us2 = (u_char *)s2;
6531745Sbostic 
6632663Sbostic 	while (cm[*us1] == cm[*us2++])
6732663Sbostic 		if (*us1++ == '\0')
6831745Sbostic 			return(0);
6932663Sbostic 	return(cm[*us1] - cm[*--us2]);
7031745Sbostic }
7131745Sbostic 
7231993Sbostic strncasecmp(s1, s2, n)
7332663Sbostic 	char *s1, *s2;
7431747Sbostic 	register int n;
7531745Sbostic {
7632663Sbostic 	register u_char	*cm = charmap,
7732663Sbostic 			*us1 = (u_char *)s1,
7832663Sbostic 			*us2 = (u_char *)s2;
7931745Sbostic 
8032663Sbostic 	while (--n >= 0 && cm[*us1] == cm[*us2++])
8132663Sbostic 		if (*us1++ == '\0')
8231745Sbostic 			return(0);
8332663Sbostic 	return(n < 0 ? 0 : cm[*us1] - cm[*--us2]);
8431745Sbostic }
85