version 1.1, 2014/07/30 07:55:27
|
version 1.1.1.2, 2019/10/21 14:58:35
|
Line 113 void element_parse_policy(const char *policy)
|
Line 113 void element_parse_policy(const char *policy)
|
xfree(copy); |
xfree(copy); |
} |
} |
|
|
struct element *__lookup_element(struct element_group *group, const char *name, | static struct element *__lookup_element(struct element_group *group, |
uint32_t id, struct element *parent) | const char *name, uint32_t id, |
| struct element *parent) |
{ |
{ |
struct list_head *list; |
struct list_head *list; |
struct element *e; |
struct element *e; |
Line 200 void element_free(struct element *e)
|
Line 201 void element_free(struct element *e)
|
struct attr *a, *an; |
struct attr *a, *an; |
int i; |
int i; |
|
|
if (e->e_group->g_current == e) { |
|
element_select_prev(); |
|
if (e->e_group->g_current == e) |
|
e->e_group->g_current = NULL; |
|
} |
|
|
|
list_for_each_entry_safe(c, cnext, &e->e_childs, e_list) |
list_for_each_entry_safe(c, cnext, &e->e_childs, e_list) |
element_free(c); |
element_free(c); |
|
|
Line 220 void element_free(struct element *e)
|
Line 215 void element_free(struct element *e)
|
list_for_each_entry_safe(a, an, &e->e_attrhash[i], a_list) |
list_for_each_entry_safe(a, an, &e->e_attrhash[i], a_list) |
attr_free(a); |
attr_free(a); |
|
|
if (e->e_group) { | if (e->e_group->g_current == e) { |
list_del(&e->e_list); | element_select_prev(); |
e->e_group->g_nelements--; | if (e->e_group->g_current == e) |
| e->e_group->g_current = NULL; |
} |
} |
|
|
|
list_del(&e->e_list); |
|
e->e_group->g_nelements--; |
|
|
xfree(e->e_name); |
xfree(e->e_name); |
xfree(e); |
xfree(e); |
} |
} |
Line 359 int element_set_usage_attr(struct element *e, const ch
|
Line 358 int element_set_usage_attr(struct element *e, const ch
|
return 0; |
return 0; |
} |
} |
|
|
|
void element_pick_from_policy(struct element_group *g) |
|
{ |
|
if (!list_empty(&allowed)) { |
|
struct policy *p; |
|
|
|
list_for_each_entry(p, &allowed, p_list) { |
|
struct element *e; |
|
|
|
list_for_each_entry(e, &g->g_elements, e_list) { |
|
if (match_mask(p, e->e_name)) { |
|
g->g_current = e; |
|
return; |
|
} |
|
} |
|
} |
|
} |
|
|
|
element_select_first(); |
|
} |
|
|
struct element *element_current(void) |
struct element *element_current(void) |
{ |
{ |
struct element_group *g; |
struct element_group *g; |
Line 366 struct element *element_current(void)
|
Line 385 struct element *element_current(void)
|
if (!(g = group_current())) |
if (!(g = group_current())) |
return NULL; |
return NULL; |
|
|
|
/* |
|
* If no element is picked yet, pick a default interface according to |
|
* the selection policy. |
|
*/ |
if (!g->g_current) |
if (!g->g_current) |
element_select_first(); | element_pick_from_policy(g); |
|
|
return g->g_current; |
return g->g_current; |
} |
} |