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