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