xref: /csrg-svn/lib/libc/string/strcasecmp.c (revision 36699)
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
634821Sbostic  * provided that the above copyright notice and this paragraph are
734821Sbostic  * duplicated in all such forms and that any documentation,
834821Sbostic  * advertising materials, and other materials related to such
934821Sbostic  * distribution and use acknowledge that the software was developed
1034821Sbostic  * by the University of California, Berkeley.  The name of the
1134821Sbostic  * University may not be used to endorse or promote products derived
1234821Sbostic  * from this software without specific prior written permission.
1334821Sbostic  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
1434821Sbostic  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
1534821Sbostic  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1631745Sbostic  */
1731745Sbostic 
1831745Sbostic #if defined(LIBC_SCCS) && !defined(lint)
19*36699Sbostic static char sccsid[] = "@(#)strcasecmp.c	5.7 (Berkeley) 02/07/89";
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',
54*36699Sbostic 	'\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
55*36699Sbostic 	'\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
56*36699Sbostic 	'\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
57*36699Sbostic 	'\330', '\331', '\332', '\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