Back to index

cell-binutils  2.17cvs20070401
strncasecmp.c
Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 1987 Regents of the University of California.
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms are permitted
00006  * provided that this notice is preserved and that due credit is given
00007  * to the University of California at Berkeley. The name of the University
00008  * may not be used to endorse or promote products derived from this
00009  * software without specific written prior permission. This software
00010  * is provided ``as is'' without express or implied warranty.
00011  */
00012 
00013 /*
00014   
00015 @deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2})
00016 
00017 A case-insensitive @code{strncmp}.
00018 
00019 @end deftypefn
00020 
00021 */
00022 
00023 #if defined(LIBC_SCCS) && !defined(lint)
00024 static char sccsid[] = "@(#)strcasecmp.c  5.5 (Berkeley) 11/24/87";
00025 #endif /* LIBC_SCCS and not lint */
00026 
00027 #include <ansidecl.h>
00028 #include <stddef.h>
00029 
00030 /*
00031  * This array is designed for mapping upper and lower case letter
00032  * together for a case independent comparison.  The mappings are
00033  * based upon ascii character sequences.
00034  */
00035 static const unsigned char charmap[] = {
00036        '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
00037        '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
00038        '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
00039        '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
00040        '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
00041        '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
00042        '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
00043        '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
00044        '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
00045        '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
00046        '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
00047        '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
00048        '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
00049        '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
00050        '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
00051        '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
00052        '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
00053        '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
00054        '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
00055        '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
00056        '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
00057        '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
00058        '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
00059        '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
00060        '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
00061        '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
00062        '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
00063        '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
00064        '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
00065        '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
00066        '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
00067        '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
00068 };
00069 
00070 int
00071 strncasecmp(const char *s1, const char *s2, register size_t n)
00072 {
00073     register unsigned char u1, u2;
00074 
00075     for (; n != 0; --n) {
00076        u1 = (unsigned char) *s1++;
00077        u2 = (unsigned char) *s2++;
00078        if (charmap[u1] != charmap[u2]) {
00079            return charmap[u1] - charmap[u2];
00080        }
00081        if (u1 == '\0') {
00082            return 0;
00083        }
00084     }
00085     return 0;
00086 }