131745Sbostic /* 231745Sbostic * Copyright (c) 1987 Regents of the University of California. 331745Sbostic * All rights reserved. The Berkeley software License Agreement 431745Sbostic * specifies the terms and conditions for redistribution. 531745Sbostic */ 631745Sbostic 731745Sbostic #if defined(LIBC_SCCS) && !defined(lint) 8*32663Sbostic static char sccsid[] = "@(#)strcasecmp.c 5.4 (Berkeley) 11/23/87"; 9*32663Sbostic #endif /* LIBC_SCCS and not lint */ 1031745Sbostic 11*32663Sbostic #include <sys/types.h> 12*32663Sbostic 1331745Sbostic /* 1431747Sbostic * This array is designed for mapping upper and lower case letter 1531747Sbostic * together for a case independent comparison. The mappings are 1631747Sbostic * based upon ascii character sequences. 1731745Sbostic */ 18*32663Sbostic static u_char charmap[] = { 1931747Sbostic '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', 2031747Sbostic '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', 2131747Sbostic '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', 2231747Sbostic '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', 2331747Sbostic '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', 2431747Sbostic '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', 2531747Sbostic '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', 2631747Sbostic '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', 2731747Sbostic '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', 2831747Sbostic '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', 2931747Sbostic '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', 3031747Sbostic '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', 3131747Sbostic '\140', '\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', '\173', '\174', '\175', '\176', '\177', 3531747Sbostic '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', 3631747Sbostic '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', 3731747Sbostic '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', 3831747Sbostic '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', 3931747Sbostic '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', 4031747Sbostic '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', 4131747Sbostic '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', 4231747Sbostic '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', 4331747Sbostic '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347', 4431747Sbostic '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', 4531747Sbostic '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', 4631747Sbostic '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337', 4731747Sbostic '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', 4831747Sbostic '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', 4931747Sbostic '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', 5031747Sbostic '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', 5131747Sbostic }; 5231747Sbostic 5331745Sbostic strcasecmp(s1, s2) 54*32663Sbostic char *s1, *s2; 5531745Sbostic { 56*32663Sbostic register u_char *cm = charmap, 57*32663Sbostic *us1 = (u_char *)s1, 58*32663Sbostic *us2 = (u_char *)s2; 5931745Sbostic 60*32663Sbostic while (cm[*us1] == cm[*us2++]) 61*32663Sbostic if (*us1++ == '\0') 6231745Sbostic return(0); 63*32663Sbostic return(cm[*us1] - cm[*--us2]); 6431745Sbostic } 6531745Sbostic 6631993Sbostic strncasecmp(s1, s2, n) 67*32663Sbostic char *s1, *s2; 6831747Sbostic register int n; 6931745Sbostic { 70*32663Sbostic register u_char *cm = charmap, 71*32663Sbostic *us1 = (u_char *)s1, 72*32663Sbostic *us2 = (u_char *)s2; 7331745Sbostic 74*32663Sbostic while (--n >= 0 && cm[*us1] == cm[*us2++]) 75*32663Sbostic if (*us1++ == '\0') 7631745Sbostic return(0); 77*32663Sbostic return(n < 0 ? 0 : cm[*us1] - cm[*--us2]); 7831745Sbostic } 79