xref: /csrg-svn/lib/libc/string/strcasecmp.c (revision 34821)
131745Sbostic /*
231745Sbostic  * Copyright (c) 1987 Regents of the University of California.
332676Sbostic  * All rights reserved.
432676Sbostic  *
532676Sbostic  * Redistribution and use in source and binary forms are permitted
6*34821Sbostic  * provided that the above copyright notice and this paragraph are
7*34821Sbostic  * duplicated in all such forms and that any documentation,
8*34821Sbostic  * advertising materials, and other materials related to such
9*34821Sbostic  * distribution and use acknowledge that the software was developed
10*34821Sbostic  * by the University of California, Berkeley.  The name of the
11*34821Sbostic  * University may not be used to endorse or promote products derived
12*34821Sbostic  * from this software without specific prior written permission.
13*34821Sbostic  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14*34821Sbostic  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15*34821Sbostic  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1631745Sbostic  */
1731745Sbostic 
1831745Sbostic #if defined(LIBC_SCCS) && !defined(lint)
19*34821Sbostic static char sccsid[] = "@(#)strcasecmp.c	5.6 (Berkeley) 06/27/88";
2032663Sbostic #endif /* LIBC_SCCS and not lint */
2131745Sbostic 
2232663Sbostic #include <sys/types.h>
2332663Sbostic 
2431745Sbostic /*
2531747Sbostic  * This array is designed for mapping upper and lower case letter
2631747Sbostic  * together for a case independent comparison.  The mappings are
2731747Sbostic  * based upon ascii character sequences.
2831745Sbostic  */
2932663Sbostic static u_char charmap[] = {
3031747Sbostic 	'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
3131747Sbostic 	'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
3231747Sbostic 	'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
3331747Sbostic 	'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
3431747Sbostic 	'\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
3531747Sbostic 	'\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
3631747Sbostic 	'\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
3731747Sbostic 	'\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
3831747Sbostic 	'\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
3931747Sbostic 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
4031747Sbostic 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
4131747Sbostic 	'\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
4231747Sbostic 	'\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
4331747Sbostic 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
4431747Sbostic 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
4531747Sbostic 	'\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
4631747Sbostic 	'\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
4731747Sbostic 	'\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
4831747Sbostic 	'\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
4931747Sbostic 	'\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
5031747Sbostic 	'\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
5131747Sbostic 	'\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
5231747Sbostic 	'\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
5331747Sbostic 	'\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
5431747Sbostic 	'\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
5531747Sbostic 	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
5631747Sbostic 	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
5731747Sbostic 	'\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
5831747Sbostic 	'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
5931747Sbostic 	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
6031747Sbostic 	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
6131747Sbostic 	'\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
6231747Sbostic };
6331747Sbostic 
6431745Sbostic strcasecmp(s1, s2)
6532663Sbostic 	char *s1, *s2;
6631745Sbostic {
6732663Sbostic 	register u_char	*cm = charmap,
6832663Sbostic 			*us1 = (u_char *)s1,
6932663Sbostic 			*us2 = (u_char *)s2;
7031745Sbostic 
7132663Sbostic 	while (cm[*us1] == cm[*us2++])
7232663Sbostic 		if (*us1++ == '\0')
7331745Sbostic 			return(0);
7432663Sbostic 	return(cm[*us1] - cm[*--us2]);
7531745Sbostic }
7631745Sbostic 
7731993Sbostic strncasecmp(s1, s2, n)
7832663Sbostic 	char *s1, *s2;
7931747Sbostic 	register int n;
8031745Sbostic {
8132663Sbostic 	register u_char	*cm = charmap,
8232663Sbostic 			*us1 = (u_char *)s1,
8332663Sbostic 			*us2 = (u_char *)s2;
8431745Sbostic 
8532663Sbostic 	while (--n >= 0 && cm[*us1] == cm[*us2++])
8632663Sbostic 		if (*us1++ == '\0')
8731745Sbostic 			return(0);
8832663Sbostic 	return(n < 0 ? 0 : cm[*us1] - cm[*--us2]);
8931745Sbostic }
90