/* has language tag */
attr_mask( be->be_private, desc->ad_type->sat_ad, &mask );
- if( !( mask & SLAP_INDEX_NOLANG ) ) {
+ if( mask && ( mask ^ SLAP_INDEX_NOLANG ) ) {
*atname = desc->ad_type->sat_cname;
*dbname = desc->ad_type->sat_cname.bv_val;
return mask;
}
/* see if supertype defined mask for its subtypes */
- for( at = desc->ad_type; at != NULL ; at = at->sat_sup ) {
+ for( at = desc->ad_type->sat_sup; at != NULL ; at = at->sat_sup ) {
/* If no AD, we've never indexed this type */
if (!at->sat_ad)
continue;
attr_mask( be->be_private, at->sat_ad, &mask );
- if( mask & SLAP_INDEX_AUTO_SUBTYPES ) {
- *atname = desc->ad_type->sat_cname;
- *dbname = at->sat_cname.bv_val;
- return mask;
- }
- if( !( mask & SLAP_INDEX_NOSUBTYPES ) ) {
+ if( mask && ( mask ^ SLAP_INDEX_NOSUBTYPES ) ) {
*atname = at->sat_cname;
*dbname = at->sat_cname.bv_val;
return mask;
}
-
- if( mask ) break;
}
return 0;
struct berval *lang,
BerVarray vals,
ID id,
- int op,
- char ** dbnamep,
- slap_mask_t *maskp )
+ int op )
{
slap_mask_t mask = 0;
- slap_mask_t tmpmask = 0;
if( type->sat_sup ) {
/* recurse */
(void) index_at_values( be,
type->sat_sup, lang,
- vals, id, op,
- dbnamep, &tmpmask );
+ vals, id, op );
}
/* If this type has no AD, we've never used it before */
}
if( mask ) {
- *dbnamep = type->sat_cname.bv_val;
- } else if ( tmpmask & SLAP_INDEX_AUTO_SUBTYPES ) {
- mask = tmpmask;
- }
-
- if( mask ) {
- indexer( be, *dbnamep,
+ indexer( be, type->sat_cname.bv_val,
&type->sat_cname,
vals, id, op,
mask );
}
if( lang->bv_len ) {
- char *dbname = NULL;
- struct berval lname;
AttributeDescription *desc;
- tmpmask = 0;
- lname.bv_val = NULL;
+ mask = 0;
desc = ad_find_lang(type, lang);
if( desc ) {
- attr_mask( be->be_private, desc, &tmpmask );
- }
-
- if( tmpmask ) {
- dbname = desc->ad_cname.bv_val;
- lname = desc->ad_cname;
- mask = tmpmask;
+ attr_mask( be->be_private, desc, &mask );
}
- if( dbname != NULL ) {
- indexer( be, dbname, &lname,
+ if( mask ) {
+ indexer( be, desc->ad_cname.bv_val, &desc->ad_cname,
vals, id, op,
mask );
- if( !tmpmask ) {
- ch_free( lname.bv_val );
- }
}
}
ID id,
int op )
{
- char *dbname = NULL;
- slap_mask_t mask;
-
(void) index_at_values( be,
desc->ad_type, &desc->ad_lang,
- vals, id, op,
- &dbname, &mask );
+ vals, id, op );
return LDAP_SUCCESS;
}