"SfR Fresh" - the SfR Freeware/Shareware Archive

Member "trafshow-3.1/strcasecmp.c" of archive trafshow-3.1.tgz:


As a special service "SfR Fresh" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
    1 /*
    2  * Copyright (c) 1987 Regents of the University of California.
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms are permitted
    6  * provided that this notice is preserved and that due credit is given
    7  * to the University of California at Berkeley. The name of the University
    8  * may not be used to endorse or promote products derived from this
    9  * software without specific written prior permission. This software
   10  * is provided ``as is'' without express or implied warranty.
   11  */
   12 
   13 typedef unsigned char u_char;
   14 
   15 /*
   16  * This array is designed for mapping upper and lower case letter
   17  * together for a case independent comparison.  The mappings are
   18  * based upon ascii character sequences.
   19  */
   20 static const u_char charmap[] = {
   21 	'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
   22 	'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
   23 	'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
   24 	'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
   25 	'\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
   26 	'\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
   27 	'\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
   28 	'\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
   29 	'\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
   30 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
   31 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
   32 	'\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
   33 	'\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
   34 	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
   35 	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
   36 	'\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
   37 	'\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
   38 	'\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
   39 	'\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
   40 	'\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
   41 	'\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
   42 	'\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
   43 	'\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
   44 	'\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
   45 	'\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307',
   46 	'\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317',
   47 	'\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327',
   48 	'\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337',
   49 	'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
   50 	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
   51 	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
   52 	'\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
   53 };
   54 
   55 int
   56 strcasecmp(s1, s2)
   57 	const char *s1, *s2;
   58 {
   59 	register const u_char *cm = charmap,
   60 			*us1 = (const u_char *)s1,
   61 			*us2 = (const u_char *)s2;
   62 
   63 	while (cm[*us1] == cm[*us2++])
   64 		if (*us1++ == '\0')
   65 			return (0);
   66 	return (cm[*us1] - cm[*--us2]);
   67 }
   68 
   69 int
   70 strncasecmp(s1, s2, n)
   71 	const char *s1, *s2;
   72 	register n;
   73 {
   74 	if (n != 0) {
   75 		register const u_char *cm = charmap,
   76 				*us1 = (const u_char *)s1,
   77 				*us2 = (const u_char *)s2;
   78 
   79 		do {
   80 			if (cm[*us1] != cm[*us2++])
   81 				return (cm[*us1] - cm[*--us2]);
   82 			if (*us1++ == '\0')
   83 				break;
   84 		} while (--n != 0);
   85 	}
   86 	return (0);
   87 }