Enlarge the array of entry wrappers int blocks of 100 entries to

save on allocation time.  From Andreas Mueller
This commit is contained in:
Todd C. Miller
2010-11-17 18:56:52 -05:00
parent f9353d95ca
commit ef5f73a49f

View File

@@ -156,10 +156,12 @@ struct ldap_entry_wrapper {
struct ldap_result { struct ldap_result {
struct ldap_search_list *searches; struct ldap_search_list *searches;
struct ldap_entry_wrapper *entries; struct ldap_entry_wrapper *entries;
int allocated_entries;
int nentries; int nentries;
short user_matches; int user_matches;
short host_matches; int host_matches;
}; };
#define ALLOCATION_INCREMENT 100
struct ldap_config_table { struct ldap_config_table {
const char *conf_str; /* config file string */ const char *conf_str; /* config file string */
@@ -1740,6 +1742,7 @@ sudo_ldap_result_alloc(void)
result->searches = NULL; result->searches = NULL;
result->nentries = 0; result->nentries = 0;
result->entries = NULL; result->entries = NULL;
result->allocated_entries = 0;
result->user_matches = FALSE; result->user_matches = FALSE;
result->host_matches = FALSE; result->host_matches = FALSE;
return(result); return(result);
@@ -2161,11 +2164,17 @@ sudo_ldap_result_add_entry(struct ldap_result *lres, LDAPMessage *entry)
ldap_value_free_len(bv); ldap_value_free_len(bv);
} }
/* Allocate a new entry_wrapper, fill it in and append to the array. */ /*
/* XXX - realloc each time can be expensive, preallocate? */ * Enlarge the array of entry wrappers as needed, preallocating blocks
lres->nentries++; * of 100 entries to save on allocation time.
lres->entries = erealloc3(lres->entries, lres->nentries, */
sizeof(lres->entries[0])); if (++lres->nentries > lres->allocated_entries) {
lres->allocated_entries += ALLOCATION_INCREMENT;
lres->entries = erealloc3(lres->entries, lres->allocated_entries,
sizeof(lres->entries[0]));
}
/* Fill in the new entry and return it. */
lres->entries[lres->nentries - 1].entry = entry; lres->entries[lres->nentries - 1].entry = entry;
lres->entries[lres->nentries - 1].order = order; lres->entries[lres->nentries - 1].order = order;