1169695Skan/* 2169695Skan * Copyright (c) 1987 Regents of the University of California. 3169695Skan * All rights reserved. 4169695Skan * 5169695Skan * Redistribution and use in source and binary forms are permitted 6169695Skan * provided that this notice is preserved and that due credit is given 7169695Skan * to the University of California at Berkeley. The name of the University 8169695Skan * may not be used to endorse or promote products derived from this 9169695Skan * software without specific written prior permission. This software 10169695Skan * is provided ``as is'' without express or implied warranty. 11169695Skan */ 12169695Skan 13169695Skan/* 14169695Skan 15169695Skan@deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2}) 16169695Skan 17169695SkanA case-insensitive @code{strncmp}. 18169695Skan 19169695Skan@end deftypefn 20169695Skan 21169695Skan*/ 22169695Skan 23169695Skan#if defined(LIBC_SCCS) && !defined(lint) 24169695Skanstatic char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87"; 25169695Skan#endif /* LIBC_SCCS and not lint */ 26169695Skan 27169695Skan#include <ansidecl.h> 28169695Skan#include <stddef.h> 29169695Skan 30169695Skan/* 31169695Skan * This array is designed for mapping upper and lower case letter 32169695Skan * together for a case independent comparison. The mappings are 33169695Skan * based upon ascii character sequences. 34169695Skan */ 35169695Skanstatic const unsigned char charmap[] = { 36169695Skan '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', 37169695Skan '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', 38169695Skan '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', 39169695Skan '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', 40169695Skan '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', 41169695Skan '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', 42169695Skan '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', 43169695Skan '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', 44169695Skan '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', 45169695Skan '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', 46169695Skan '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', 47169695Skan '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', 48169695Skan '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', 49169695Skan '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', 50169695Skan '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', 51169695Skan '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', 52169695Skan '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', 53169695Skan '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', 54169695Skan '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', 55169695Skan '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', 56169695Skan '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', 57169695Skan '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', 58169695Skan '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', 59169695Skan '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', 60169695Skan '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347', 61169695Skan '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', 62169695Skan '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', 63169695Skan '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337', 64169695Skan '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', 65169695Skan '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', 66169695Skan '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', 67169695Skan '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', 68169695Skan}; 69169695Skan 70169695Skanint 71169695Skanstrncasecmp(const char *s1, const char *s2, register size_t n) 72169695Skan{ 73169695Skan register unsigned char u1, u2; 74169695Skan 75169695Skan for (; n != 0; --n) { 76169695Skan u1 = (unsigned char) *s1++; 77169695Skan u2 = (unsigned char) *s2++; 78169695Skan if (charmap[u1] != charmap[u2]) { 79169695Skan return charmap[u1] - charmap[u2]; 80169695Skan } 81169695Skan if (u1 == '\0') { 82169695Skan return 0; 83169695Skan } 84169695Skan } 85169695Skan return 0; 86169695Skan} 87