131745Sbostic /*
2*61193Sbostic * Copyright (c) 1987, 1993
3*61193Sbostic * The Regents of the University of California. All rights reserved.
432676Sbostic *
542635Sbostic * %sccs.include.redist.c%
631745Sbostic */
731745Sbostic
846144Sbostic #include <sys/cdefs.h>
942149Sbostic #include <string.h>
1042149Sbostic
1131745Sbostic #if defined(LIBC_SCCS) && !defined(lint)
12*61193Sbostic static char sccsid[] = "@(#)strcasecmp.c 8.1 (Berkeley) 06/04/93";
1332663Sbostic #endif /* LIBC_SCCS and not lint */
1431745Sbostic
1542149Sbostic typedef unsigned char u_char;
1632663Sbostic
1731745Sbostic /*
1831747Sbostic * This array is designed for mapping upper and lower case letter
1931747Sbostic * together for a case independent comparison. The mappings are
2031747Sbostic * based upon ascii character sequences.
2131745Sbostic */
2242149Sbostic static const u_char charmap[] = {
2331747Sbostic '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
2431747Sbostic '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
2531747Sbostic '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
2631747Sbostic '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
2731747Sbostic '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
2831747Sbostic '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
2931747Sbostic '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
3031747Sbostic '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
3131747Sbostic '\100', '\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', '\133', '\134', '\135', '\136', '\137',
3531747Sbostic '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
3631747Sbostic '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
3731747Sbostic '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
3831747Sbostic '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
3931747Sbostic '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
4031747Sbostic '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
4131747Sbostic '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
4231747Sbostic '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
4331747Sbostic '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
4431747Sbostic '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
4531747Sbostic '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
4631747Sbostic '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
4736699Sbostic '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
4836699Sbostic '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
4936699Sbostic '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
5036699Sbostic '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
5131747Sbostic '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
5231747Sbostic '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
5331747Sbostic '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
5431747Sbostic '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
5531747Sbostic };
5631747Sbostic
5742149Sbostic int
strcasecmp(s1,s2)5831745Sbostic strcasecmp(s1, s2)
5942149Sbostic const char *s1, *s2;
6031745Sbostic {
6142149Sbostic register const u_char *cm = charmap,
6242149Sbostic *us1 = (const u_char *)s1,
6342149Sbostic *us2 = (const u_char *)s2;
6431745Sbostic
6532663Sbostic while (cm[*us1] == cm[*us2++])
6632663Sbostic if (*us1++ == '\0')
6742149Sbostic return (0);
6842149Sbostic return (cm[*us1] - cm[*--us2]);
6931745Sbostic }
7031745Sbostic
7142149Sbostic int
strncasecmp(s1,s2,n)7231993Sbostic strncasecmp(s1, s2, n)
7342149Sbostic const char *s1, *s2;
7442149Sbostic register size_t n;
7531745Sbostic {
7642149Sbostic if (n != 0) {
7742149Sbostic register const u_char *cm = charmap,
7842149Sbostic *us1 = (const u_char *)s1,
7942149Sbostic *us2 = (const u_char *)s2;
8031745Sbostic
8142149Sbostic do {
8242149Sbostic if (cm[*us1] != cm[*us2++])
8342149Sbostic return (cm[*us1] - cm[*--us2]);
8442149Sbostic if (*us1++ == '\0')
8542149Sbostic break;
8642149Sbostic } while (--n != 0);
8742149Sbostic }
8842149Sbostic return (0);
8931745Sbostic }
90