From: Kurt Zeilenga Date: Thu, 17 Jan 2002 00:18:57 +0000 (+0000) Subject: replace strcasechr with bvcasechr X-Git-Tag: LDBM_PRE_GIANT_RWLOCK~100 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=32b955cfc571641298c80edec79b3bfb3b93902c;p=openldap replace strcasechr with bvcasechr --- diff --git a/servers/slapd/schema_init.c b/servers/slapd/schema_init.c index 0a04ec6d0b..ebc41fa68f 100644 --- a/servers/slapd/schema_init.c +++ b/servers/slapd/schema_init.c @@ -81,18 +81,20 @@ #define caseExactMatchOID "2.5.13.5" #define caseExactSubstringsMatchOID "2.5.13.7" -static char *strcasechr( const char *str, int c ) +static char *bvcasechr( struct berval *bv, int c, ber_len_t *len ) { - char *lower = strchr( str, TOLOWER(c) ); - char *upper = strchr( str, TOUPPER(c) ); - - if( lower && upper ) { - return lower < upper ? lower : upper; - } else if ( lower ) { - return lower; - } else { - return upper; + ber_len_t i; + int lower = TOLOWER( c ); + int upper = TOUPPER( c ); + + for( i=0; i < bv->bv_len; i++ ) { + if( upper == bv->bv_val[i] || lower == bv->bv_val[i] ) { + *len = i; + return &bv->bv_val[i]; + } } + + return NULL; } static int @@ -2724,14 +2726,14 @@ retry: continue; } - p = strcasechr( left.bv_val, *sub->sa_any[i].bv_val ); + p = bvcasechr( &left, *sub->sa_any[i].bv_val, &idx ); if( p == NULL ) { match = 1; goto done; } - idx = p - left.bv_val; + assert( idx < left.bv_len ); if( idx >= left.bv_len ) { /* this shouldn't happen */ return LDAP_OTHER;