Enlarge the array of entry wrappers int blocks of 100 entries to
save on allocation time. From Andreas Mueller
This commit is contained in:
@@ -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,
|
*/
|
||||||
|
if (++lres->nentries > lres->allocated_entries) {
|
||||||
|
lres->allocated_entries += ALLOCATION_INCREMENT;
|
||||||
|
lres->entries = erealloc3(lres->entries, lres->allocated_entries,
|
||||||
sizeof(lres->entries[0]));
|
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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user