Commit 719e2127 authored by Chen Wei's avatar Chen Wei

re-use sets array allocated during parsing config

parent c4b60be5
...@@ -2585,14 +2585,11 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma ...@@ -2585,14 +2585,11 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
//ipsets->next = daemon->ipsets; //ipsets->next = daemon->ipsets;
daemon->ipsets = ipsets_head.next; daemon->ipsets = ipsets_head.next;
/* TODO */ /* TODO */
struct htree_node *np = NULL; struct htree_node *np = NULL;
struct htree_node *setname = NULL; struct htree_node *setname = NULL;
//struct ipsets_names *obj;
struct ipsets *obj; struct ipsets *obj;
char **ipsets_cur, **newsets, **newsets_cur; char **ipsets_cur;
int i, newsets_size;
if (!daemon->htree_ipsets) if (!daemon->htree_ipsets)
daemon->htree_ipsets = htree_new_node (NULL, 0); daemon->htree_ipsets = htree_new_node (NULL, 0);
...@@ -2600,17 +2597,21 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma ...@@ -2600,17 +2597,21 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
if (!daemon->htree_ipset_names) if (!daemon->htree_ipset_names)
daemon->htree_ipset_names = htree_new_node (NULL, 0); daemon->htree_ipset_names = htree_new_node (NULL, 0);
for (ipsets_cur = sets; *ipsets_cur; ipsets_cur++)
{
setname = htree_find_or_add(daemon->htree_ipset_names, *ipsets_cur);
/* use the ipset name already allocated as htree node label*/
free(*ipsets_cur);
*ipsets_cur = setname->label;
}
/* store ipsets into htree */ /* store ipsets into htree */
for (ipsets = daemon->ipsets; ipsets; ipsets = ipsets->next) for (ipsets = daemon->ipsets; ipsets; ipsets = ipsets->next)
{ {
np = domain_find_or_add (daemon->htree_ipsets, ipsets->domain); np = domain_find_or_add (daemon->htree_ipsets, ipsets->domain);
i = 0;
if (np->ptr) if (np->ptr)
{ {
obj = (struct ipsets *) np->ptr; obj = (struct ipsets *) np->ptr;
for (ipsets_cur = obj->sets; *ipsets_cur; ipsets_cur++)
if (!htree_find(daemon->htree_ipset_names, *ipsets_cur))
i++;
} }
else else
{ {
...@@ -2618,44 +2619,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma ...@@ -2618,44 +2619,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
memset(obj, 0, sizeof(struct ipsets)); memset(obj, 0, sizeof(struct ipsets));
} }
newsets_size = size + i;
newsets = newsets_cur = opt_malloc(sizeof(char *) * newsets_size);
if (obj->sets)
{
for (ipsets_cur = obj->sets; *ipsets_cur; ) {
*newsets_cur++ = *ipsets_cur++;
}
}
for (ipsets_cur = ipsets->sets; *ipsets_cur; ipsets_cur++)
{
setname = htree_find_or_add(daemon->htree_ipset_names, *ipsets_cur);
*newsets_cur++ = setname->label;
}
/*
if (np->ptr) {
old_obj = (struct ipsets *) np->ptr;
free(old_obj->sets);
free(old_obj);
}
*/
if (obj->sets) if (obj->sets)
free(obj->sets); free(obj->sets);
obj->sets = newsets; obj->sets = sets;
obj->domain = np->label;
np->ptr = (void *) obj; np->ptr = (void *) obj;
} }
if (daemon->ipsets->sets)
{
for (ipsets_cur = daemon->ipsets->sets; *ipsets_cur; ipsets_cur++)
free(*ipsets_cur);
free(daemon->ipsets->sets);
}
for (ipsets = daemon->ipsets; ipsets; ) for (ipsets = daemon->ipsets; ipsets; )
{ {
tmp = ipsets->next; tmp = ipsets->next;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment