diff options
author | wtc%google.com <devnull@localhost> | 2008-06-07 19:20:10 +0000 |
---|---|---|
committer | wtc%google.com <devnull@localhost> | 2008-06-07 19:20:10 +0000 |
commit | 3e90710ef5feaaf36fa32024d57b976c39f4d5f5 (patch) | |
tree | bf366dc48f406b88440b2d06a385064bc12e7c48 | |
parent | 561d44c01ba232a77c7108f9aca20d17ae669486 (diff) | |
download | nspr-hg-3e90710ef5feaaf36fa32024d57b976c39f4d5f5.tar.gz |
Bug 313282: comnined strccmp.c (rev. 3.7) and strcstr.c (rev. 3.8) into
strcase.c so that the functions can share the |uc| table easily.
Modified Files:
Makefile.in
Added Files:
strcase.c
Removed Files:
strccmp.c strcstr.c
-rw-r--r-- | lib/libc/src/Makefile.in | 3 | ||||
-rw-r--r-- | lib/libc/src/strcase.c (renamed from lib/libc/src/strccmp.c) | 88 | ||||
-rw-r--r-- | lib/libc/src/strcstr.c | 124 |
3 files changed, 88 insertions, 127 deletions
diff --git a/lib/libc/src/Makefile.in b/lib/libc/src/Makefile.in index eae038d9..5388f8f2 100644 --- a/lib/libc/src/Makefile.in +++ b/lib/libc/src/Makefile.in @@ -54,13 +54,12 @@ CSRCS =\ strlen.c \ strcpy.c \ strdup.c \ + strcase.c \ strcat.c \ strcmp.c \ - strccmp.c \ strchr.c \ strpbrk.c \ strstr.c \ - strcstr.c \ strtok.c \ base64.c \ plerror.c \ diff --git a/lib/libc/src/strccmp.c b/lib/libc/src/strcase.c index ec877484..f478f582 100644 --- a/lib/libc/src/strccmp.c +++ b/lib/libc/src/strcase.c @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * @@ -113,3 +113,89 @@ PL_strncasecmp(const char *a, const char *b, PRUint32 max) return (PRIntn)(uc[*ua] - uc[*ub]); } + +PR_IMPLEMENT(char *) +PL_strcasestr(const char *big, const char *little) +{ + PRUint32 ll; + + if( ((const char *)0 == big) || ((const char *)0 == little) ) return (char *)0; + if( ((char)0 == *big) || ((char)0 == *little) ) return (char *)0; + + ll = strlen(little); + + for( ; *big; big++ ) + /* obvious improvement available here */ + if( 0 == PL_strncasecmp(big, little, ll) ) + return (char *)big; + + return (char *)0; +} + +PR_IMPLEMENT(char *) +PL_strcaserstr(const char *big, const char *little) +{ + const char *p; + PRUint32 bl, ll; + + if( ((const char *)0 == big) || ((const char *)0 == little) ) return (char *)0; + if( ((char)0 == *big) || ((char)0 == *little) ) return (char *)0; + + bl = strlen(big); + ll = strlen(little); + if( bl < ll ) return (char *)0; + p = &big[ bl - ll ]; + + for( ; p >= big; p-- ) + /* obvious improvement available here */ + if( 0 == PL_strncasecmp(p, little, ll) ) + return (char *)p; + + return (char *)0; +} + +PR_IMPLEMENT(char *) +PL_strncasestr(const char *big, const char *little, PRUint32 max) +{ + PRUint32 ll; + + if( ((const char *)0 == big) || ((const char *)0 == little) ) return (char *)0; + if( ((char)0 == *big) || ((char)0 == *little) ) return (char *)0; + + ll = strlen(little); + if( ll > max ) return (char *)0; + max -= ll; + max++; + + for( ; max && *big; big++, max-- ) + /* obvious improvement available here */ + if( 0 == PL_strncasecmp(big, little, ll) ) + return (char *)big; + + return (char *)0; +} + +PR_IMPLEMENT(char *) +PL_strncaserstr(const char *big, const char *little, PRUint32 max) +{ + const char *p; + PRUint32 ll; + + if( ((const char *)0 == big) || ((const char *)0 == little) ) return (char *)0; + if( ((char)0 == *big) || ((char)0 == *little) ) return (char *)0; + + ll = strlen(little); + + for( p = big; max && *p; p++, max-- ) + ; + + p -= ll; + if( p < big ) return (char *)0; + + for( ; p >= big; p-- ) + /* obvious improvement available here */ + if( 0 == PL_strncasecmp(p, little, ll) ) + return (char *)p; + + return (char *)0; +} diff --git a/lib/libc/src/strcstr.c b/lib/libc/src/strcstr.c deleted file mode 100644 index 63e0dde7..00000000 --- a/lib/libc/src/strcstr.c +++ /dev/null @@ -1,124 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is the Netscape Portable Runtime (NSPR). - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998-2000 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "plstr.h" - -PR_IMPLEMENT(char *) -PL_strcasestr(const char *big, const char *little) -{ - PRUint32 ll; - - if( ((const char *)0 == big) || ((const char *)0 == little) ) return (char *)0; - if( ((char)0 == *big) || ((char)0 == *little) ) return (char *)0; - - ll = strlen(little); - - for( ; *big; big++ ) - /* obvious improvement available here */ - if( 0 == PL_strncasecmp(big, little, ll) ) - return (char *)big; - - return (char *)0; -} - -PR_IMPLEMENT(char *) -PL_strcaserstr(const char *big, const char *little) -{ - const char *p; - PRUint32 bl, ll; - - if( ((const char *)0 == big) || ((const char *)0 == little) ) return (char *)0; - if( ((char)0 == *big) || ((char)0 == *little) ) return (char *)0; - - bl = strlen(big); - ll = strlen(little); - if( bl < ll ) return (char *)0; - p = &big[ bl - ll ]; - - for( ; p >= big; p-- ) - /* obvious improvement available here */ - if( 0 == PL_strncasecmp(p, little, ll) ) - return (char *)p; - - return (char *)0; -} - -PR_IMPLEMENT(char *) -PL_strncasestr(const char *big, const char *little, PRUint32 max) -{ - PRUint32 ll; - - if( ((const char *)0 == big) || ((const char *)0 == little) ) return (char *)0; - if( ((char)0 == *big) || ((char)0 == *little) ) return (char *)0; - - ll = strlen(little); - if( ll > max ) return (char *)0; - max -= ll; - max++; - - for( ; max && *big; big++, max-- ) - /* obvious improvement available here */ - if( 0 == PL_strncasecmp(big, little, ll) ) - return (char *)big; - - return (char *)0; -} - -PR_IMPLEMENT(char *) -PL_strncaserstr(const char *big, const char *little, PRUint32 max) -{ - const char *p; - PRUint32 ll; - - if( ((const char *)0 == big) || ((const char *)0 == little) ) return (char *)0; - if( ((char)0 == *big) || ((char)0 == *little) ) return (char *)0; - - ll = strlen(little); - - for( p = big; max && *p; p++, max-- ) - ; - - p -= ll; - if( p < big ) return (char *)0; - - for( ; p >= big; p-- ) - /* obvious improvement available here */ - if( 0 == PL_strncasecmp(p, little, ll) ) - return (char *)p; - - return (char *)0; -} |