/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ #include "plstr.h" static const unsigned char uc[] = { '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', ' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', '\177' }; PR_IMPLEMENT(PRIntn) PL_strcasecmp(const char *a, const char *b) { const unsigned char *ua = (const unsigned char *)a; const unsigned char *ub = (const unsigned char *)b; if( ((const char *)0 == a) || (const char *)0 == b ) return (PRIntn)(a-b); while( (uc[*ua] == uc[*ub]) && ('\0' != *a) ) { a++; ua++; ub++; } return (PRIntn)(uc[*ua] - uc[*ub]); } PR_IMPLEMENT(PRIntn) PL_strncasecmp(const char *a, const char *b, PRUint32 max) { const unsigned char *ua = (const unsigned char *)a; const unsigned char *ub = (const unsigned char *)b; if( ((const char *)0 == a) || (const char *)0 == b ) return (PRIntn)(a-b); while( max && (uc[*ua] == uc[*ub]) && ('\0' != *a) ) { a++; ua++; ub++; max--; } if( 0 == max ) return (PRIntn)0; return (PRIntn)(uc[*ua] - uc[*ub]); }