12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 1987 Regents of the University of California.
32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * All rights reserved.
42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms are permitted
62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * provided that this notice is preserved and that due credit is given
72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * to the University of California at Berkeley. The name of the University
82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * may not be used to endorse or promote products derived from this
92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * software without specific written prior permission. This software
102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * is provided ``as is'' without express or implied warranty.
112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H
142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h"
152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif
162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h>
182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h"
202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This array is designed for mapping upper and lower case letter
232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * together for a case independent comparison.  The mappings are
242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * based upon ascii character sequences.
252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
2653f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const u_char charmap[] = {
272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	'\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint
622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstrcasecmp(s1, s2)
632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	const char *s1, *s2;
642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{
6553f17a9db278d33517d9888dd77848f554522a38JP Abgrall	register const u_char *cm = charmap,
662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			*us1 = (u_char *)s1,
672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			*us2 = (u_char *)s2;
682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	while (cm[*us1] == cm[*us2++])
702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		if (*us1++ == '\0')
712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			return(0);
722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	return(cm[*us1] - cm[*--us2]);
732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}
742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint
762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstrncasecmp(s1, s2, n)
772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	const char *s1, *s2;
782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	register int n;
792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{
8053f17a9db278d33517d9888dd77848f554522a38JP Abgrall	register const u_char *cm = charmap,
812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			*us1 = (u_char *)s1,
822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			*us2 = (u_char *)s2;
832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	while (--n >= 0 && cm[*us1] == cm[*us2++])
852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		if (*us1++ == '\0')
862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project			return(0);
872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	return(n < 0 ? 0 : cm[*us1] - cm[*--us2]);
882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}
89