100bf4279Sespie /*
200bf4279Sespie * Copyright (c) 1987 Regents of the University of California.
300bf4279Sespie * All rights reserved.
400bf4279Sespie *
500bf4279Sespie * Redistribution and use in source and binary forms are permitted
600bf4279Sespie * provided that this notice is preserved and that due credit is given
700bf4279Sespie * to the University of California at Berkeley. The name of the University
800bf4279Sespie * may not be used to endorse or promote products derived from this
900bf4279Sespie * software without specific written prior permission. This software
1000bf4279Sespie * is provided ``as is'' without express or implied warranty.
1100bf4279Sespie */
1200bf4279Sespie
139588ddcfSespie /*
149588ddcfSespie
159588ddcfSespie @deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2})
169588ddcfSespie
179588ddcfSespie A case-insensitive @code{strncmp}.
189588ddcfSespie
199588ddcfSespie @end deftypefn
209588ddcfSespie
219588ddcfSespie */
229588ddcfSespie
2300bf4279Sespie #if defined(LIBC_SCCS) && !defined(lint)
2400bf4279Sespie static char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87";
2500bf4279Sespie #endif /* LIBC_SCCS and not lint */
2600bf4279Sespie
2700bf4279Sespie #include <ansidecl.h>
2800bf4279Sespie #include <stddef.h>
2900bf4279Sespie
3000bf4279Sespie /*
3100bf4279Sespie * This array is designed for mapping upper and lower case letter
3200bf4279Sespie * together for a case independent comparison. The mappings are
3300bf4279Sespie * based upon ascii character sequences.
3400bf4279Sespie */
359588ddcfSespie static const unsigned char charmap[] = {
3600bf4279Sespie '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
3700bf4279Sespie '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
3800bf4279Sespie '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
3900bf4279Sespie '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
4000bf4279Sespie '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
4100bf4279Sespie '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
4200bf4279Sespie '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
4300bf4279Sespie '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
4400bf4279Sespie '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
4500bf4279Sespie '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
4600bf4279Sespie '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
4700bf4279Sespie '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
4800bf4279Sespie '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
4900bf4279Sespie '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
5000bf4279Sespie '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
5100bf4279Sespie '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
5200bf4279Sespie '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
5300bf4279Sespie '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
5400bf4279Sespie '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
5500bf4279Sespie '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
5600bf4279Sespie '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
5700bf4279Sespie '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
5800bf4279Sespie '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
5900bf4279Sespie '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
6000bf4279Sespie '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
6100bf4279Sespie '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
6200bf4279Sespie '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
6300bf4279Sespie '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
6400bf4279Sespie '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
6500bf4279Sespie '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
6600bf4279Sespie '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
6700bf4279Sespie '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
6800bf4279Sespie };
6900bf4279Sespie
7000bf4279Sespie int
strncasecmp(const char * s1,const char * s2,register size_t n)71*150b7e42Smiod strncasecmp(const char *s1, const char *s2, register size_t n)
7200bf4279Sespie {
7300bf4279Sespie register unsigned char u1, u2;
7400bf4279Sespie
7500bf4279Sespie for (; n != 0; --n) {
7600bf4279Sespie u1 = (unsigned char) *s1++;
7700bf4279Sespie u2 = (unsigned char) *s2++;
7800bf4279Sespie if (charmap[u1] != charmap[u2]) {
7900bf4279Sespie return charmap[u1] - charmap[u2];
8000bf4279Sespie }
8100bf4279Sespie if (u1 == '\0') {
8200bf4279Sespie return 0;
8300bf4279Sespie }
8400bf4279Sespie }
8500bf4279Sespie return 0;
8600bf4279Sespie }
87