Diff for /embedaddon/bmon/src/element.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.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;
 }  }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>