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_search_list *searches;
struct ldap_entry_wrapper *entries;
int allocated_entries;
int nentries;
short user_matches;
short host_matches;
int user_matches;
int host_matches;
};
#define ALLOCATION_INCREMENT 100
struct ldap_config_table {
const char *conf_str; /* config file string */
@@ -1740,6 +1742,7 @@ sudo_ldap_result_alloc(void)
result->searches = NULL;
result->nentries = 0;
result->entries = NULL;
result->allocated_entries = 0;
result->user_matches = FALSE;
result->host_matches = FALSE;
return(result);
@@ -2161,11 +2164,17 @@ sudo_ldap_result_add_entry(struct ldap_result *lres, LDAPMessage *entry)
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? */
lres->nentries++;
lres->entries = erealloc3(lres->entries, lres->nentries,
sizeof(lres->entries[0]));
/*
* Enlarge the array of entry wrappers as needed, preallocating blocks
* of 100 entries to save on allocation time.
*/
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].order = order;