Update to new avl/list iteration macros
authorHenning Rogge <hrogge@googlemail.com>
Tue, 28 Dec 2010 13:07:17 +0000 (14:07 +0100)
committerHenning Rogge <hrogge@googlemail.com>
Tue, 28 Dec 2010 13:07:17 +0000 (14:07 +0100)
53 files changed:
lib/bmf/src/NetworkInterfaces.c
lib/cl_roam/src/cl_roam.c
lib/debuginfo/src/olsrd_debuginfo.c
lib/debuginfo/src/olsrd_debuginfo.h
lib/dot_draw/src/olsrd_dot_draw.c
lib/httpinfo/src/olsrd_httpinfo.c
lib/lq_etx_ff/src/lq_plugin_etx_ff.c
lib/mdns/src/mdns.c
lib/nameservice/src/mapwrite.c
lib/nameservice/src/nameservice.c
lib/obamp/src/obamp.c
lib/quagga/src/quagga.c
lib/txtinfo/src/olsrd_txtinfo.c
src/common/avl.h
src/common/list.h
src/defs.h
src/duplicate_set.c
src/duplicate_set.h
src/hna_set.c
src/hna_set.h
src/interfaces.c
src/interfaces.h
src/link_set.c
src/link_set.h
src/lq_mpr.c
src/main.c
src/mid_set.c
src/mid_set.h
src/neighbor_table.c
src/neighbor_table.h
src/net_olsr.c
src/net_olsr.h
src/olsr.c
src/olsr_cfg_gen.c
src/olsr_comport.c
src/olsr_comport_http.c
src/olsr_comport_http.h
src/olsr_comport_txt.c
src/olsr_cookie.c
src/olsr_cookie.h
src/olsr_ip_acl.c
src/olsr_ip_prefix_list.c
src/olsr_ip_prefix_list.h
src/olsr_spf.c
src/plugin_loader.c
src/plugin_loader.h
src/process_routes.c
src/routing_table.c
src/routing_table.h
src/scheduler.c
src/scheduler.h
src/tc_set.c
src/tc_set.h

index d695397..cf55826 100644 (file)
@@ -387,8 +387,7 @@ FindNeighbors(struct TBestNeighbors *neighbors,
               struct TBmfInterface *intf,
               union olsr_ip_addr *source, union olsr_ip_addr *forwardedBy, union olsr_ip_addr *forwardedTo, int *nPossibleNeighbors)
 {
-  struct link_entry *walker;
-  struct list_iterator iterator;
+  struct link_entry *walker, *iterator;
   olsr_linkcost previousLinkEtx = LINK_COST_BROKEN;
   olsr_linkcost bestEtx = LINK_COST_BROKEN;
 
index 3e8861d..87e2894 100644 (file)
@@ -690,8 +690,7 @@ static void* check_neighbour_host(void* neighbour) {
 }
 
 static void spread_host(struct guest_client * host) {
-  struct interface *ifp;
-  struct list_iterator iterator;
+  struct interface *ifp, *iterator;
   uint8_t msg_buffer[MAXMESSAGESIZE - OLSR_HEADERSIZE] __attribute__ ((aligned));
   uint8_t *curr = msg_buffer;
   uint8_t *length_field, *last;
@@ -738,8 +737,7 @@ static void spread_host(struct guest_client * host) {
 // sends packet immedeately!
 void single_hna(union olsr_ip_addr * ip, uint32_t vtime) {
   union olsr_ip_addr subnet;
-  struct interface *ifp;
-  struct list_iterator iterator;
+  struct interface *ifp, *iterator;
   uint8_t msg_buffer[MAXMESSAGESIZE - OLSR_HEADERSIZE] __attribute__ ((aligned));
   uint8_t *curr = msg_buffer;
   uint8_t *length_field, *last;
@@ -784,8 +782,7 @@ static void olsr_event1(void *foo __attribute__ ((unused)) ) {
 }
 
 static void olsr_event2(void *foo  __attribute__ ((unused))) {
-  struct nbr_entry *nbr;
-  struct list_iterator iterator;
+  struct nbr_entry *nbr, *iterator;
 
   OLSR_FOR_ALL_NBR_ENTRIES(nbr, iterator) {
     int rc;
index faaf221..0179b02 100644 (file)
@@ -241,9 +241,8 @@ static struct debug_pkttraffic *get_pkttraffic_entry(union olsr_ip_addr *ip, str
 static void
 update_statistics_ptr(void *data __attribute__ ((unused)))
 {
-  struct debug_msgtraffic *msg;
-  struct debug_pkttraffic *pkt;
-  struct list_iterator iterator;
+  struct debug_msgtraffic *msg, *msg_iterator;
+  struct debug_pkttraffic *pkt, *pkt_iterator;
   uint32_t last_slot, i;
 
   last_slot = current_slot;
@@ -253,7 +252,7 @@ update_statistics_ptr(void *data __attribute__ ((unused)))
   }
 
   /* move data from "current" template to slot array */
-  OLSR_FOR_ALL_MSGTRAFFIC_ENTRIES(msg, iterator) {
+  OLSR_FOR_ALL_MSGTRAFFIC_ENTRIES(msg, msg_iterator) {
     /* subtract old values from node count and total count */
     for (i=0; i<DTR_MSG_COUNT; i++) {
       msg->total.data[i] -= msg->traffic[current_slot].data[i];
@@ -278,7 +277,7 @@ update_statistics_ptr(void *data __attribute__ ((unused)))
     }
   }
 
-  OLSR_FOR_ALL_PKTTRAFFIC_ENTRIES(pkt, iterator) {
+  OLSR_FOR_ALL_PKTTRAFFIC_ENTRIES(pkt, pkt_iterator) {
     /* subtract old values from node count and total count */
     for (i=0; i<DTR_PKT_COUNT; i++) {
       pkt->total.data[i] -= pkt->traffic[current_slot].data[i];
@@ -397,8 +396,7 @@ static enum olsr_txtcommand_result
 debuginfo_msgstat(struct comport_connection *con,
     const char *cmd __attribute__ ((unused)), const char *param __attribute__ ((unused)))
 {
-  struct debug_msgtraffic *tr;
-  struct list_iterator iterator;
+  struct debug_msgtraffic *tr, *iterator;
 
   if (abuf_appendf(&con->out, "Slot size: %d seconds\tSlot count: %d\n", traffic_interval, traffic_slots) < 0) {
     return ABUF_ERROR;
@@ -471,8 +469,7 @@ static enum olsr_txtcommand_result
 debuginfo_pktstat(struct comport_connection *con,
     const char *cmd __attribute__ ((unused)), const char *param __attribute__ ((unused)))
 {
-  struct debug_pkttraffic *tr;
-  struct list_iterator iterator;
+  struct debug_pkttraffic *tr, *iterator;
 
   if (abuf_appendf(&con->out, "Slot size: %d seconds\tSlot count: %d\n", traffic_interval, traffic_slots) < 0) {
     return ABUF_ERROR;
@@ -533,8 +530,7 @@ debuginfo_pktstat(struct comport_connection *con,
 }
 
 static INLINE bool debuginfo_print_cookies_mem(struct autobuf *buf) {
-  struct olsr_cookie_info *c;
-  struct list_iterator iterator;
+  struct olsr_cookie_info *c, *iterator;
 
   OLSR_FOR_ALL_COOKIES(c, iterator) {
     if (abuf_appendf(buf, "%-25s (MEMORY) size: %lu usage: %u freelist: %u\n",
@@ -546,8 +542,7 @@ static INLINE bool debuginfo_print_cookies_mem(struct autobuf *buf) {
 }
 
 static INLINE bool debuginfo_print_cookies_timer(struct autobuf *buf) {
-  struct olsr_timer_info *t;
-  struct list_iterator iterator;
+  struct olsr_timer_info *t, *iterator;
 
   OLSR_FOR_ALL_TIMERS(t, iterator) {
     if (abuf_appendf(buf, "%-25s (TIMER) usage: %u changes: %u\n",
index 7ba3312..02b2991 100644 (file)
@@ -100,8 +100,8 @@ struct debug_pkttraffic {
   struct debug_pkttraffic_count traffic[0];
 };
 
-#define OLSR_FOR_ALL_MSGTRAFFIC_ENTRIES(tr, iterator) avl_for_each_element_safe(&stat_msg_tree, tr, node, iterator.loop, iterator.safe)
-#define OLSR_FOR_ALL_PKTTRAFFIC_ENTRIES(tr, iterator) avl_for_each_element_safe(&stat_pkt_tree, tr, node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_MSGTRAFFIC_ENTRIES(tr, iterator) avl_for_each_element_safe(&stat_msg_tree, tr, node, iterator)
+#define OLSR_FOR_ALL_PKTTRAFFIC_ENTRIES(tr, iterator) avl_for_each_element_safe(&stat_pkt_tree, tr, node, iterator)
 
 #endif
 
index b25ae0e..a889cd3 100644 (file)
@@ -262,23 +262,23 @@ pcf_event(int ipc_connection, int chgs_neighborhood, int chgs_topology, int chgs
   int res = 0;
 
   if (chgs_neighborhood || chgs_topology || chgs_hna) {
-    struct nbr_entry *neighbor_table_tmp;
-    struct tc_entry *tc;
-    struct ip_prefix_entry *hna;
-    struct list_iterator iterator, iterator2;
+    struct nbr_entry *neighbor_table_tmp, *nbr_iterator;
+    struct tc_entry *tc, *tc_iterator;
+    struct hna_net *hna, *hna_iterator;
+    struct ip_prefix_entry *prefix, *prefix_iterator;
 
     /* Print tables to IPC socket */
     ipc_send_str(ipc_connection, "digraph topology\n{\n");
 
     /* Neighbors */
-    OLSR_FOR_ALL_NBR_ENTRIES(neighbor_table_tmp, iterator) {
+    OLSR_FOR_ALL_NBR_ENTRIES(neighbor_table_tmp, nbr_iterator) {
       ipc_print_neigh_link(ipc_connection, neighbor_table_tmp);
     }
 
     /* Topology */
-    OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-      struct tc_edge_entry *tc_edge;
-      OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, iterator2) {
+    OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
+      struct tc_edge_entry *tc_edge, *edge_iterator;
+      OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, edge_iterator) {
         if (tc_edge->edge_inv) {
           ipc_print_tc_link(ipc_connection, tc, tc_edge);
         }
@@ -286,17 +286,16 @@ pcf_event(int ipc_connection, int chgs_neighborhood, int chgs_topology, int chgs
     }
 
     /* HNA entries */
-    OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
+    OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
       /* Check all networks */
-      struct hna_net *tmp_net;
-      OLSR_FOR_ALL_TC_HNA_ENTRIES(tc, tmp_net, iterator2) {
-        ipc_print_net(ipc_connection, &tc->addr, &tmp_net->hna_prefix);
+      OLSR_FOR_ALL_TC_HNA_ENTRIES(tc, hna, hna_iterator) {
+        ipc_print_net(ipc_connection, &tc->addr, &hna->hna_prefix);
       }
     }
 
     /* Local HNA entries */
-    OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, hna, iterator) {
-      ipc_print_net(ipc_connection, &olsr_cnf->router_id, &hna->net);
+    OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, prefix, prefix_iterator) {
+      ipc_print_net(ipc_connection, &olsr_cnf->router_id, &prefix->net);
     }
       ipc_send_str(ipc_connection, "}\n\n");
 
index 5ccac0a..731f94e 100644 (file)
@@ -771,8 +771,7 @@ build_route(struct autobuf *abuf, const struct rt_entry *rt)
 static void
 build_routes_body(struct autobuf *abuf)
 {
-  struct rt_entry *rt;
-  struct list_iterator iterator;
+  struct rt_entry *rt, *iterator;
 
   const char *colspan = resolve_ip_addresses ? " colspan=\"2\"" : "";
   section_title(abuf, "OLSR Routes in Kernel");
@@ -904,8 +903,7 @@ build_config_body(struct autobuf *abuf)
 
   section_title(abuf, "Announced HNA entries");
   if (list_is_empty(&olsr_cnf->hna_entries)) {
-    struct ip_prefix_entry *hna;
-    struct list_iterator iterator;
+    struct ip_prefix_entry *hna, *iterator;
 
     abuf_puts(abuf, "<tr><th>Network</th></tr>\n");
     OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, hna, iterator) {
@@ -921,9 +919,8 @@ build_config_body(struct autobuf *abuf)
 static void
 build_neigh_body(struct autobuf *abuf)
 {
-  struct nbr_entry *neigh;
-  struct link_entry *lnk;
-  struct list_iterator iterator, iterator2;
+  struct nbr_entry *neigh, *neigh_iterator;
+  struct link_entry *lnk, *lnk_iterator;
   size_t i;
   const char *colspan = resolve_ip_addresses ? " colspan=\"2\"" : "";
 
@@ -937,7 +934,7 @@ build_neigh_body(struct autobuf *abuf)
   abuf_puts(abuf, "</tr>\n");
 
   /* Link set */
-  OLSR_FOR_ALL_LINK_ENTRIES(lnk, iterator) {
+  OLSR_FOR_ALL_LINK_ENTRIES(lnk, lnk_iterator) {
     char lqbuffer[LQTEXT_MAXLENGTH];
     abuf_puts(abuf, "<tr>");
     build_ipaddr_with_link(abuf, &lnk->local_iface_addr, -1);
@@ -957,8 +954,8 @@ build_neigh_body(struct autobuf *abuf)
                "<tr><th%s>IP Address</th><th>SYM</th><th>MPR</th><th>MPRS</th><th>Willingness</th><th>2 Hop Neighbors</th></tr>\n",
                colspan);
   /* Neighbors */
-  OLSR_FOR_ALL_NBR_ENTRIES(neigh, iterator) {
-    struct nbr_con *connector;
+  OLSR_FOR_ALL_NBR_ENTRIES(neigh, neigh_iterator) {
+    struct nbr_con *connector, *con_iterator;
     int thop_cnt;
     abuf_puts(abuf, "<tr>");
     build_ipaddr_with_link(abuf, &neigh->nbr_addr, -1);
@@ -975,7 +972,7 @@ build_neigh_body(struct autobuf *abuf)
     abuf_puts(abuf, "<td><select>\n" "<option>IP ADDRESS</option>\n");
 
     thop_cnt = 0;
-    OLSR_FOR_ALL_NBR_CON_ENTRIES(neigh, connector, iterator2) {
+    OLSR_FOR_ALL_NBR_CON_ENTRIES(neigh, connector, con_iterator) {
       struct ipaddr_str strbuf;
       abuf_appendf(abuf, "<option>%s</option>\n", olsr_ip_to_string(&strbuf, &connector->nbr2->nbr2_addr));
       thop_cnt++;
@@ -989,8 +986,7 @@ build_neigh_body(struct autobuf *abuf)
 static void
 build_topo_body(struct autobuf *abuf)
 {
-  struct tc_entry *tc;
-  struct list_iterator iterator, iterator2;
+  struct tc_entry *tc, *tc_iterator;
   const char *colspan = resolve_ip_addresses ? " colspan=\"2\"" : "";
 
   section_title(abuf, "Topology Entries");
@@ -998,9 +994,9 @@ build_topo_body(struct autobuf *abuf)
   abuf_puts(abuf, "<th colspan=\"3\">Linkcost</th>");
   abuf_puts(abuf, "</tr>\n");
 
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-    struct tc_edge_entry *tc_edge;
-    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, iterator2) {
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
+    struct tc_edge_entry *tc_edge, *edge_iterator;
+    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, edge_iterator) {
       if (tc_edge->edge_inv) {
         char lqbuffer[LQTEXT_MAXLENGTH];
         abuf_puts(abuf, "<tr>");
@@ -1019,21 +1015,20 @@ build_topo_body(struct autobuf *abuf)
 static void
 build_mid_body(struct autobuf *abuf)
 {
-  struct tc_entry *tc;
-  struct list_iterator iterator, iterator2;
+  struct tc_entry *tc, *tc_iterator;
   const char *colspan = resolve_ip_addresses ? " colspan=\"2\"" : "";
 
   section_title(abuf, "MID Entries");
   abuf_appendf(abuf, "<tr><th%s>Main Address</th><th>Aliases</th></tr>\n", colspan);
 
   /* MID */
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-    struct mid_entry *alias;
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
+    struct mid_entry *alias, *alias_iterator;
     abuf_puts(abuf, "<tr>");
     build_ipaddr_with_link(abuf, &tc->addr, -1);
     abuf_puts(abuf, "<td><select>\n<option>IP ADDRESS</option>\n");
 
-    OLSR_FOR_ALL_TC_MID_ENTRIES(tc, alias, iterator2) {
+    OLSR_FOR_ALL_TC_MID_ENTRIES(tc, alias, alias_iterator) {
       struct ipaddr_str strbuf;
       abuf_appendf(abuf, "<option>%s</option>\n", olsr_ip_to_string(&strbuf, &alias->mid_alias_addr));
     }
index af8cb5e..72efa18 100644 (file)
@@ -196,11 +196,10 @@ lq_etxff_packet_parser(struct olsr_packet *pkt, uint8_t *binary __attribute__ ((
 static void
 lq_etxff_timer(void __attribute__ ((unused)) * context)
 {
-  struct link_entry *link;
-  struct list_iterator iterator;
-  struct nbr_entry *nbr;
+  struct link_entry *link, *link_iterator;
+  struct nbr_entry *nbr, *nbr_iterator;
 
-  OLSR_FOR_ALL_LINK_ENTRIES(link, iterator) {
+  OLSR_FOR_ALL_LINK_ENTRIES(link, link_iterator) {
     struct lq_etxff_link_entry *lq_link;
     uint32_t ratio;
     uint16_t i, received, lost;
@@ -259,7 +258,7 @@ lq_etxff_timer(void __attribute__ ((unused)) * context)
     link->linkcost = lq_etxff_calc_link_entry_cost(link);
   }
 
-  OLSR_FOR_ALL_NBR_ENTRIES(nbr, iterator) {
+  OLSR_FOR_ALL_NBR_ENTRIES(nbr, nbr_iterator) {
     olsr_neighbor_cost_may_changed(nbr);
   }
 }
index b6f28b0..d3df183 100644 (file)
@@ -182,8 +182,7 @@ olsr_mdns_gen(unsigned char *packet, int len)
   uint8_t buffer[10240];
   int aligned_size;
   struct olsr_message msg;
-  struct interface *ifn;
-  struct list_iterator iterator;
+  struct interface *ifn, *iterator;
   uint8_t *sizeptr, *curr;
   
   aligned_size=len;
index 90e8417..62ad50f 100644 (file)
@@ -70,7 +70,7 @@ lookup_position_latlon(union olsr_ip_addr *ip)
 {
   int hash;
   struct db_entry *entry;
-  struct list_entity *list_head, *loop;
+  struct list_entity *list_head;
 
   if (olsr_ipcmp(ip, &olsr_cnf->router_id) == 0) {
     return my_latlon_str;
@@ -79,7 +79,7 @@ lookup_position_latlon(union olsr_ip_addr *ip)
   for (hash = 0; hash < HASHSIZE; hash++) {
     list_head = &latlon_list[hash];
 
-    list_for_each_element(list_head, entry, db_list, loop) {
+    list_for_each_element(list_head, entry, db_list) {
       if (entry->names && olsr_ipcmp(&entry->originator, ip) == 0) {
         return entry->names->name;
       }
@@ -98,9 +98,9 @@ mapwrite_work(FILE * fmap)
   struct olsr_if_config *ifs;
   union olsr_ip_addr ip;
   struct ipaddr_str strbuf1, strbuf2;
-  struct tc_entry *tc;
-  struct tc_edge_entry *tc_edge;
-  struct list_iterator iterator, iterator2;
+  struct tc_entry *tc, *tc_iterator;
+  struct tc_edge_entry *tc_edge, *edge_iterator;
+
   if (!my_names || !fmap)
     return;
 
@@ -124,9 +124,9 @@ mapwrite_work(FILE * fmap)
     }
   }
 
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-    struct mid_entry *alias;
-    OLSR_FOR_ALL_TC_MID_ENTRIES(tc, alias, iterator2) {
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
+    struct mid_entry *alias, *alias_iterator;
+    OLSR_FOR_ALL_TC_MID_ENTRIES(tc, alias, alias_iterator) {
       if (0 > fprintf(fmap, "Mid('%s','%s');\n",
                       olsr_ip_to_string(&strbuf1, &tc->addr), olsr_ip_to_string(&strbuf2, &alias->mid_alias_addr))) {
         return;
@@ -143,10 +143,10 @@ mapwrite_work(FILE * fmap)
   }
   for (hash = 0; hash < HASHSIZE; hash++) {
     struct db_entry *entry;
-    struct list_entity *list_head, *loop;
+    struct list_entity *list_head;
 
     list_head = &latlon_list[hash];
-    list_for_each_element(list_head, entry, db_list, loop) {
+    list_for_each_element(list_head, entry, db_list) {
       if (NULL != entry->names) {
         if (0 > fprintf(fmap, "Node('%s',%s,'%s','%s');\n",
                         olsr_ip_to_string(&strbuf1, &entry->originator),
@@ -158,8 +158,8 @@ mapwrite_work(FILE * fmap)
     }
   }
 
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, iterator2) {
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
+    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, edge_iterator) {
       char *lla = lookup_position_latlon(&tc->addr);
       char *llb = lookup_position_latlon(&tc_edge->T_dest_addr);
       if (NULL != lla && NULL != llb) {
index 12c00c9..77052ec 100644 (file)
@@ -525,15 +525,15 @@ name_destructor(void)
 void
 free_all_listold_entries(struct list_entity *this_db_list)
 {
-  struct db_entry *db;
-  struct list_entity *list_head, *loop, *safe;
+  struct db_entry *db, *iterator;
+  struct list_entity *list_head;
 
   int i;
 
   for (i = 0; i < HASHSIZE; i++) {
     list_head = &this_db_list[i];
 
-    list_for_each_element_safe(list_head, db, db_list, loop, safe) {
+    list_for_each_element_safe(list_head, db, db_list, iterator) {
       olsr_namesvc_delete_db_entry(db);
     }
   }
@@ -614,8 +614,7 @@ olsr_namesvc_gen(void *foo __attribute__ ((unused)))
   /* send buffer: huge */
   uint8_t buffer[10240];
   struct olsr_message msg;
-  struct interface *ifn;
-  struct list_iterator iterator;
+  struct interface *ifn, *iterator;
   int namesize;
   uint8_t *curr, *sizeptr;
 
@@ -934,7 +933,7 @@ insert_new_name_in_list(union olsr_ip_addr *originator,
 {
   int hash;
   struct db_entry *entry;
-  struct list_entity *list_head, *loop;
+  struct list_entity *list_head;
 
   bool entry_found = false;
 
@@ -943,7 +942,7 @@ insert_new_name_in_list(union olsr_ip_addr *originator,
   /* find the entry for originator, if there is already one */
   list_head = &this_list[hash];
 
-  list_for_each_element(list_head, entry, db_list, loop) {
+  list_for_each_element(list_head, entry, db_list) {
     if (olsr_ipcmp(originator, &entry->originator) == 0) {
 #if !defined REMOVE_LOG_DEBUG
       struct ipaddr_str strbuf;
@@ -1041,16 +1040,15 @@ write_hosts_file(void)
   int hash;
   struct name_entry *name;
   struct db_entry *entry;
-  struct list_entity *list_head, *loop;
+  struct list_entity *list_head;
   FILE *hosts;
   FILE *add_hosts;
   int c = 0;
   time_t currtime;
 
 #ifdef MID_ENTRIES
-  struct mid_entry *alias;
+  struct mid_entry *alias, *iterator;
   struct tc_entry *tc;
-  struct list_iterator iterator;
 #endif
 
   if (!name_table_changed)
@@ -1093,7 +1091,7 @@ write_hosts_file(void)
   for (hash = 0; hash < HASHSIZE; hash++) {
     list_head = &name_list[hash];
 
-    list_for_each_element(list_head, entry, db_list, loop) {
+    list_for_each_element(list_head, entry, db_list) {
       for (name = entry->names; name != NULL; name = name->next) {
         struct ipaddr_str strbuf1, strbuf2;
         OLSR_DEBUG(LOG_PLUGINS, "%s\t%s%s\t#%s\n",
@@ -1169,7 +1167,7 @@ write_services_file(bool writemacs)
   int hash;
   struct name_entry *name;
   struct db_entry *entry;
-  struct list_entity *list_head, *loop;
+  struct list_entity *list_head;
   FILE *file;
   time_t currtime;
 
@@ -1198,7 +1196,7 @@ write_services_file(bool writemacs)
   for (hash = 0; hash < HASHSIZE; hash++) {
     list_head = writemacs ? &mac_list[hash] : &service_list[hash];
 
-    list_for_each_element(list_head, entry, db_list, loop) {
+    list_for_each_element(list_head, entry, db_list) {
       for (name = entry->names; name != NULL; name = name->next) {
         struct ipaddr_str strbuf;
         OLSR_DEBUG(LOG_PLUGINS, "%s\t\t#%s\n", name->name, olsr_ip_to_string(&strbuf, &entry->originator));
@@ -1288,7 +1286,7 @@ write_resolv_file(void)
   int hash;
   struct name_entry *name;
   struct db_entry *entry;
-  struct list_entity *list_head, *loop;
+  struct list_entity *list_head;
   struct rt_entry *route;
   static struct rt_entry *nameserver_routes[NAMESERVER_COUNT + 1];
   FILE *resolv;
@@ -1304,7 +1302,7 @@ write_resolv_file(void)
   for (hash = 0; hash < HASHSIZE; hash++) {
     list_head = &forwarder_list[hash];
 
-    list_for_each_element(list_head, entry, db_list, loop) {
+    list_for_each_element(list_head, entry, db_list) {
       for (name = entry->names; name != NULL; name = name->next) {
 #if !defined REMOVE_LOG_DEBUG
         struct ipaddr_str strbuf;
@@ -1416,9 +1414,8 @@ free_name_entry_list(struct name_entry **list)
 bool
 allowed_ip(const union olsr_ip_addr *addr)
 {
-  struct ip_prefix_entry *hna;
-  struct list_iterator iterator;
-  struct interface *iface;
+  struct ip_prefix_entry *hna, *prefix_iterator;
+  struct interface *iface, *ifp_iterator;
   union olsr_ip_addr tmp_ip, tmp_msk;
 #if !defined REMOVE_LOG_DEBUG
   struct ipaddr_str strbuf;
@@ -1426,7 +1423,7 @@ allowed_ip(const union olsr_ip_addr *addr)
 #endif
   OLSR_DEBUG(LOG_PLUGINS, "checking %s\n", olsr_ip_to_string(&strbuf, addr));
 
-  OLSR_FOR_ALL_INTERFACES(iface, iterator) {
+  OLSR_FOR_ALL_INTERFACES(iface, ifp_iterator) {
     OLSR_DEBUG(LOG_PLUGINS, "interface %s\n", olsr_ip_to_string(&strbuf, &iface->ip_addr));
     if (olsr_ipcmp(&iface->ip_addr, addr) == 0) {
       OLSR_DEBUG(LOG_PLUGINS, "MATCHED\n");
@@ -1435,7 +1432,7 @@ allowed_ip(const union olsr_ip_addr *addr)
   }
 
   if (olsr_cnf->ip_version == AF_INET) {
-    OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, hna, iterator) {
+    OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, hna, prefix_iterator) {
       union olsr_ip_addr netmask;
       OLSR_DEBUG(LOG_PLUGINS, "HNA %s\n", olsr_ip_prefix_to_string(&prefixstr, &hna->net));
       if (hna->net.prefix_len == 0) {
@@ -1448,7 +1445,7 @@ allowed_ip(const union olsr_ip_addr *addr)
       }
     }
   } else {
-    OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, hna, iterator) {
+    OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, hna, prefix_iterator) {
       unsigned int i;
       OLSR_DEBUG(LOG_PLUGINS, "HNA %s\n", olsr_ip_prefix_to_string(&prefixstr, &hna->net));
       if (hna->net.prefix_len == 0)
@@ -1586,8 +1583,7 @@ is_latlon_wellformed(const char *latlon_line)
 bool
 get_isdefhna_latlon(void)
 {
-  struct ip_prefix_entry *hna;
-  struct list_iterator iterator;
+  struct ip_prefix_entry *hna, *iterator;
 
   OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, hna, iterator) {
     if (hna->net.prefix_len == 0) {
@@ -1622,13 +1618,13 @@ lookup_name_latlon(union olsr_ip_addr *ip)
 {
   int hash;
   struct db_entry *entry;
-  struct list_entity *list_head, *loop;
+  struct list_entity *list_head;
   struct name_entry *name;
 
   for (hash = 0; hash < HASHSIZE; hash++) {
     list_head = &name_list[hash];
 
-    list_for_each_element(list_head, entry, db_list, loop) {
+    list_for_each_element(list_head, entry, db_list) {
       for (name = entry->names; name != NULL; name = name->next) {
         if (olsr_ipcmp(&name->ip, ip) == 0)
           return name->name;
index ef54fd0..82e1206 100644 (file)
@@ -75,8 +75,8 @@
 #include "common/list.h"
 
 
-#define OLSR_FOR_ALL_OBAMPNODE_ENTRIES(n, iterator) list_for_each_element_safe(&ListOfObampNodes, n, list, iterator.loop, iterator.safe)
-#define OLSR_FOR_ALL_OBAMPSNIFF_ENTRIES(s, iterator) list_for_each_element_safe(&ListOfObampSniffingIf, s, list, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_OBAMPNODE_ENTRIES(n, iterator) list_for_each_element_safe(&ListOfObampNodes, n, list, iterator)
+#define OLSR_FOR_ALL_OBAMPSNIFF_ENTRIES(s, iterator) list_for_each_element_safe(&ListOfObampSniffingIf, s, list, iterator)
 
 struct ObampNodeState *myState;        //Internal state of the OBAMP node
 
@@ -101,9 +101,8 @@ static struct ObampNode *
 select_tree_anchor(void)
 {
 
-  struct ObampNode *tmp;               //temp pointers used when parsing the list
+  struct ObampNode *tmp, *iterator;               //temp pointers used when parsing the list
   struct ObampNode *best;
-  struct list_iterator iterator;
   struct rt_entry *rt;                 //"rt->rt_best->rtp_metric.cost" is the value you are looking for, a 32 bit
 
   unsigned int mincost = 15;
@@ -245,8 +244,7 @@ static int
 CreateObampSniffingInterfaces(void)
 {
 
-  struct ObampSniffingIf *tmp;
-  struct list_iterator iterator;
+  struct ObampSniffingIf *tmp, *iterator;
   OLSR_DEBUG(LOG_PLUGINS, "CreateObampSniffingInterfaces");
 
   if (list_is_empty(&ListOfObampSniffingIf)) {        //if the list is empty
@@ -279,8 +277,7 @@ activate_tree_link(struct OBAMP_tree_link_ack *ack)
 #if !defined(REMOVE_LOG_DEBUG)
   struct ipaddr_str buf;
 #endif
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   if (memcmp(&myState->CoreAddress.v4, &ack->CoreAddress.v4, sizeof(struct in_addr)) != 0) {
     OLSR_DEBUG(LOG_PLUGINS, "Discarding message with no coherent core address");
@@ -405,8 +402,7 @@ tree_link_ack(struct OBAMP_tree_link_req *req)
   struct sockaddr_in si_other;
   struct in_addr addr;
 
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
 #if !defined(REMOVE_LOG_DEBUG)
   struct ipaddr_str buf;
@@ -519,8 +515,7 @@ printObampNodesList(void)
 #if !defined(REMOVE_LOG_DEBUG)
   struct ipaddr_str buf;
 #endif
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   if (list_is_empty(&ListOfObampNodes)) {     //if the list is empty
     return;
@@ -548,8 +543,7 @@ DoIHaveATreeLink(void)
 {
 
   //struct ipaddr_str buf;
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   if (list_is_empty(&ListOfObampNodes)) {     //if the list is empty
     return 0;
@@ -569,8 +563,7 @@ unsolicited_tree_destroy(void *x)
 {
 
   //struct ipaddr_str buf;
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   OLSR_FOR_ALL_OBAMPNODE_ENTRIES(tmp, iterator) {
     if (tmp->isTree == 0) {
@@ -585,8 +578,7 @@ DoIHaveAMeshLink(void)
 {
 
   //struct ipaddr_str buf;
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   OLSR_FOR_ALL_OBAMPNODE_ENTRIES(tmp, iterator) {
     if (tmp->isMesh == 1) {
@@ -599,8 +591,7 @@ DoIHaveAMeshLink(void)
 static void
 reset_tree_links(void)
 {
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   OLSR_DEBUG(LOG_PLUGINS,"Reset Tree Links Now");
 
@@ -622,8 +613,7 @@ deactivate_tree_link(struct OBAMP_tree_destroy *destroy_msg)
 #if !defined(REMOVE_LOG_DEBUG)
   struct ipaddr_str buf;
 #endif
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   if (memcmp(&myState->CoreAddress.v4, &destroy_msg->CoreAddress.v4, sizeof(struct in_addr)) != 0) {
     OLSR_DEBUG(LOG_PLUGINS, "Discarding message with no coherent core address");
@@ -651,8 +641,7 @@ CoreElection(void)
 #if !defined(REMOVE_LOG_DEBUG)
   struct ipaddr_str buf;
 #endif
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
   u_int32_t smallestIP = 0xFFFFFFFF;
 
   //Update my current IP address
@@ -735,8 +724,7 @@ UdpServer(void)
 static void
 decap_data(char *buffer)
 {
-  struct ObampSniffingIf *tmp;         //temp pointers used when parsing the list
-  struct list_iterator iterator;
+  struct ObampSniffingIf *tmp, *iterator;
   unsigned char *ipPacket;
   int stripped_len;
   struct ip *ipHeader;
@@ -790,8 +778,7 @@ static int
 CheckDataFromTreeLink(char *buffer)
 {
 
-  struct ObampNode *tmp;               //temp pointers used when parsing the list
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
   struct OBAMP_data_message4 *data_msg;
 
   data_msg = (struct OBAMP_data_message4 *)buffer;
@@ -816,8 +803,7 @@ static int
 CheckDupData(char *buffer)
 {
 
-  struct ObampNode *tmp;               //temp pointers used when parsing the list
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
   struct OBAMP_data_message4 *data_msg;
 
   data_msg = (struct OBAMP_data_message4 *)buffer;
@@ -852,8 +838,7 @@ forward_obamp_data(char *buffer)
   struct ipaddr_str buf;
   struct ipaddr_str buf2;
 #endif
-  struct ObampNode *tmp;               //temp pointers used when parsing the list
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
   struct OBAMP_data_message4 *data_msg;
   struct sockaddr_in si_other;
   struct in_addr temporary;
@@ -887,8 +872,7 @@ manage_hello(char *packet)
 
   struct OBAMP_hello *hello;
 
-  struct ObampNode *tmp;               //temp pointers used when parsing the list
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   hello = (struct OBAMP_hello *)packet;
 
@@ -923,8 +907,7 @@ manage_tree_create(char *packet)
   struct ipaddr_str buf2;              //buf to print debug infos
 #endif
 
-  struct ObampNode *tmp;               //temp pointers used when parsing the list
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   OLSR_DEBUG(LOG_PLUGINS,"manage_tree_create");
   msg = (struct OBAMP_tree_create *)packet;
@@ -1086,8 +1069,7 @@ addObampNode4(struct in_addr *ipv4, u_int8_t status)
   struct ipaddr_str buf;
 #endif
   struct ObampNode *neighbor_to_add;
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
   neighbor_to_add = olsr_malloc(sizeof(struct ObampNode), "OBAMPNode");
 
 //OLSR_DEBUG(LOG_PLUGINS,"Adding to list node - %s\n",ip4_to_string(&buf,*ipv4));
@@ -1204,8 +1186,7 @@ olsr_obamp_gen(void *packet, int len)
   /* send buffer: huge */
   uint8_t buffer[10240];
   struct olsr_message msg;
-  struct interface *ifn;
-  struct list_iterator iterator;
+  struct interface *ifn, *iterator;
   uint8_t *curr, *sizeptr;
 
   /* fill message */
@@ -1239,8 +1220,7 @@ olsr_obamp_gen(void *packet, int len)
 void
 outer_tree_create(void *x __attribute__ ((unused)))
 {
-  struct ObampNode *tmp;               //temp pointers used when parsing the list
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   if (!((DoIHaveATreeLink() == 0) && (myState->iamcore == 0))) {   //If there are tree links
     return;
@@ -1288,8 +1268,7 @@ tree_create(void *x __attribute__ ((unused)))
 #if !defined(REMOVE_LOG_DEBUG)
   struct ipaddr_str buf;
 #endif
-  struct ObampNode *tmp;               //temp pointers used when parsing the list
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   // Check if I'm core
   if (myState->iamcore != 1) {
@@ -1321,8 +1300,7 @@ mesh_create(void *x __attribute__ ((unused)))
 #if !defined(REMOVE_LOG_DEBUG)
   struct ipaddr_str buf;
 #endif
-  struct ObampNode *tmp;               //temp pointers used when parsing the list
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   struct rt_entry *rt;                 //"rt->rt_best->rtp_metric.cost" is the value you are looking for, a 32 bit
 
@@ -1411,8 +1389,7 @@ purge_nodes(void *x __attribute__ ((unused)))
 #if !defined(REMOVE_LOG_DEBUG)
   struct ipaddr_str buf;
 #endif
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
   int nodesdeleted = 0;
 
   if (myState->TreeHeartBeat > 0) {
@@ -1484,8 +1461,7 @@ EncapFlowInObamp(int skfd, void *data __attribute__ ((unused)), unsigned int fla
 #if !defined(REMOVE_LOG_DEBUG)
   struct ipaddr_str buf;
 #endif
-  struct ObampNode *tmp;
-  struct list_iterator iterator;
+  struct ObampNode *tmp, *iterator;
 
   union olsr_ip_addr dst;              /* Destination IP address in captured packet */
   struct ip *ipHeader;                 /* The IP header inside the captured IP packet */
index b719337..69ccf12 100644 (file)
@@ -97,8 +97,7 @@ void
 zebra_cleanup(void)
 {
   int i;
-  struct rt_entry *tmp;
-  struct list_iterator iterator;
+  struct rt_entry *tmp, *iterator;
 
   if (zebra.options & OPTION_EXPORT) {
     OLSR_FOR_ALL_RT_ENTRIES(tmp, iterator) {
index 185ea76..46ef3fa 100644 (file)
@@ -370,8 +370,7 @@ static enum olsr_txtcommand_result
 txtinfo_neigh(struct comport_connection *con,
     const char *cmd __attribute__ ((unused)), const char *param)
 {
-  struct nbr_entry *neigh;
-  struct list_iterator iterator;
+  struct nbr_entry *neigh, *iterator;
   const char *template;
   int indexLength;
 
@@ -410,8 +409,7 @@ static enum olsr_txtcommand_result
 txtinfo_link(struct comport_connection *con,
     const char *cmd __attribute__ ((unused)), const char *param)
 {
-  struct link_entry *lnk;
-  struct list_iterator iterator;
+  struct link_entry *lnk, *iterator;
   size_t i;
   const char *template;
   int indexLength;
@@ -457,8 +455,7 @@ static enum olsr_txtcommand_result
 txtinfo_routes(struct comport_connection *con,
     const char *cmd __attribute__ ((unused)), const char *param __attribute__ ((unused)))
 {
-  struct rt_entry *rt;
-  struct list_iterator iterator;
+  struct rt_entry *rt, *iterator;
   const char *template;
   int indexLength;
 
@@ -509,8 +506,7 @@ static enum olsr_txtcommand_result
 txtinfo_topology(struct comport_connection *con,
     const char *cmd __attribute__ ((unused)), const char *param __attribute__ ((unused)))
 {
-  struct tc_entry *tc;
-  struct list_iterator iterator, iterator2;
+  struct tc_entry *tc, *iterator;
   const char *template;
   int indexLength;
 
@@ -529,7 +525,7 @@ txtinfo_topology(struct comport_connection *con,
 
   /* Topology */
   OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-    struct tc_edge_entry *tc_edge;
+    struct tc_edge_entry *tc_edge, *edge_iterator;
     olsr_ip_to_string(&buf_localip, &tc->addr);
     if (tc->validity_timer) {
       olsr_milli_to_txt(&buf_vtime, tc->validity_timer->timer_clock - now_times);
@@ -538,7 +534,7 @@ txtinfo_topology(struct comport_connection *con,
       strscpy(buf_vtime.buf, "0.0", sizeof(buf_vtime));
     }
 
-    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, iterator2) {
+    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, edge_iterator) {
       olsr_ip_to_string(&buf_neighip, &tc_edge->T_dest_addr);
       strscpy(buf_virtual, tc_edge->virtual ? OLSR_YES : OLSR_NO, sizeof(buf_virtual));
       if (tc_edge->virtual) {
@@ -624,9 +620,8 @@ static enum olsr_txtcommand_result
 txtinfo_hna(struct comport_connection *con,
     const char *cmd __attribute__ ((unused)), const char *param __attribute__ ((unused)))
 {
-  const struct ip_prefix_entry *hna;
-  struct list_iterator iterator, iterator2;
-  struct tc_entry *tc;
+  const struct ip_prefix_entry *hna, *prefix_iterator;
+  struct tc_entry *tc, *tc_iterator;
   const char *template;
   int indexLength;
 
@@ -643,7 +638,7 @@ txtinfo_hna(struct comport_connection *con,
   }
 
   /* Announced HNA entries */
-  OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, hna, iterator) {
+  OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, hna, prefix_iterator) {
     olsr_ip_to_string(&buf_localip, &olsr_cnf->router_id);
     olsr_ip_prefix_to_string(&buf_destprefix, &hna->net);
     strscpy(buf_vtime.buf, "0.0", sizeof(buf_vtime));
@@ -654,8 +649,8 @@ txtinfo_hna(struct comport_connection *con,
   }
 
   /* HNA entries */
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-    struct hna_net *tmp_net;
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
+    struct hna_net *tmp_net, *hna_iterator;
 
     olsr_ip_to_string(&buf_localip, &tc->addr);
     if (tc->validity_timer) {
@@ -666,7 +661,7 @@ txtinfo_hna(struct comport_connection *con,
     }
 
     /* Check all networks */
-    OLSR_FOR_ALL_TC_HNA_ENTRIES(tc, tmp_net, iterator2) {
+    OLSR_FOR_ALL_TC_HNA_ENTRIES(tc, tmp_net, hna_iterator) {
       olsr_ip_prefix_to_string(&buf_destprefix, &tmp_net->hna_prefix);
 
       if (abuf_templatef(&con->out, template, values_hna, tmpl_indices, indexLength) < 0) {
@@ -685,9 +680,8 @@ static enum olsr_txtcommand_result
 txtinfo_mid(struct comport_connection *con,
     const char *cmd __attribute__ ((unused)), const char *param __attribute__ ((unused)))
 {
-  struct tc_entry *tc;
-  struct interface *interface;
-  struct list_iterator iterator, iterator2;
+  struct tc_entry *tc, *tc_iterator;
+  struct interface *interface, *ifp_iterator;
 
   const char *template;
   int indexLength;
@@ -704,7 +698,7 @@ txtinfo_mid(struct comport_connection *con,
     return ABUF_ERROR;
   }
 
-  OLSR_FOR_ALL_INTERFACES(interface, iterator) {
+  OLSR_FOR_ALL_INTERFACES(interface, ifp_iterator) {
     if (olsr_ipcmp(&olsr_cnf->router_id, &interface->ip_addr) != 0) {
       olsr_ip_to_string(&buf_localip, &olsr_cnf->router_id);
       olsr_ip_to_string(&buf_aliasip, &interface->ip_addr);
@@ -717,8 +711,8 @@ txtinfo_mid(struct comport_connection *con,
   }
 
   /* MID root is the TC entry */
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-    struct mid_entry *alias;
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
+    struct mid_entry *alias, *alias_iterator;
 
     olsr_ip_to_string(&buf_localip, &tc->addr);
     if (tc->validity_timer) {
@@ -729,7 +723,7 @@ txtinfo_mid(struct comport_connection *con,
         strscpy(buf_vtime.buf, "0.0", sizeof(buf_vtime));
       }
 
-      OLSR_FOR_ALL_TC_MID_ENTRIES(tc, alias, iterator2) {
+      OLSR_FOR_ALL_TC_MID_ENTRIES(tc, alias, alias_iterator) {
         olsr_ip_to_string(&buf_aliasip, &alias->mid_alias_addr);
 
         if (abuf_templatef(&con->out, template, values_mid, tmpl_indices, indexLength) < 0) {
index 38168b6..a761e48 100644 (file)
@@ -284,70 +284,70 @@ avl_is_empty(struct avl_tree *tree) {
   container_of((&(element)->node_member.list)->prev, typeof(*(element)), node_member)
 
 /**
- * Loop over all elements of an avl_tree, used similar to a for() command.
+ * Loop over a block of elements of a tree, used similar to a for() command.
  * This loop should not be used if elements are removed from the tree during
  * the loop.
  *
- * @param tree pointer to avl-tree
+ * @param first pointer to first element of loop
+ * @param last pointer to last element of loop
  * @param element pointer to a node of the tree, this element will
- *    contain the current node of the tree during the loop
+ *    contain the current node of the list during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as
- *    the internal iterator
  */
-#define avl_for_each_element(tree, element, node_member, loop_ptr) \
-  list_for_each_element(&(tree)->list_head, element, node_member, loop_ptr)
+#define avl_for_element_range(first, last, element, node_member) \
+  for (element = (first); \
+       element->node_member.list.prev != &(last)->node_member.list; \
+       element = avl_next_element(element, node_member))
 
 /**
- * Loop over all elements of an avl_tree backwards, used similar to a for() command.
+ * Loop over a block of elements of a tree backwards, used similar to a for() command.
  * This loop should not be used if elements are removed from the tree during
  * the loop.
  *
- * @param tree pointer to avl-tree
+ * @param first pointer to first element of loop
+ * @param last pointer to last element of loop
  * @param element pointer to a node of the tree, this element will
- *    contain the current node of the tree during the loop
+ *    contain the current node of the list during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as
- *    the internal iterator
  */
-#define avl_for_each_element_reverse(tree, element, node_member, loop_ptr) \
-  list_for_each_element_reverse(&(tree)->list_head, element, node_member, loop_ptr)
+#define avl_for_element_range_reverse(first, last, element, node_member) \
+  for (element = (last); \
+       element->node_member.list.next != &(first)->node_member.list; \
+       element = avl_prev_element(element, node_member))
 
 /**
- * Loop over a block of elements of a tree, used similar to a for() command.
+ * Loop over all elements of an avl_tree, used similar to a for() command.
  * This loop should not be used if elements are removed from the tree during
  * the loop.
  *
- * @param first pointer to first element of loop
- * @param last pointer to last element of loop
+ * @param tree pointer to avl-tree
  * @param element pointer to a node of the tree, this element will
- *    contain the current node of the list during the loop
+ *    contain the current node of the tree during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define avl_for_element_range(first, last, element, node_member, loop_ptr) \
-  __list_for_element_range(&(first)->node_member.list, &(last)->node_member.list, element, node_member, loop_ptr)
+#define avl_for_each_element(tree, element, node_member) \
+  avl_for_element_range(avl_first_element(tree, element, node_member), \
+                        avl_last_element(tree, element,  node_member), \
+                        element, node_member)
 
 /**
- * Loop over a block of elements of a tree backwards, used similar to a for() command.
+ * Loop over all elements of an avl_tree backwards, used similar to a for() command.
  * This loop should not be used if elements are removed from the tree during
  * the loop.
  *
- * @param first pointer to first element of loop
- * @param last pointer to last element of loop
+ * @param tree pointer to avl-tree
  * @param element pointer to a node of the tree, this element will
- *    contain the current node of the list during the loop
+ *    contain the current node of the tree during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define avl_for_element_range_reverse(first, last, element, node_member, loop_ptr) \
-  __list_for_element_range_reverse(&(first)->node_member.list, &(last)->node_member.list, element, node_member, loop_ptr)
+#define avl_for_each_element_reverse(tree, element, node_member) \
+  avl_for_element_range_reverse(avl_first_element(tree, element, node_member), \
+                                avl_last_element(tree, element,  node_member), \
+                                element, node_member)
 
 /**
  * Loop over a block of elements of a tree, used similar to a for() command.
@@ -361,11 +361,10 @@ avl_is_empty(struct avl_tree *tree) {
  *    contain the current node of the list during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define avl_for_element_to_last(tree, first, element, node_member, loop_ptr) \
-  __list_for_element_range(&(first)->node_member.list, (tree)->list_head.prev, element, node_member, loop_ptr)
+#define avl_for_element_to_last(tree, first, element, node_member) \
+  avl_for_element_range(first, avl_last_element(tree, element, node_member), element, node_member)
+
 
 /**
  * Loop over a block of elements of a tree backwards, used similar to a for() command.
@@ -379,11 +378,9 @@ avl_is_empty(struct avl_tree *tree) {
  *    contain the current node of the list during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define avl_for_element_to_last_reverse(tree, first, element, node_member, loop_ptr) \
-  __list_for_element_range_reverse(&(first)->node_member.list, (tree)->list_head.prev, element, node_member, loop_ptr)
+#define avl_for_element_to_last_reverse(tree, first, element, node_member) \
+  avl_for_element_range_reverse(first, avl_last_element(tree, element, node_member), element, node_member)
 
 /**
  * Loop over a block of elements of a tree, used similar to a for() command.
@@ -397,11 +394,10 @@ avl_is_empty(struct avl_tree *tree) {
  *    contain the current node of the list during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define avl_for_first_to_element(tree, last, element, node_member, loop_ptr) \
-    __list_for_element_range((tree)->list_head.next, &(last)->node_member.list, element, node_member, loop_ptr)
+#define avl_for_first_to_element(tree, last, element, node_member) \
+  avl_for_element_range(avl_first_element(tree, element, node_member), last, element, node_member)
+
 
 /**
  * Loop over a block of elements of a tree backwards, used similar to a for() command.
@@ -415,11 +411,45 @@ avl_is_empty(struct avl_tree *tree) {
  *    contain the current node of the list during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define avl_for_first_to_element_reverse(tree, last, element, node_member, loop_ptr) \
-    __list_for_element_range_reverse((tree)->list_head.next, &(last)->node_member.list, element, node_member, loop_ptr)
+#define avl_for_first_to_element_reverse(tree, last, element, node_member) \
+  avl_for_element_range_reverse(avl_first_element(tree, element, node_member), last, element, node_member)
+
+/**
+ * Loop over a block of nodes of a tree, used similar to a for() command.
+ * This loop can be used if the current element might be removed from
+ * the tree during the loop. Other elements should not be removed during
+ * the loop.
+ *
+ * @param first_element first element of loop
+ * @param last_element last element of loop
+ * @param element iterator pointer to tree element struct
+ * @param node_member name of avl_node within tree element struct
+ * @param ptr pointer to tree element struct which is used to store
+ *    the next node during the loop
+ */
+#define avl_for_element_range_safe(first_element, last_element, element, node_member, ptr) \
+  for (element = (first_element), ptr = avl_next_element(first_element, node_member); \
+       element->node_member.list.prev != &(last_element)->node_member.list; \
+       element = ptr, ptr = avl_next_element(ptr, node_member))
+
+/**
+ * Loop over a block of elements of a tree backwards, used similar to a for() command.
+ * This loop can be used if the current element might be removed from
+ * the tree during the loop. Other elements should not be removed during
+ * the loop.
+ *
+ * @param first_element first element of range (will be last returned by the loop)
+ * @param last_element last element of range (will be first returned by the loop)
+ * @param element iterator pointer to node element struct
+ * @param node_member name of avl_node within node element struct
+ * @param ptr pointer to node element struct which is used to store
+ *    the previous node during the loop
+ */
+#define avl_for_element_range_reverse_safe(first_element, last_element, element, node_member, ptr) \
+  for (element = (last_element), ptr = avl_prev_element(last_element, node_member); \
+       element->node_member.list.next != &(first_element)->node_member.list; \
+       element = ptr, ptr = avl_prev_element(ptr, node_member))
 
 /**
  * Loop over all elements of an avl_tree, used similar to a for() command.
@@ -432,13 +462,13 @@ avl_is_empty(struct avl_tree *tree) {
  *    contain the current node of the tree during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator for the loop
- * @param safe_ptr pointer to an list_entity which is used to store
+ * @param ptr pointer to a tree element which is used to store
  *    the next node during the loop
  */
-#define avl_for_each_element_safe(tree, element, node_member, loop_ptr, safe_ptr) \
-  list_for_each_element_safe(&(tree)->list_head, element, node_member, loop_ptr, safe_ptr)
+#define avl_for_each_element_safe(tree, element, node_member, ptr) \
+  avl_for_element_range_safe(avl_first_element(tree, element, node_member), \
+                             avl_last_element(tree, element, node_member), \
+                             element, node_member, ptr)
 
 /**
  * Loop over all elements of an avl_tree backwards, used similar to a for() command.
@@ -451,13 +481,13 @@ avl_is_empty(struct avl_tree *tree) {
  *    contain the current node of the tree during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator for the loop
- * @param safe_ptr pointer to an list_entity which is used to store
+ * @param ptr pointer to a tree element which is used to store
  *    the next node during the loop
  */
-#define avl_for_each_element_reverse_safe(tree, element, node_member, loop_ptr, safe_ptr) \
-  list_for_each_element_reverse_safe(&(tree)->list_head, element, node_member, loop_ptr, safe_ptr)
+#define avl_for_each_element_reverse_safe(tree, element, node_member, ptr) \
+  avl_for_element_range_reverse_safe(avl_first_element(tree, element, node_member), \
+                                     avl_last_element(tree, element, node_member), \
+                                     element, node_member, ptr)
 
 /**
  * A special loop that removes all elements of the tree and cleans up the tree
@@ -474,19 +504,16 @@ avl_is_empty(struct avl_tree *tree) {
  *    contain the current node of the tree during the loop
  * @param node_member name of the avl_node element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator for the loop
- * @param safe_ptr pointer to an list_entity which is used to store
+ * @param ptr pointer to a tree element which is used to store
  *    the next node during the loop
  */
-#define avl_remove_all_elements(tree, element, node_member, loop_ptr, safe_ptr) \
-  for (loop_ptr = (tree)->list_head.next, safe_ptr = loop_ptr->next, \
-         element = container_of(loop_ptr, typeof(*(element)), node_member), \
-         list_init_head(&(tree)->list_head), \
-         (tree)->root = NULL, (tree)->count = 0; \
-       loop_ptr != &(tree)->list_head; \
-       loop_ptr = safe_ptr, safe_ptr = loop_ptr->next, \
-         element = container_of(loop_ptr, typeof(*(element)), node_member))
+#define avl_remove_all_elements(tree, element, node_member, ptr) \
+  for (element = avl_first_element(tree, element, node_member), \
+       ptr = avl_next_element(element, node_member), \
+       list_init_head(&(tree)->list_head), \
+       (tree)->root = NULL; \
+       (tree)->count > 0; \
+       element = ptr, ptr = avl_next_element(ptr, node_member), (tree)->count--)
 
 #endif /* _AVL_H */
 
index 1fcb813..0572723 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * PacketBB handler library (see RFC 5444)
- * Copyright (c) 2010 Henning Rogge <henning.rogge@fkie.fraunhofer.de>
+ * Copyright (c) 2010 Henning Rogge <hrogge@googlemail.com>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -256,33 +256,34 @@ static inline void list_merge(struct list_entity *add_to, struct list_entity *re
   container_of((&(element)->list_member)->prev, typeof(*(element)), list_member)
 
 /**
- * internal macro that loops over a limited range of nodes
- * @param first_entity first element of loop
- * @param last_entity last element of loop
- * @param element pointer to list element struct
+ * Loop over a block of elements of a list, used similar to a for() command.
+ * This loop should not be used if elements are removed from the list during
+ * the loop.
+ *
+ * @param first_element first element of loop
+ * @param last_element last element of loop
+ * @param element iterator pointer to list element struct
  * @param list_member name of list_entity within list element struct
- * @param loop_ptr iteration list_entity pointer
  */
-#define __list_for_element_range(first_entity, last_entity, element, list_member, loop_ptr) \
-  for (loop_ptr = (first_entity), element = container_of(loop_ptr, typeof(*(element)), list_member); \
-       loop_ptr->prev != (last_entity); \
-       loop_ptr = loop_ptr->next, \
-         element = container_of(loop_ptr, typeof(*(element)), list_member))
-
+#define list_for_element_range(first_element, last_element, element, list_member) \
+  for (element = (first_element); \
+       element->list_member.prev != &(last_element)->list_member; \
+       element = list_next_element(element, list_member))
 
 /**
- * internal macro that loops backward over a limited range of nodes
- * @param first_entity first element of range (will be last returned by the loop)
- * @param last_entity last element of range (will be first returned by the loop)
- * @param element pointer to list element struct
+ * Loop over a block of elements of a list backwards, used similar to a for() command.
+ * This loop should not be used if elements are removed from the list during
+ * the loop.
+ *
+ * @param first_element first element of range (will be last returned by the loop)
+ * @param last_element last element of range (will be first returned by the loop)
+ * @param element iterator pointer to list element struct
  * @param list_member name of list_entity within list element struct
- * @param loop_ptr iteration list_entity pointer
  */
-#define __list_for_element_range_reverse(first_entity, last_entity, element, list_member, loop_ptr) \
-  for (loop_ptr = (last_entity), element = container_of(loop_ptr, typeof(*(element)), list_member); \
-       loop_ptr->next != (first_entity); \
-       loop_ptr = loop_ptr->prev, \
-         element = container_of(loop_ptr, typeof(*(element)), list_member))
+#define list_for_element_range_reverse(first_element, last_element, element, list_member) \
+  for (element = (last_element); \
+       element->list_member.next != &(first_element)->list_member; \
+       element = list_prev_element(element, list_member))
 
 /**
  * Loop over all elements of a list, used similar to a for() command.
@@ -294,11 +295,11 @@ static inline void list_merge(struct list_entity *add_to, struct list_entity *re
  *    contain the current node of the list during the loop
  * @param list_member name of the list_entity element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define list_for_each_element(head, element, list_member, loop_ptr) \
-  __list_for_element_range((head)->next, (head)->prev, element, list_member, loop_ptr)
+#define list_for_each_element(head, element, list_member) \
+  list_for_element_range(list_first_element(head, element, list_member), \
+                         list_last_element(head, element, list_member), \
+                         element, list_member)
 
 /**
  * Loop over all elements of a list backwards, used similar to a for() command.
@@ -310,72 +311,68 @@ static inline void list_merge(struct list_entity *add_to, struct list_entity *re
  *    contain the current node of the list during the loop
  * @param list_member name of the list_entity element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define list_for_each_element_reverse(head, element, list_member, loop_ptr) \
-  __list_for_element_range_reverse((head)->next, (head)->prev, element, list_member, loop_ptr)
+#define list_for_each_element_reverse(head, element, list_member) \
+  list_for_element_range_reverse(list_first_element(head, element, list_member), \
+                                 list_last_element(head, element, list_member), \
+                                 element, list_member)
 
 /**
  * Loop over a block of elements of a list, used similar to a for() command.
  * This loop should not be used if elements are removed from the list during
  * the loop.
+ * The loop runs from the element 'first' to the end of the list.
  *
+ * @param head pointer to head of list
  * @param first pointer to first element of loop
- * @param last pointer to last element of loop
  * @param element pointer to a node of the list, this element will
  *    contain the current node of the list during the loop
  * @param list_member name of the list_entity element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define list_for_element_range(first, last, element, list_member, loop_ptr) \
-  __list_for_element_range(&(first)->list_member, &(last)->list_member, element, list_member, loop_ptr)
+#define list_for_element_to_last(head, first, element, list_member) \
+  list_for_element_range(first, list_last_element(head, element, list_member), element, list_member)
 
 /**
  * Loop over a block of elements of a list backwards, used similar to a for() command.
  * This loop should not be used if elements are removed from the list during
  * the loop.
+ * The loop runs from the end of the list to the element 'first'.
  *
- * @param first pointer to first element of range
- * @param last pointer to last element of range
+ * @param head pointer to head of list
+ * @param first pointer to first element of loop
  * @param element pointer to a node of the list, this element will
  *    contain the current node of the list during the loop
  * @param list_member name of the list_entity element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define list_for_element_range_reverse(first, last, element, list_member, loop_ptr) \
-  __list_for_element_range_reverse(&(first)->list_member, &(last)->list_member, element, list_member, loop_ptr)
+#define list_for_element_to_last_reverse(head, first, element, list_member) \
+  list_for_element_range_reverse(first, list_last_element(head, element, list_member), element, list_member)
 
 /**
  * Loop over a block of elements of a list, used similar to a for() command.
  * This loop should not be used if elements are removed from the list during
  * the loop.
- * The loop runs from the element 'first' to the end of the list.
+ * The loop runs from the start of the list to the element 'last'.
  *
  * @param head pointer to head of list
- * @param first pointer to first element of loop
+ * @param last pointer to last element of loop
  * @param element pointer to a node of the list, this element will
  *    contain the current node of the list during the loop
  * @param list_member name of the list_entity element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
  */
-#define list_for_element_to_last(head, first, element, list_member, loop_ptr) \
-  __list_for_element_range(&(first)->list_member, (head)->prev, element, list_member, loop_ptr)
+#define list_for_first_to_element(head, last, element, list_member) \
+  list_for_element_range(list_first_element(head, element, list_member), last, element, list_member)
 
 /**
  * Loop over a block of elements of a list backwards, used similar to a for() command.
  * This loop should not be used if elements are removed from the list during
  * the loop.
- * The loop runs from the end of the list to the element 'first'.
+ * The loop runs from the element 'last' to the start of the list.
  *
  * @param head pointer to head of list
- * @param first pointer to first element of loop
+ * @param last pointer to last element of loop
  * @param element pointer to a node of the list, this element will
  *    contain the current node of the list during the loop
  * @param list_member name of the list_entity element inside the
@@ -383,44 +380,44 @@ static inline void list_merge(struct list_entity *add_to, struct list_entity *re
  * @param loop_ptr pointer to an list_entity which is used as the
  *    internal iterator
  */
-#define list_for_element_to_last_reverse(head, first, element, list_member, loop_ptr) \
-  __list_for_element_range_reverse(&(first)->list_member, (head)->prev, element, list_member, loop_ptr)
+#define list_for_first_to_element_reverse(head, last, element, list_member) \
+  list_for_element_range_reverse(list_first_element(head, element, list_member), last, element, list_member)
 
 /**
  * Loop over a block of elements of a list, used similar to a for() command.
- * This loop should not be used if elements are removed from the list during
+ * This loop can be used if the current element might be removed from
+ * the list during the loop. Other elements should not be removed during
  * the loop.
- * The loop runs from the start of the list to the element 'last'.
  *
- * @param head pointer to head of list
- * @param last pointer to last element of loop
- * @param element pointer to a node of the list, this element will
- *    contain the current node of the list during the loop
- * @param list_member name of the list_entity element inside the
- *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
+ * @param first_element first element of loop
+ * @param last_element last element of loop
+ * @param element iterator pointer to list element struct
+ * @param list_member name of list_entity within list element struct
+ * @param ptr pointer to list element struct which is used to store
+ *    the next node during the loop
  */
-#define list_for_first_to_element(head, last, element, list_member, loop_ptr) \
-  __list_for_element_range((head)->next, &(last)->list_member, element, list_member, loop_ptr)
+#define list_for_element_range_safe(first_element, last_element, element, list_member, ptr) \
+  for (element = (first_element), ptr = list_next_element(first_element, list_member); \
+       element->list_member.prev != &(last_element)->list_member; \
+       element = ptr, ptr = list_next_element(ptr, list_member))
 
 /**
  * Loop over a block of elements of a list backwards, used similar to a for() command.
- * This loop should not be used if elements are removed from the list during
+ * This loop can be used if the current element might be removed from
+ * the list during the loop. Other elements should not be removed during
  * the loop.
- * The loop runs from the element 'last' to the start of the list.
  *
- * @param head pointer to head of list
- * @param last pointer to last element of loop
- * @param element pointer to a node of the list, this element will
- *    contain the current node of the list during the loop
- * @param list_member name of the list_entity element inside the
- *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator
+ * @param first_element first element of range (will be last returned by the loop)
+ * @param last_element last element of range (will be first returned by the loop)
+ * @param element iterator pointer to list element struct
+ * @param list_member name of list_entity within list element struct
+ * @param ptr pointer to list element struct which is used to store
+ *    the previous node during the loop
  */
-#define list_for_first_to_element_reverse(head, last, element, list_member, loop_ptr) \
-  __list_for_element_range_reverse((head)->next, &(last)->list_member, element, list_member, loop_ptr)
+#define list_for_element_range_reverse_safe(first_element, last_element, element, list_member, ptr) \
+  for (element = (last_element), ptr = list_prev_element(last_element, list_member); \
+       element->list_member.next != &(first_element)->list_member; \
+       element = ptr, ptr = list_prev_element(ptr, list_member))
 
 /**
  * Loop over all elements of a list, used similar to a for() command.
@@ -433,17 +430,13 @@ static inline void list_merge(struct list_entity *add_to, struct list_entity *re
  *    contain the current node of the list during the loop
  * @param list_member name of the list_entity element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator for the loop
- * @param safe_ptr pointer to an list_entity which is used to store
+ * @param ptr pointer to an list element struct which is used to store
  *    the next node during the loop
  */
-#define list_for_each_element_safe(head, element, list_member, loop_ptr, safe_ptr) \
-  for (loop_ptr = (head)->next, safe_ptr = loop_ptr->next, \
-         element = container_of(loop_ptr, typeof(*(element)), list_member); \
-       loop_ptr != head; \
-       loop_ptr = safe_ptr, safe_ptr = safe_ptr->next, \
-         element = container_of(loop_ptr, typeof(*(element)), list_member))
+#define list_for_each_element_safe(head, element, list_member, ptr) \
+  list_for_element_range_safe(list_first_element(head, element, list_member), \
+                              list_last_element(head, element, list_member), \
+                              element, list_member, ptr)
 
 /**
  * Loop over all elements of a list backwards, used similar to a for() command.
@@ -456,16 +449,12 @@ static inline void list_merge(struct list_entity *add_to, struct list_entity *re
  *    contain the current node of the list during the loop
  * @param list_member name of the list_entity element inside the
  *    larger struct
- * @param loop_ptr pointer to an list_entity which is used as the
- *    internal iterator for the loop
- * @param safe_ptr pointer to an list_entity which is used to store
+ * @param ptr pointer to an list element struct which is used to store
  *    the next node during the loop
  */
-#define list_for_each_element_reverse_safe(head, element, list_member, loop_ptr, safe_ptr) \
-  for (loop_ptr = (head)->prev, safe_ptr = loop_ptr->prev, \
-         element = container_of(loop_ptr, typeof(*(element)), list_member); \
-       loop_ptr != head; \
-       loop_ptr = safe_ptr, safe_ptr = safe_ptr->prev, \
-         element = container_of(loop_ptr, typeof(*(element)), list_member))
+#define list_for_each_element_reverse_safe(head, element, list_member, ptr) \
+  list_for_element_range_reverse_safe(list_first_element(head, element, list_member), \
+                                      list_last_element(head, element, list_member), \
+                                      element, list_member, ptr)
 
 #endif /* LIST_H_ */
index 3e87451..793ea0b 100644 (file)
@@ -121,13 +121,6 @@ enum log_severity {
   LOG_SEVERITY_COUNT                   //!< LOG_SEVERITY_COUNT
 };
 
-/**
- * Double list pointer for save iteration
- */
-struct list_iterator {
-  struct list_entity *loop;
-  struct list_entity *safe;
-};
 extern volatile enum app_state app_state;
 
 #endif
index 826b505..a40a948 100644 (file)
@@ -131,8 +131,7 @@ olsr_init_duplicate_set(void)
 void
 olsr_flush_duplicate_entries(void)
 {
-  struct dup_entry *entry;
-  struct list_iterator iterator;
+  struct dup_entry *entry, *iterator;
 
   OLSR_FOR_ALL_FORWARD_DUP_ENTRIES(entry, iterator) {
     olsr_delete_duplicate_entry(entry);
@@ -242,8 +241,7 @@ olsr_print_duplicate_table(void)
 {
 #if !defined REMOVE_LOG_INFO
   /* The whole function makes no sense without it. */
-  struct dup_entry *entry;
-  struct list_iterator iterator;
+  struct dup_entry *entry, *iterator;
   const int ipwidth = olsr_cnf->ip_version == AF_INET ? 15 : 30;
 
   OLSR_INFO(LOG_DUPLICATE_SET, "\n--- %s ------------------------------------------------- DUPLICATE SET (forwarding)\n\n",
index 231953f..366edb0 100644 (file)
@@ -76,8 +76,8 @@ bool olsr_is_duplicate_message(struct olsr_message *m, bool forward_set, enum du
 void olsr_print_duplicate_table(void);
 void olsr_flush_duplicate_entries(void);
 
-#define OLSR_FOR_ALL_FORWARD_DUP_ENTRIES(dup, iterator) avl_for_each_element_safe(&forward_set, dup, avl, iterator.loop, iterator.safe)
-#define OLSR_FOR_ALL_PROCESS_DUP_ENTRIES(dup, iterator) avl_for_each_element_safe(&processing_set, dup, avl, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_FORWARD_DUP_ENTRIES(dup, iterator) avl_for_each_element_safe(&forward_set, dup, avl, iterator)
+#define OLSR_FOR_ALL_PROCESS_DUP_ENTRIES(dup, iterator) avl_for_each_element_safe(&processing_set, dup, avl, iterator)
 
 extern struct avl_tree forward_set, processing_set;
 #endif /*DUPLICATE_SET_H_ */
index e4ff5c8..76b7673 100644 (file)
@@ -154,8 +154,7 @@ olsr_delete_hna_net(struct hna_net *hna_net)
 void
 olsr_flush_hna_nets(struct tc_entry *tc)
 {
-  struct hna_net *hna_net;
-  struct list_iterator iterator;
+  struct hna_net *hna_net, *iterator;
 
 #if !defined REMOVE_LOG_DEBUG
   struct ipaddr_str buf;
@@ -237,18 +236,17 @@ olsr_print_hna_set(void)
 {
   /* The whole function doesn't do anything else. */
 #if !defined REMOVE_LOG_INFO
-  struct tc_entry *tc;
+  struct tc_entry *tc, *tc_iterator;
   struct ipaddr_str buf;
   struct ipprefix_str prefixstr;
-  struct hna_net *hna_net;
-  struct list_iterator iterator, iterator2;
+  struct hna_net *hna_net, *hna_iterator;
 
   OLSR_INFO(LOG_HNA, "\n--- %s ------------------------------------------------- HNA\n\n", olsr_wallclock_string());
 
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
     OLSR_INFO_NH(LOG_HNA, "HNA-gw %s:\n", olsr_ip_to_string(&buf, &tc->addr));
 
-    OLSR_FOR_ALL_TC_HNA_ENTRIES(tc, hna_net, iterator2) {
+    OLSR_FOR_ALL_TC_HNA_ENTRIES(tc, hna_net, hna_iterator) {
       OLSR_INFO_NH(LOG_HNA, "\t%-27s\n", olsr_ip_prefix_to_string(&prefixstr, &hna_net->hna_prefix));
     }
   }
@@ -258,8 +256,7 @@ olsr_print_hna_set(void)
 static void
 olsr_prune_hna_entries(struct tc_entry *tc)
 {
-  struct hna_net *hna_net;
-  struct list_iterator iterator;
+  struct hna_net *hna_net, *iterator;
 
   OLSR_FOR_ALL_TC_HNA_ENTRIES(tc, hna_net, iterator) {
     if (hna_net->tc_entry_seqno != tc->hna_seq) {
@@ -333,9 +330,8 @@ olsr_input_hna(struct olsr_message *msg,
 
 void
 generate_hna(void *p __attribute__ ((unused))) {
-  struct interface *ifp;
-  struct list_iterator iterator;
-  struct ip_prefix_entry *h;
+  struct interface *ifp, *ifp_iterator;
+  struct ip_prefix_entry *h, *h_iterator;
   uint8_t msg_buffer[MAXMESSAGESIZE - OLSR_HEADERSIZE] __attribute__ ((aligned));
   uint8_t *curr = msg_buffer;
   uint8_t *length_field, *last;
@@ -356,7 +352,7 @@ generate_hna(void *p __attribute__ ((unused))) {
   pkt_put_u16(&curr, get_msg_seqno());
 
   last = msg_buffer + sizeof(msg_buffer) - olsr_cnf->ipsize;
-  OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, h, iterator) {
+  OLSR_FOR_ALL_IPPREFIX_ENTRIES(&olsr_cnf->hna_entries, h, h_iterator) {
     union olsr_ip_addr subnet;
 
     olsr_prefix_to_netmask(&subnet, h->net.prefix_len);
@@ -371,7 +367,7 @@ generate_hna(void *p __attribute__ ((unused))) {
 
   pkt_put_u16(&length_field, curr - msg_buffer);
 
-  OLSR_FOR_ALL_INTERFACES(ifp, iterator) {
+  OLSR_FOR_ALL_INTERFACES(ifp, ifp_iterator) {
     if (net_outbuffer_bytes_left(ifp) < curr - msg_buffer) {
       net_output(ifp);
       set_buffer_timer(ifp);
index 1cc4ba0..5f78192 100644 (file)
@@ -58,7 +58,7 @@ struct hna_net {
 
 #define OLSR_HNA_NET_JITTER 5   /* percent */
 
-#define OLSR_FOR_ALL_TC_HNA_ENTRIES(tc, hna_set, iterator) avl_for_each_element_safe(&tc->hna_tree, hna_set, hna_tc_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_TC_HNA_ENTRIES(tc, hna_set, iterator) avl_for_each_element_safe(&tc->hna_tree, hna_set, hna_tc_node, iterator)
 
 /* HNA msg input parser */
 void olsr_input_hna(struct olsr_message *, struct interface *, union olsr_ip_addr *, enum duplicate_status);
index fd32d16..eb9ba40 100644 (file)
@@ -161,15 +161,14 @@ is_lost_interface_ip(union olsr_ip_addr *ip) {
 }
 
 void destroy_interfaces(void) {
-  struct interface *iface;
-  struct interface_lost *lost;
-  struct list_iterator iterator;
+  struct interface *iface, *iface_iterator;
+  struct interface_lost *lost, *lost_iterator;
 
-  OLSR_FOR_ALL_INTERFACES(iface, iterator) {
+  OLSR_FOR_ALL_INTERFACES(iface, iface_iterator) {
     remove_interface(iface);
   }
 
-  OLSR_FOR_ALL_LOSTIF_ENTRIES(lost, iterator) {
+  OLSR_FOR_ALL_LOSTIF_ENTRIES(lost, lost_iterator) {
     remove_lost_interface_ip(lost);
   }
 }
@@ -263,8 +262,7 @@ static void
 check_interface_updates(void *foo __attribute__ ((unused)))
 {
   struct olsr_if_config *tmp_if;
-  struct interface_lost *lost;
-  struct list_iterator iterator;
+  struct interface_lost *lost, *iterator;
 
   OLSR_DEBUG(LOG_INTERFACE, "Checking for updates in the interface set\n");
 
@@ -379,8 +377,7 @@ run_ifchg_cbs(struct interface *ifp, int flag)
 struct interface *
 if_ifwithaddr(const union olsr_ip_addr *addr)
 {
-  struct interface *ifp;
-  struct list_iterator iterator;
+  struct interface *ifp, *iterator;
   if (!addr) {
     return NULL;
   }
@@ -403,8 +400,7 @@ if_ifwithaddr(const union olsr_ip_addr *addr)
 struct interface *
 if_ifwithsock(int fd)
 {
-  struct interface *ifp;
-  struct list_iterator iterator;
+  struct interface *ifp, *iterator;
 
   OLSR_FOR_ALL_INTERFACES(ifp, iterator) {
     if (ifp->olsr_socket == fd) {
@@ -429,8 +425,7 @@ if_ifwithsock(int fd)
 struct interface *
 if_ifwithname(const char *if_name)
 {
-  struct interface *ifp;
-  struct list_iterator iterator;
+  struct interface *ifp, *iterator;
 
   OLSR_FOR_ALL_INTERFACES(ifp, iterator) {
     /* good ol' strcmp should be sufficient here */
@@ -452,8 +447,7 @@ if_ifwithname(const char *if_name)
 struct interface *
 if_ifwithindex(const int if_index)
 {
-  struct interface *ifp;
-  struct list_iterator iterator;
+  struct interface *ifp, *iterator;
   OLSR_FOR_ALL_INTERFACES(ifp, iterator) {
     if (ifp->if_index == if_index) {
       return ifp;
index 6c02ecc..9fe8d69 100644 (file)
@@ -170,7 +170,7 @@ struct interface {
 };
 
 /* deletion safe macro for interface list traversal */
-#define OLSR_FOR_ALL_INTERFACES(interface, iterator) list_for_each_element_safe(&interface_head, interface, int_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_INTERFACES(interface, iterator) list_for_each_element_safe(&interface_head, interface, int_node, iterator)
 
 struct interface_lost {
   struct avl_node node;
@@ -178,7 +178,7 @@ struct interface_lost {
   uint32_t valid_until;
 };
 
-#define OLSR_FOR_ALL_LOSTIF_ENTRIES(lostif, iterator) avl_for_each_element_safe(&interface_lost_tree, lostif, node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_LOSTIF_ENTRIES(lostif, iterator) avl_for_each_element_safe(&interface_lost_tree, lostif, node, iterator)
 
 #define OLSR_BUFFER_HOLD_JITTER 25      /* percent */
 #define OLSR_BUFFER_HOLD_TIME  100      /* milliseconds */
index 88b8d3f..b7684d1 100644 (file)
@@ -141,8 +141,7 @@ get_best_link_to_neighbor_ip(const union olsr_ip_addr *remote)
 struct link_entry *
 get_best_link_to_neighbor(struct nbr_entry *nbr)
 {
-  struct link_entry *walker, *good_link;
-  struct list_iterator iterator;
+  struct link_entry *walker, *good_link, *iterator;
   olsr_linkcost curr_lcost = LINK_COST_BROKEN;
 
   /* we haven't selected any links, yet */
@@ -259,8 +258,7 @@ olsr_delete_link_entry(struct link_entry *link)
 void
 olsr_delete_link_entry_by_if(const struct interface *ifp)
 {
-  struct link_entry *link;
-  struct list_iterator iterator;
+  struct link_entry *link, *iterator;
 #if !defined REMOVE_LOG_DEBUG
   struct ipaddr_str buf;
 #endif
@@ -463,8 +461,7 @@ add_link_entry(const union olsr_ip_addr *local,
 int
 check_neighbor_link(const union olsr_ip_addr *int_addr)
 {
-  struct link_entry *link;
-  struct list_iterator iterator;
+  struct link_entry *link, *iterator;
 
   OLSR_FOR_ALL_LINK_ENTRIES(link, iterator) {
     if (olsr_ipcmp(int_addr, &link->neighbor_iface_addr) == 0) {
@@ -486,8 +483,7 @@ check_neighbor_link(const union olsr_ip_addr *int_addr)
 struct link_entry *
 lookup_link_entry(const union olsr_ip_addr *remote, const union olsr_ip_addr *remote_main, const struct interface *local)
 {
-  struct link_entry *link;
-  struct list_iterator iterator;
+  struct link_entry *link, *iterator;
 
   OLSR_FOR_ALL_LINK_ENTRIES(link, iterator) {
     if (olsr_ipcmp(remote, &link->neighbor_iface_addr) == 0 && (link->if_name ? !strcmp(link->if_name, local->int_name)
@@ -577,8 +573,7 @@ update_link_entry(const union olsr_ip_addr *local,
 int
 replace_neighbor_link_set(const struct nbr_entry *old, struct nbr_entry *new)
 {
-  struct link_entry *link;
-  struct list_iterator iterator;
+  struct link_entry *link, *iterator;
   int retval = 0;
 
   if (list_is_empty(&link_entry_head)) {
@@ -635,8 +630,7 @@ olsr_print_link_set(void)
 {
 #if !defined REMOVE_LOG_INFO
   /* The whole function makes no sense without it. */
-  struct link_entry *walker;
-  struct list_iterator iterator;
+  struct link_entry *walker, *iterator;
   char totaltxt[256] = { 0 };
   const char *txt;
   int addrsize;
@@ -737,8 +731,7 @@ generate_hello(void *p) {
   struct olsr_message msg;
   uint8_t *curr = msg_buffer;
   uint8_t *length_field, *last;
-  struct link_entry *link;
-  struct list_iterator iterator;
+  struct link_entry *link, *iterator;
   uint8_t writeLinkType, writeNeighType;
   OLSR_INFO(LOG_PACKET_CREATION, "Building Hello for %s\n-------------------\n", ifp->int_name);
 
index 81b938c..9720300 100644 (file)
@@ -93,7 +93,7 @@ struct link_entry {
 #define OLSR_LINK_LOSS_JITTER  0        /* percent jitter */
 
 /* deletion safe macro for link entry traversal */
-#define OLSR_FOR_ALL_LINK_ENTRIES(link, iterator) list_for_each_element_safe(&link_entry_head, link, link_list, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_LINK_ENTRIES(link, iterator) list_for_each_element_safe(&link_entry_head, link, link_list, iterator)
 
 /* Externals */
 extern struct list_entity EXPORT(link_entry_head);
index b86c9ce..a4e3e39 100644 (file)
 void
 olsr_calculate_lq_mpr(void)
 {
-  struct nbr2_entry *nbr2;
-  struct nbr_entry *neigh;
-  struct nbr_con *walker;
-  struct link_entry *lnk;
-  struct list_iterator iterator, iterator2;
+  struct nbr2_entry *nbr2, *nbr2_iterator;
+  struct nbr_entry *neigh, *neigh_iterator;
+  struct nbr_con *walker, *walker_iterator;
+  struct link_entry *lnk, *lnk_iterator;
   int k;
   olsr_linkcost best, best_1hop;
   bool mpr_changes = false;
   bool found_better_path;
 
-  OLSR_FOR_ALL_NBR_ENTRIES(neigh, iterator) {
+  OLSR_FOR_ALL_NBR_ENTRIES(neigh, neigh_iterator) {
 
     /* Memorize previous MPR status. */
     neigh->was_mpr = neigh->is_mpr;
@@ -81,7 +80,7 @@ olsr_calculate_lq_mpr(void)
   }
 
   /* loop through all 2-hop neighbours */
-  OLSR_FOR_ALL_NBR2_ENTRIES(nbr2, iterator) {
+  OLSR_FOR_ALL_NBR2_ENTRIES(nbr2, nbr2_iterator) {
 
     best_1hop = LINK_COST_BROKEN;
 
@@ -106,7 +105,7 @@ olsr_calculate_lq_mpr(void)
       /* see wether we find a better route via an MPR */
       walker = NULL;
       found_better_path = false;
-      OLSR_FOR_ALL_NBR2_CON_ENTRIES(nbr2, walker, iterator2) {
+      OLSR_FOR_ALL_NBR2_CON_ENTRIES(nbr2, walker, walker_iterator) {
         if (walker->path_linkcost < best_1hop) {
           found_better_path = true;
           break;
@@ -126,7 +125,7 @@ olsr_calculate_lq_mpr(void)
        */
 
       /* mark all 1-hop neighbours as not selected */
-      OLSR_FOR_ALL_NBR2_CON_ENTRIES(nbr2, walker, iterator2) {
+      OLSR_FOR_ALL_NBR2_CON_ENTRIES(nbr2, walker, walker_iterator) {
         walker->nbr->skip = false;
       }
 
@@ -136,7 +135,7 @@ olsr_calculate_lq_mpr(void)
         neigh = NULL;
         best = LINK_COST_BROKEN;
 
-        OLSR_FOR_ALL_NBR2_CON_ENTRIES(nbr2, walker, iterator2) {
+        OLSR_FOR_ALL_NBR2_CON_ENTRIES(nbr2, walker, walker_iterator) {
           if (walker->nbr->is_sym && !walker->nbr->skip && walker->path_linkcost < best) {
             neigh = walker->nbr;
             best = walker->path_linkcost;
@@ -166,7 +165,7 @@ olsr_calculate_lq_mpr(void)
   }
 
   /* ugly hack */
-  OLSR_FOR_ALL_LINK_ENTRIES(lnk, iterator) {
+  OLSR_FOR_ALL_LINK_ENTRIES(lnk, lnk_iterator) {
     lnk->is_mpr = lnk->neighbor->is_mpr;
   }
 
index 23b88f2..f434293 100644 (file)
@@ -520,8 +520,7 @@ signal_shutdown(int signo __attribute__ ((unused)))
 static void
 olsr_shutdown(void)
 {
-  struct mid_entry *mid;
-  struct list_iterator iterator;
+  struct mid_entry *mid, *iterator;
 
   olsr_delete_all_kernel_routes();
 
index e88b04a..16cb8ce 100644 (file)
@@ -131,16 +131,13 @@ olsr_flush_tc_duplicates(struct mid_entry *alias) {
  * This optimization is not specified in rfc3626.
  */
 static void
-olsr_flush_nbr2_duplicates(struct mid_entry *alias)
+olsr_flush_nbr2_duplicates(struct tc_entry *tc)
 {
-  struct tc_entry *tc;
-  struct list_iterator iterator;
+  struct mid_entry *alias, *iterator;
 #if !defined REMOVE_LOG_DEBUG
   struct ipaddr_str buf1, buf2;
 #endif
 
-  tc = alias->mid_tc;
-
   OLSR_FOR_ALL_TC_MID_ENTRIES(tc, alias, iterator) {
     struct nbr_entry *nbr;
     struct nbr2_entry *nbr2 = olsr_lookup_nbr2_entry(&alias->mid_alias_addr, false);
@@ -309,7 +306,7 @@ olsr_update_mid_entry(const union olsr_ip_addr *main_addr,
    * Do the needful if one of our neighbors has changed its main address.
    */
   olsr_fixup_mid_main_addr(main_addr, alias_addr);
-  olsr_flush_nbr2_duplicates(alias);
+  olsr_flush_nbr2_duplicates(alias->mid_tc);
   olsr_flush_tc_duplicates(alias);
 
   /*
@@ -406,8 +403,7 @@ olsr_delete_mid_entry(struct mid_entry *alias)
 void
 olsr_flush_mid_entries(struct tc_entry *tc)
 {
-  struct mid_entry *alias;
-  struct list_iterator iterator;
+  struct mid_entry *alias, *iterator;
   OLSR_FOR_ALL_TC_MID_ENTRIES(tc, alias, iterator) {
     olsr_delete_mid_entry(alias);
   }
@@ -421,15 +417,14 @@ void
 olsr_print_mid_set(void)
 {
 #if !defined REMOVE_LOG_INFO
-  struct tc_entry *tc;
-  struct mid_entry *alias;
-  struct list_iterator iterator, iterator2;
+  struct tc_entry *tc, *tc_iterator;
+  struct mid_entry *alias, *mid_iterator;
   struct ipaddr_str buf1, buf2;
 
   OLSR_INFO(LOG_MID, "\n--- %s ------------------------------------------------- MID\n\n", olsr_wallclock_string());
 
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-    OLSR_FOR_ALL_TC_MID_ENTRIES(tc, alias, iterator2) {
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
+    OLSR_FOR_ALL_TC_MID_ENTRIES(tc, alias, mid_iterator) {
       OLSR_INFO_NH(LOG_MID, "%-15s: %s\n", olsr_ip_to_string(&buf1, &tc->addr), olsr_ip_to_string(&buf2, &alias->mid_alias_addr));
     }
   }
@@ -494,8 +489,7 @@ olsr_input_mid(struct olsr_message *msg,
 
 void
 generate_mid(void *p  __attribute__ ((unused))) {
-  struct interface *ifp, *allif;
-  struct list_iterator iterator;
+  struct interface *ifp, *allif, *iterator;
   struct olsr_message msg;
   uint8_t msg_buffer[MAXMESSAGESIZE - OLSR_HEADERSIZE] __attribute__ ((aligned));
   uint8_t *curr = msg_buffer;
index c470ad2..d2754d8 100644 (file)
@@ -56,8 +56,8 @@ struct mid_entry {
   struct timer_entry *mid_timer;       /* Vtime */
 };
 
-#define OLSR_FOR_ALL_MID_ENTRIES(mid_alias, iterator) avl_for_each_element_safe(&mid_tree, mid_alias, mid_node, iterator.loop, iterator.safe)
-#define OLSR_FOR_ALL_TC_MID_ENTRIES(tc, mid_alias, iterator) avl_for_each_element_safe(&tc->mid_tree, mid_alias, mid_tc_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_MID_ENTRIES(mid_alias, iterator) avl_for_each_element_safe(&mid_tree, mid_alias, mid_node, iterator)
+#define OLSR_FOR_ALL_TC_MID_ENTRIES(tc, mid_alias, iterator) avl_for_each_element_safe(&tc->mid_tree, mid_alias, mid_tc_node, iterator)
 
 #define OLSR_MID_JITTER 5       /* percent */
 
index 40802ff..a5881a9 100644 (file)
@@ -149,8 +149,7 @@ olsr_add_nbr_entry(const union olsr_ip_addr *addr)
 void
 olsr_delete_nbr_entry(struct nbr_entry *nbr)
 {
-  struct nbr_con *connector;
-  struct list_iterator iterator;
+  struct nbr_con *connector, *iterator;
 #if !defined REMOVE_LOG_DEBUG
   struct ipaddr_str buf;
 #endif
@@ -300,8 +299,7 @@ olsr_add_nbr2_entry(const union olsr_ip_addr *addr) {
  */
 void
 olsr_delete_nbr2_entry(struct nbr2_entry *nbr2) {
-  struct nbr_con *connector;
-  struct list_iterator iterator;
+  struct nbr_con *connector, *iterator;
 
 #if !defined REMOVE_LOG_DEBUG
   struct ipaddr_str buf;
@@ -475,19 +473,18 @@ olsr_print_neighbor_table(void)
   /* The whole function doesn't do anything else. */
 
   const int ipwidth = olsr_cnf->ip_version == AF_INET ? INET_ADDRSTRLEN : INET6_ADDRSTRLEN;
-  struct nbr_entry *nbr;
+  struct nbr_entry *nbr, *nbr_iterator;
   struct link_entry *lnk;
   struct ipaddr_str buf, buf2;
-  struct nbr2_entry *nbr2;
-  struct nbr_con *connector;
-  struct list_iterator iterator, iterator2;
+  struct nbr2_entry *nbr2, *nbr2_iterator;
+  struct nbr_con *connector, *con_iterator;
   char lqbuffer[LQTEXT_MAXLENGTH];
   bool first;
 
   OLSR_INFO(LOG_NEIGHTABLE, "\n--- %s ------------------------------------------------ NEIGHBORS\n\n"
             "%-*s\tSYM\tMPR\tMPRS\twill\n", olsr_wallclock_string(), ipwidth, "IP address");
 
-  OLSR_FOR_ALL_NBR_ENTRIES(nbr, iterator) {
+  OLSR_FOR_ALL_NBR_ENTRIES(nbr, nbr_iterator) {
 
     lnk = get_best_link_to_neighbor_ip(&nbr->nbr_addr);
     if (!lnk) {
@@ -505,9 +502,9 @@ olsr_print_neighbor_table(void)
   OLSR_INFO(LOG_2NEIGH, "\n--- %s ----------------------- TWO-HOP NEIGHBORS\n\n"
             "IP addr (2-hop)  IP addr (1-hop)  Total cost\n", olsr_wallclock_string());
 
-  OLSR_FOR_ALL_NBR2_ENTRIES(nbr2, iterator) {
+  OLSR_FOR_ALL_NBR2_ENTRIES(nbr2, nbr2_iterator) {
     first = true;
-    OLSR_FOR_ALL_NBR2_CON_ENTRIES(nbr2, connector, iterator2) {
+    OLSR_FOR_ALL_NBR2_CON_ENTRIES(nbr2, connector, con_iterator) {
       OLSR_INFO_NH(LOG_2NEIGH, "%-*s  %-*s  %s\n",
                    ipwidth, first ? olsr_ip_to_string(&buf, &nbr2->nbr2_addr) : "",
                    ipwidth, olsr_ip_to_string(&buf2, &connector->nbr->nbr_addr),
index 014f258..3858120 100644 (file)
@@ -102,9 +102,9 @@ struct nbr2_entry {
  * the loop prefetches the next node in order to not loose context if
  * for example the caller wants to delete the current entry.
  */
-#define OLSR_FOR_ALL_NBR_ENTRIES(nbr, iterator) avl_for_each_element_safe(&nbr_tree, nbr, nbr_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_NBR_ENTRIES(nbr, iterator) avl_for_each_element_safe(&nbr_tree, nbr, nbr_node, iterator)
 
-#define OLSR_FOR_ALL_NBR_CON_ENTRIES(nbr, con, iterator) avl_for_each_element_safe(&nbr->con_tree, con, nbr_tree_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_NBR_CON_ENTRIES(nbr, con, iterator) avl_for_each_element_safe(&nbr->con_tree, con, nbr_tree_node, iterator)
 
 /*
  * macros for traversing two-hop neighbors and neighbor ref lists.
@@ -114,9 +114,9 @@ struct nbr2_entry {
  * the loop prefetches the next node in order to not loose context if
  * for example the caller wants to delete the current entry.
  */
-#define OLSR_FOR_ALL_NBR2_ENTRIES(nbr2, iterator) avl_for_each_element_safe(&nbr2_tree, nbr2, nbr2_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_NBR2_ENTRIES(nbr2, iterator) avl_for_each_element_safe(&nbr2_tree, nbr2, nbr2_node, iterator)
 
-#define OLSR_FOR_ALL_NBR2_CON_ENTRIES(nbr2, con, iterator) avl_for_each_element_safe(&nbr2->con_tree, con, nbr2_tree_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_NBR2_CON_ENTRIES(nbr2, con, iterator) avl_for_each_element_safe(&nbr2->con_tree, con, nbr2_tree_node, iterator)
 
 /*
  * The one hop neighbor and two hop neighbor trees.
index dea03a1..901f774 100644 (file)
@@ -176,8 +176,7 @@ set_buffer_timer(struct interface *ifn)
 void
 deinit_netfilters(void)
 {
-  struct filter_entry *filter;
-  struct list_iterator iterator;
+  struct filter_entry *filter, *iterator;
   OLSR_FOR_ALL_FILTERS(filter, iterator) {
     avl_delete(&filter_tree, &filter->filter_node);
     free(filter);
index 0bfb8af..19c868c 100644 (file)
@@ -61,7 +61,7 @@ struct filter_entry {
   union olsr_ip_addr filter_addr;
 };
 
-#define OLSR_FOR_ALL_FILTERS(filter, iterator) avl_for_each_element_safe(&filter_tree, filter, filter_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_FILTERS(filter, iterator) avl_for_each_element_safe(&filter_tree, filter, filter_node, iterator)
 
 void init_net(void);
 
index f38ffde..a7b2f58 100644 (file)
@@ -275,8 +275,7 @@ olsr_forward_message(struct olsr_message *msg, uint8_t *binary, struct interface
 {
   union olsr_ip_addr *src;
   struct nbr_entry *neighbor;
-  struct interface *ifn;
-  struct list_iterator iterator;
+  struct interface *ifn, *iterator;
   uint8_t *tmp;
 #if !defined REMOVE_LOG_DEBUG
   struct ipaddr_str buf;
index de8b998..7d4eb72 100644 (file)
@@ -81,8 +81,7 @@ olsr_write_cnf_buf(struct autobuf *abuf, struct olsr_config *cnf, bool write_mor
   abuf_appendf(abuf, "# HNA IPv%d routes\n"
                "# syntax: netaddr/prefix\n" "Hna%d {\n", cnf->ip_version == AF_INET ? 4 : 6, cnf->ip_version == AF_INET ? 4 : 6);
   if (!list_is_empty(&cnf->hna_entries)) {
-    struct ip_prefix_entry *h;
-    struct list_iterator iterator;
+    struct ip_prefix_entry *h, *iterator;
 
     OLSR_FOR_ALL_IPPREFIX_ENTRIES(&cnf->hna_entries, h, iterator) {
       struct ipprefix_str strbuf;
index 0f6bf1d..f9d1515 100644 (file)
@@ -69,7 +69,7 @@
 
 #define COMPORT_MAX_INPUTBUFFER 65536
 
-#define OLSR_FOR_ALL_COMPORT_ENTRIES(comport, iterator) list_for_each_element_safe(&olsr_comport_head, comport, node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_COMPORT_ENTRIES(comport, iterator) list_for_each_element_safe(&olsr_comport_head, comport, node, iterator)
 
 struct list_entity olsr_comport_head;
 
@@ -134,8 +134,7 @@ olsr_com_init(bool failfast) {
 
 void
 olsr_com_destroy(void) {
-  struct comport_connection *con;
-  struct list_iterator iterator;
+  struct comport_connection *con, *iterator;
   OLSR_FOR_ALL_COMPORT_ENTRIES(con, iterator) {
     olsr_com_cleanup_session(con);
   }
index 93ad6a8..b6c0783 100644 (file)
@@ -156,8 +156,7 @@ olsr_com_init_http(void) {
 }
 
 void olsr_com_destroy_http(void) {
-  struct olsr_html_site *site;
-  struct list_iterator iterator;
+  struct olsr_html_site *site, *iterator;
 
   OLSR_FOR_ALL_HTML_ENTRIES(site, iterator) {
     olsr_com_remove_htmlsite(site);
index a4acbce..f707c18 100644 (file)
@@ -94,7 +94,7 @@ struct olsr_html_site {
   void (*sitehandler)(struct comport_connection *con, struct http_request *request);
 };
 
-#define OLSR_FOR_ALL_HTML_ENTRIES(site, iterator) avl_for_each_element_safe(&http_handler_tree, site, node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_HTML_ENTRIES(site, iterator) avl_for_each_element_safe(&http_handler_tree, site, node, iterator)
 
 void olsr_com_init_http(void);
 void olsr_com_destroy_http(void);
index f20adbd..0641636 100644 (file)
@@ -53,7 +53,7 @@
 #include "olsr_comport_txt.h"
 #include "plugin_loader.h"
 
-#define OLSR_FOR_EACH_TXTCMD_ENTRY(cmd, iterator) avl_for_each_element_safe(&txt_normal_tree, cmd, node, iterator.loop, iterator.safe)
+#define OLSR_FOR_EACH_TXTCMD_ENTRY(cmd, iterator) avl_for_each_element_safe(&txt_normal_tree, cmd, node, iterator)
 
 struct txt_repeat_data {
   struct timer_entry *timer;
@@ -349,8 +349,7 @@ olsr_txtcmd_displayhelp(struct comport_connection *con,
 static enum olsr_txtcommand_result
 olsr_txtcmd_help(struct comport_connection *con,
     const char *cmd __attribute__ ((unused)), const char *param) {
-  struct olsr_txtcommand *ptr;
-  struct list_iterator iterator;
+  struct olsr_txtcommand *ptr, *iterator;
 
   if (param != NULL) {
     ptr = avl_find_element(&txt_help_tree, param, ptr, node);
@@ -479,8 +478,7 @@ olsr_txtcmd_version(struct comport_connection *con,
 
 static enum olsr_txtcommand_result
 olsr_txtcmd_plugin(struct comport_connection *con, const char *cmd, const char *param) {
-  struct olsr_plugin *plugin;
-  struct list_iterator iterator;
+  struct olsr_plugin *plugin, *iterator;
   char *para2 = NULL;
   if (param == NULL || strcasecmp(param, "list") == 0) {
     if (abuf_puts(&con->out, "Table:\n") < 0) {
index d2dbb07..41bcc4b 100644 (file)
@@ -104,8 +104,7 @@ olsr_create_memcookie(const char *cookie_name, size_t size)
 void
 olsr_cleanup_memcookie(struct olsr_cookie_info *ci)
 {
-  struct olsr_memory_prefix *memory_entity;
-  struct list_iterator iterator;
+  struct olsr_memory_prefix *memory_entity, *iterator;
 
   /* remove from tree */
   avl_delete(&olsr_cookie_tree, &ci->ci_node);
@@ -139,8 +138,7 @@ olsr_cleanup_memcookie(struct olsr_cookie_info *ci)
 void
 olsr_cookie_cleanup(void)
 {
-  struct olsr_cookie_info *info;
-  struct list_iterator iterator;
+  struct olsr_cookie_info *info, *iterator;
 
   /*
    * Walk the full index range and kill 'em all.
@@ -188,8 +186,7 @@ void *
 olsr_cookie_malloc(struct olsr_cookie_info *ci)
 {
   struct olsr_memory_prefix *mem;
-  struct olsr_cookie_custom *custom;
-  struct list_iterator iterator;
+  struct olsr_cookie_custom *custom, *iterator;
 
 #if !defined REMOVE_LOG_DEBUG
   bool reuse = false;
@@ -251,8 +248,7 @@ void
 olsr_cookie_free(struct olsr_cookie_info *ci, void *ptr)
 {
   struct olsr_memory_prefix *mem;
-  struct olsr_cookie_custom *custom;
-  struct list_iterator iterator;
+  struct olsr_cookie_custom *custom, *iterator;
 #if !defined REMOVE_LOG_DEBUG
   bool reuse = false;
 #endif
@@ -306,8 +302,7 @@ olsr_alloc_cookie_custom(struct olsr_cookie_info *ci, size_t size, const char *n
     void (*init)(struct olsr_cookie_info *, void *, void *),
     void (*cleanup)(struct olsr_cookie_info *, void *, void *)) {
   struct olsr_cookie_custom *custom;
-  struct olsr_memory_prefix *mem;
-  struct list_iterator iterator;
+  struct olsr_memory_prefix *mem, *iterator;
   size_t old_total_size, new_total_size;
 
   custom = olsr_malloc(sizeof(struct olsr_cookie_custom), name);
@@ -355,9 +350,8 @@ olsr_alloc_cookie_custom(struct olsr_cookie_info *ci, size_t size, const char *n
 
 void
 olsr_free_cookie_custom(struct olsr_cookie_info *ci, struct olsr_cookie_custom *custom) {
-  struct olsr_memory_prefix *mem;
-  struct olsr_cookie_custom *c_ptr;
-  struct list_iterator iterator;
+  struct olsr_memory_prefix *mem, *mem_iterator;
+  struct olsr_cookie_custom *c_ptr, *c_iterator;
   size_t prefix_block, suffix_block;
   bool match;
 
@@ -365,7 +359,7 @@ olsr_free_cookie_custom(struct olsr_cookie_info *ci, struct olsr_cookie_custom *
   suffix_block = 0;
   match = false;
 
-  OLSR_FOR_ALL_CUSTOM_MEM(ci, c_ptr, iterator) {
+  OLSR_FOR_ALL_CUSTOM_MEM(ci, c_ptr, c_iterator) {
     if (c_ptr == custom) {
       match = true;
       continue;
@@ -382,14 +376,14 @@ olsr_free_cookie_custom(struct olsr_cookie_info *ci, struct olsr_cookie_custom *
 
   /* move the custom memory back into a continous block */
   if (suffix_block > 0) {
-    OLSR_FOR_ALL_USED_MEM(ci, mem, iterator) {
+    OLSR_FOR_ALL_USED_MEM(ci, mem, mem_iterator) {
       memmove(mem->custom + prefix_block, mem->custom + prefix_block + custom->size, suffix_block);
     }
   }
   ci->ci_total_size -= custom->size;
 
   /* remove all free data blocks, they have the wrong size */
-  OLSR_FOR_ALL_FREE_MEM(ci, mem, iterator) {
+  OLSR_FOR_ALL_FREE_MEM(ci, mem, mem_iterator) {
     list_remove(&mem->node);
     free(mem);
   }
index 397df73..4bdd582 100644 (file)
@@ -115,10 +115,10 @@ struct olsr_memory_prefix {
   uint8_t padding[sizeof(size_t) - sizeof(uint8_t)];
 };
 
-#define OLSR_FOR_ALL_COOKIES(ci, iterator) avl_for_each_element_safe(&olsr_cookie_tree, ci, ci_node, iterator.loop, iterator.safe)
-#define OLSR_FOR_ALL_USED_MEM(ci, mem, iterator) list_for_each_element_safe(&ci->ci_used_list, mem, node, iterator.loop, iterator.safe)
-#define OLSR_FOR_ALL_FREE_MEM(ci, mem, iterator) list_for_each_element_safe(&ci->ci_free_list, mem, node, iterator.loop, iterator.safe)
-#define OLSR_FOR_ALL_CUSTOM_MEM(ci, custom, iterator) list_for_each_element_safe(&ci->ci_custom_list, custom, node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_COOKIES(ci, iterator) avl_for_each_element_safe(&olsr_cookie_tree, ci, ci_node, iterator)
+#define OLSR_FOR_ALL_USED_MEM(ci, mem, iterator) list_for_each_element_safe(&ci->ci_used_list, mem, node, iterator)
+#define OLSR_FOR_ALL_FREE_MEM(ci, mem, iterator) list_for_each_element_safe(&ci->ci_free_list, mem, node, iterator)
+#define OLSR_FOR_ALL_CUSTOM_MEM(ci, custom, iterator) list_for_each_element_safe(&ci->ci_custom_list, custom, node, iterator)
 
 #define COOKIE_FREE_LIST_THRESHOLD 10   /* Blocks / Percent  */
 
index 6c4feb6..83dbc39 100644 (file)
@@ -75,8 +75,7 @@ bool
 ip_acl_acceptable(struct ip_acl *acl, const union olsr_ip_addr *ip, int ip_version)
 {
   struct list_entity *first, *second;
-  struct ip_prefix_entry *entry;
-  struct list_iterator iterator;
+  struct ip_prefix_entry *entry, *iterator;
 
   first = acl->first_accept ? &acl->accept : &acl->reject;
   second = acl->first_accept ? &acl->reject : &acl->accept;
index 0cbe726..3f38f4a 100644 (file)
@@ -49,8 +49,7 @@
 void
 ip_prefix_list_flush(struct list_entity *ip_prefix_head)
 {
-  struct ip_prefix_entry *entry;
-  struct list_iterator iterator;
+  struct ip_prefix_entry *entry, *iterator;
 
   OLSR_FOR_ALL_IPPREFIX_ENTRIES(ip_prefix_head, entry, iterator) {
     list_remove(&entry->node);
@@ -73,8 +72,7 @@ ip_prefix_list_add(struct list_entity *ip_prefix_head, const union olsr_ip_addr
 int
 ip_prefix_list_remove(struct list_entity *ip_prefix_head, const union olsr_ip_addr *net, uint8_t prefix_len, int ip_version)
 {
-  struct ip_prefix_entry *h;
-  struct list_iterator iterator;
+  struct ip_prefix_entry *h, *iterator;
 
   OLSR_FOR_ALL_IPPREFIX_ENTRIES(ip_prefix_head, h, iterator) {
     if (ipcmp(ip_version, net, &h->net.prefix) == 0 && h->net.prefix_len == prefix_len) {
@@ -89,8 +87,7 @@ ip_prefix_list_remove(struct list_entity *ip_prefix_head, const union olsr_ip_ad
 struct ip_prefix_entry *
 ip_prefix_list_find(struct list_entity *ip_prefix_head, const union olsr_ip_addr *net, uint8_t prefix_len, int ip_version)
 {
-  struct ip_prefix_entry *h;
-  struct list_iterator iterator;
+  struct ip_prefix_entry *h, *iterator;
 
   OLSR_FOR_ALL_IPPREFIX_ENTRIES(ip_prefix_head, h, iterator) {
     if (prefix_len == h->net.prefix_len && ipcmp(ip_version, net, &h->net.prefix) == 0) {
index f98bb96..62586ed 100644 (file)
@@ -52,7 +52,7 @@ struct ip_prefix_entry {
 };
 
 /* deletion safe macro for ip_prefix traversal */
-#define OLSR_FOR_ALL_IPPREFIX_ENTRIES(head, prefix_node, iterator) list_for_each_element_safe(head, prefix_node, node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_IPPREFIX_ENTRIES(head, prefix_node, iterator) list_for_each_element_safe(head, prefix_node, node, iterator)
 
 /*
  * List functions
index cf1e6b9..2e592ed 100644 (file)
@@ -164,8 +164,7 @@ olsr_spf_extract_best(struct avl_tree *tree)
 static void
 olsr_spf_relax(struct avl_tree *cand_tree, struct tc_entry *tc)
 {
-  struct tc_edge_entry *tc_edge;
-  struct list_iterator iterator;
+  struct tc_edge_entry *tc_edge, *iterator;
   olsr_linkcost new_cost;
 
 #if !defined REMOVE_LOG_DEBUG
@@ -288,13 +287,12 @@ olsr_calculate_routing_table(bool force)
 #endif
   struct avl_tree cand_tree;
   struct list_entity path_list;          /* head of the path_list */
-  struct tc_entry *tc;
-  struct rt_path *rtp;
+  struct tc_entry *tc, *tc_iterator;
+  struct rt_path *rtp, *rtp_iterator;
   struct tc_edge_entry *tc_edge;
-  struct nbr_entry *neigh;
+  struct nbr_entry *neigh, *neigh_iterator;
   struct link_entry *link;
   int path_count = 0;
-  struct list_iterator iterator;
 
   /* We are done if our backoff timer is running */
   if (!force && spf_backoff_timer != NULL) {
@@ -318,7 +316,7 @@ olsr_calculate_routing_table(bool force)
   /*
    * Initialize vertices in the lsdb.
    */
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
     tc->next_hop = NULL;
     tc->path_cost = ROUTE_COST_BROKEN;
     tc->hops = 0;
@@ -350,7 +348,7 @@ olsr_calculate_routing_table(bool force)
   /*
    * Set the next-hops of our neighbor link.
    */
-  OLSR_FOR_ALL_NBR_ENTRIES(neigh, iterator) {
+  OLSR_FOR_ALL_NBR_ENTRIES(neigh, neigh_iterator) {
     tc_edge = neigh->tc_edge;
 
     if (neigh->is_sym) {
@@ -405,7 +403,7 @@ olsr_calculate_routing_table(bool force)
      * If the prefix is already in the RIB, refresh the entry such
      * that olsr_delete_outdated_routes() does not purge it off.
      */
-    OLSR_FOR_ALL_PREFIX_ENTRIES(tc, rtp, iterator) {
+    OLSR_FOR_ALL_PREFIX_ENTRIES(tc, rtp, rtp_iterator) {
       if (rtp->rtp_rt) {
 
         /*
index beeb4ba..29e41ec 100644 (file)
@@ -135,8 +135,7 @@ void olsr_plugins_init(bool fail_fast) {
 }
 
 void olsr_plugins_enable(enum plugin_type type, bool fail_fast) {
-  struct olsr_plugin *plugin;
-  struct list_iterator iterator;
+  struct olsr_plugin *plugin, *iterator;
 
   /* activate all plugins (configured and static linked ones) */
   OLSR_FOR_ALL_PLUGIN_ENTRIES(plugin, iterator) {
@@ -157,8 +156,7 @@ void olsr_plugins_enable(enum plugin_type type, bool fail_fast) {
 
 void
 olsr_destroy_pluginsystem(void) {
-  struct olsr_plugin *plugin;
-  struct list_iterator iterator;
+  struct olsr_plugin *plugin, *iterator;
   OLSR_FOR_ALL_PLUGIN_ENTRIES(plugin, iterator) {
     olsr_disable_plugin(plugin);
     olsr_internal_unload_plugin(plugin, true);
index d430f74..5460e5b 100644 (file)
@@ -111,7 +111,7 @@ struct olsr_plugin {
   bool internal_active;
 };
 
-#define OLSR_FOR_ALL_PLUGIN_ENTRIES(plugin, iterator) avl_for_each_element_safe(&plugin_tree, plugin, p_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_PLUGIN_ENTRIES(plugin, iterator) avl_for_each_element_safe(&plugin_tree, plugin, p_node, iterator)
 
 struct olsr_plugin *EXPORT(olsr_get_plugin)(const char *libname);
 
index 98bfbc1..661ad48 100644 (file)
@@ -204,8 +204,7 @@ olsr_add_route(struct rt_entry *rt)
 static void
 olsr_chg_kernel_routes(struct list_entity *head_node)
 {
-  struct rt_entry *rt;
-  struct list_iterator iterator;
+  struct rt_entry *rt, *iterator;
 
   if (list_is_empty(head_node)) {
     return;
@@ -235,8 +234,7 @@ olsr_chg_kernel_routes(struct list_entity *head_node)
 static void
 olsr_delete_outdated_routes(struct rt_entry *rt)
 {
-  struct rt_path *rtp;
-  struct list_iterator iterator;
+  struct rt_path *rtp, *iterator;
 
   OLSR_FOR_ALL_RT_PATH_ENTRIES(rt, rtp, iterator) {
     /*
@@ -264,8 +262,7 @@ olsr_delete_outdated_routes(struct rt_entry *rt)
 void
 olsr_update_rib_routes(void)
 {
-  struct rt_entry *rt;
-  struct list_iterator iterator;
+  struct rt_entry *rt, *iterator;
 
   OLSR_DEBUG(LOG_ROUTING, "Updating kernel routes...\n");
 
index a2a7dee..04b1b86 100644 (file)
@@ -387,8 +387,7 @@ void
 olsr_rt_best(struct rt_entry *rt)
 {
   /* grab the first entry */
-  struct rt_path *rtp;
-  struct list_iterator iterator;
+  struct rt_path *rtp, *iterator;
 
   assert (!avl_is_empty(&rt->rt_path_tree));
 
@@ -566,15 +565,14 @@ olsr_print_routing_table(void)
 {
   /* The whole function makes no sense without it. */
 #if !defined REMOVE_LOG_INFO
-  struct rt_entry *rt;
-  struct rt_path *rtp;
+  struct rt_entry *rt, *rt_iterator;
+  struct rt_path *rtp, *rtp_iterator;
 
   char lqbuffer[LQTEXT_MAXLENGTH];
-  struct list_iterator iterator, iterator2;
 
   OLSR_INFO(LOG_ROUTING, "ROUTING TABLE\n");
 
-  OLSR_FOR_ALL_RT_ENTRIES(rt, iterator) {
+  OLSR_FOR_ALL_RT_ENTRIES(rt, rt_iterator) {
     struct ipaddr_str origstr, gwstr;
     struct ipprefix_str prefixstr;
 
@@ -586,7 +584,7 @@ olsr_print_routing_table(void)
                  olsr_ip_to_string(&gwstr, &rt->rt_best->rtp_originator.prefix));
 
     /* walk the per-originator path tree of routes */
-    OLSR_FOR_ALL_RT_PATH_ENTRIES(rt, rtp, iterator2) {
+    OLSR_FOR_ALL_RT_PATH_ENTRIES(rt, rtp, rtp_iterator) {
       OLSR_INFO_NH(LOG_ROUTING, "\tfrom %s, cost %s, metric %u, via %s, dev %s, v %u\n",
                    olsr_ip_to_string(&origstr, &rtp->rtp_originator.prefix),
                    olsr_get_linkcost_text(rtp->rtp_metric.cost, true, lqbuffer, sizeof(lqbuffer)),
index 9cede0a..0ee40bd 100644 (file)
@@ -91,7 +91,7 @@ struct rt_entry {
   int failure_count;
 };
 
-#define OLSR_FOR_ALL_RTLIST_ENTRIES(head, rt_entry, iterator) list_for_each_element_safe(head, rt_entry, rt_change_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_RTLIST_ENTRIES(head, rt_entry, iterator) list_for_each_element_safe(head, rt_entry, rt_change_node, iterator)
 
 /*
  * For every received route a rt_path is added to the RIB.
@@ -113,7 +113,7 @@ struct rt_path {
   uint32_t rtp_version;                /* for detection of outdated rt_paths */
 };
 
-#define OLSR_FOR_ALL_RT_PATH_ENTRIES(rt, rtp, iterator) avl_for_each_element_safe(&rt->rt_path_tree, rtp, rtp_tree_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_RT_PATH_ENTRIES(rt, rtp, iterator) avl_for_each_element_safe(&rt->rt_path_tree, rtp, rtp_tree_node, iterator)
 
 /*
  * Different routes types used in olsrd.
@@ -138,7 +138,7 @@ enum olsr_rt_origin {
  * the loop prefetches the next node in order to not loose context if
  * for example the caller wants to delete the current rt_entry.
  */
-#define OLSR_FOR_ALL_RT_ENTRIES(rt, iterator) avl_for_each_element_safe(&routingtree, rt, rt_tree_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_RT_ENTRIES(rt, iterator) avl_for_each_element_safe(&routingtree, rt, rt_tree_node, iterator)
 
 /**
  * IPv4 <-> IPv6 wrapper
index cf9d386..762a385 100644 (file)
@@ -218,8 +218,7 @@ add_olsr_socket(int fd, socket_handler_func pf_pr, socket_handler_func pf_imm, v
 int
 remove_olsr_socket(int fd, socket_handler_func pf_pr, socket_handler_func pf_imm)
 {
-  struct olsr_socket_entry *entry;
-  struct list_iterator iterator;
+  struct olsr_socket_entry *entry, *iterator;
 
   if (fd < 0 || (pf_pr == NULL && pf_imm == NULL)) {
     OLSR_WARN(LOG_SCHEDULER, "Bogus socket entry - not processing...");
@@ -241,8 +240,7 @@ remove_olsr_socket(int fd, socket_handler_func pf_pr, socket_handler_func pf_imm
 void
 enable_olsr_socket(int fd, socket_handler_func pf_pr, socket_handler_func pf_imm, unsigned int flags)
 {
-  struct olsr_socket_entry *entry;
-  struct list_iterator iterator;
+  struct olsr_socket_entry *entry, *iterator;
 
   OLSR_FOR_ALL_SOCKETS(entry, iterator) {
     if (entry->fd == fd && entry->process_immediate == pf_imm && entry->process_pollrate == pf_pr) {
@@ -254,8 +252,7 @@ enable_olsr_socket(int fd, socket_handler_func pf_pr, socket_handler_func pf_imm
 void
 disable_olsr_socket(int fd, socket_handler_func pf_pr, socket_handler_func pf_imm, unsigned int flags)
 {
-  struct olsr_socket_entry *entry;
-  struct list_iterator iterator;
+  struct olsr_socket_entry *entry, *iterator;
 
   OLSR_FOR_ALL_SOCKETS(entry, iterator) {
     if (entry->fd == fd && entry->process_immediate == pf_imm && entry->process_pollrate == pf_pr) {
@@ -270,8 +267,7 @@ disable_olsr_socket(int fd, socket_handler_func pf_pr, socket_handler_func pf_im
 void
 olsr_flush_sockets(void)
 {
-  struct olsr_socket_entry *entry;
-  struct list_iterator iterator;
+  struct olsr_socket_entry *entry, *iterator;
 
   OLSR_FOR_ALL_SOCKETS(entry, iterator) {
     os_close(entry->fd);
@@ -284,8 +280,7 @@ static void
 poll_sockets(void)
 {
   int n;
-  struct olsr_socket_entry *entry;
-  struct list_iterator iterator;
+  struct olsr_socket_entry *entry, *iterator;
   fd_set ibits, obits;
   struct timeval tvp = { 0, 0 };
   int hfd = 0, fdsets = 0;
@@ -359,8 +354,7 @@ poll_sockets(void)
 static void
 handle_fds(uint32_t next_interval)
 {
-  struct olsr_socket_entry *entry;
-  struct list_iterator iterator;
+  struct olsr_socket_entry *entry, *iterator;
   struct timeval tvp;
   int32_t remaining;
 
@@ -689,8 +683,7 @@ walk_timers(uint32_t * last_run)
 void
 olsr_flush_timers(void)
 {
-  struct olsr_timer_info *ti;
-  struct list_iterator iterator;
+  struct olsr_timer_info *ti, *iterator;
 
   struct list_entity *timer_head_node;
   unsigned int wheel_slot = 0;
index dd512c4..0ea66d3 100644 (file)
@@ -76,7 +76,7 @@ struct olsr_timer_info {
   uint32_t changes;
 };
 
-#define OLSR_FOR_ALL_TIMERS(ti, iterator) avl_for_each_element_safe(&timerinfo_tree, ti, node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_TIMERS(ti, iterator) avl_for_each_element_safe(&timerinfo_tree, ti, node, iterator)
 
 /*
  * Our timer implementation is a based on individual timers arranged in
@@ -174,7 +174,7 @@ struct olsr_socket_entry {
 
 /* deletion safe macro for socket list traversal */
 
-#define OLSR_FOR_ALL_SOCKETS(socket, iterator) list_for_each_element_safe(&socket_head, socket, socket_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_SOCKETS(socket, iterator) list_for_each_element_safe(&socket_head, socket, socket_node, iterator)
 
 uint32_t EXPORT(olsr_getTimestamp) (uint32_t s);
 int32_t EXPORT(olsr_getTimeDue) (uint32_t s);
index 6430877..531f99b 100644 (file)
@@ -152,8 +152,7 @@ olsr_init_tc(void)
 void
 olsr_change_myself_tc(void)
 {
-  struct nbr_entry *entry;
-  struct list_iterator iterator;
+  struct nbr_entry *entry, *iterator;
   bool main_ip_change = false;
 
   if (tc_myself) {
@@ -217,9 +216,8 @@ olsr_change_myself_tc(void)
 void
 olsr_delete_tc_entry(struct tc_entry *tc)
 {
-  struct tc_edge_entry *tc_edge;
-  struct rt_path *rtp;
-  struct list_iterator iterator;
+  struct tc_edge_entry *tc_edge, *edge_iterator;
+  struct rt_path *rtp, *rtp_iterator;
 
 #if !defined REMOVE_LOG_DEBUG
   struct ipaddr_str buf;
@@ -227,7 +225,7 @@ olsr_delete_tc_entry(struct tc_entry *tc)
   OLSR_DEBUG(LOG_TC, "TC: del entry %s\n", olsr_ip_to_string(&buf, &tc->addr));
 
   /* The delete all non-virtual edges */
-  OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, iterator) {
+  OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, edge_iterator) {
     olsr_delete_tc_edge_entry(tc_edge);
   }
 
@@ -245,7 +243,7 @@ olsr_delete_tc_entry(struct tc_entry *tc)
     return;
   }
 
-  OLSR_FOR_ALL_PREFIX_ENTRIES(tc, rtp, iterator) {
+  OLSR_FOR_ALL_PREFIX_ENTRIES(tc, rtp, rtp_iterator) {
     olsr_delete_rt_path(rtp);
   }
 
@@ -497,8 +495,7 @@ olsr_delete_tc_edge_entry(struct tc_edge_entry *tc_edge)
 static bool
 delete_outdated_tc_edges(struct tc_entry *tc)
 {
-  struct tc_edge_entry *tc_edge;
-  struct list_iterator iterator;
+  struct tc_edge_entry *tc_edge, *iterator;
   bool retval = false;
 
   OLSR_DEBUG(LOG_TC, "TC: deleting outdated TC-edge entries\n");
@@ -526,8 +523,7 @@ delete_outdated_tc_edges(struct tc_entry *tc)
 static int
 olsr_delete_revoked_tc_edges(struct tc_entry *tc, uint16_t ansn, union olsr_ip_addr *lower_border, union olsr_ip_addr *upper_border)
 {
-  struct tc_edge_entry *tc_edge;
-  struct list_iterator iterator;
+  struct tc_edge_entry *tc_edge, *iterator;
   int retval = 0;
   bool passedLowerBorder = false;
 
@@ -647,8 +643,7 @@ olsr_print_tc_table(void)
 {
 #if !defined REMOVE_LOG_INFO
   /* The whole function makes no sense without it. */
-  struct tc_entry *tc;
-  struct list_iterator iterator, iterator2;
+  struct tc_entry *tc, *tc_iterator;
   const int ipwidth = olsr_cnf->ip_version == AF_INET ? 15 : 30;
   static char NONE[] = "-";
 
@@ -656,8 +651,8 @@ olsr_print_tc_table(void)
   OLSR_INFO_NH(LOG_TC, "%-*s %-*s %-7s      %8s %12s %5s\n", ipwidth,
                "Source IP addr", ipwidth, "Dest IP addr", "", olsr_get_linklabel(0), "vtime", "ansn");
 
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-    struct tc_edge_entry *tc_edge;
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
+    struct tc_edge_entry *tc_edge, *edge_iterator;
     struct millitxt_buf tbuf;
     char *vtime = NONE;
 
@@ -666,7 +661,7 @@ olsr_print_tc_table(void)
       vtime = tbuf.buf;
     }
 
-    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, iterator2) {
+    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, edge_iterator) {
       struct ipaddr_str addrbuf, dstaddrbuf;
       char lqbuffer1[LQTEXT_MAXLENGTH];
 
@@ -864,13 +859,12 @@ getRelevantTcCount(void)
 
 void
 olsr_delete_all_tc_entries(void) {
-  struct tc_entry *tc;
-  struct tc_edge_entry *edge;
-  struct list_iterator iterator, iterator2;
+  struct tc_entry *tc, *tc_iterator;
+  struct tc_edge_entry *edge, *edge_iterator;
 
   /* delete tc_edges */
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
-    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, edge, iterator2) {
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
+    OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, edge, edge_iterator) {
       if (edge->neighbor) {
         /* break connector with neighbor */
         edge->neighbor->tc_edge = NULL;
@@ -882,7 +876,7 @@ olsr_delete_all_tc_entries(void) {
   }
 
   /* delete tc_entries */
-  OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) {
+  OLSR_FOR_ALL_TC_ENTRIES(tc, tc_iterator) {
     olsr_delete_tc_entry(tc);
   }
 
@@ -933,9 +927,8 @@ static bool
 olsr_output_lq_tc_internal(void *ctx  __attribute__ ((unused)), union olsr_ip_addr *nextIp, bool skip)
 {
   static int ttl_list[] = { 2, 8, 2, 16, 2, 8, 2, MAX_TTL };
-  struct interface *ifp;
-  struct list_iterator iterator;
-  struct nbr_entry *nbr;
+  struct interface *ifp, *ifp_iterator;
+  struct nbr_entry *nbr, *nbr_iterator;
   struct link_entry *link;
   struct nbr_entry *prevNbr;
   uint8_t msg_buffer[MAXMESSAGESIZE - OLSR_HEADERSIZE] __attribute__ ((aligned));
@@ -980,7 +973,7 @@ olsr_output_lq_tc_internal(void *ctx  __attribute__ ((unused)), union olsr_ip_ad
 
   last = msg_buffer + sizeof(msg_buffer) - olsr_cnf->ipsize - olsr_sizeof_TCLQ();
 
-  OLSR_FOR_ALL_NBR_ENTRIES(nbr, iterator) {
+  OLSR_FOR_ALL_NBR_ENTRIES(nbr, nbr_iterator) {
     /* allow fragmentation */
     if (skip) {
       if (olsr_ipcmp(&nbr->nbr_addr, nextIp) != 0) {
@@ -1059,7 +1052,7 @@ olsr_output_lq_tc_internal(void *ctx  __attribute__ ((unused)), union olsr_ip_ad
   pkt_put_u16(&length_field, curr - msg_buffer);
 
   /* send to all interfaces */
-  OLSR_FOR_ALL_INTERFACES(ifp, iterator) {
+  OLSR_FOR_ALL_INTERFACES(ifp, ifp_iterator) {
     if (net_outbuffer_bytes_left(ifp) < curr - msg_buffer) {
       net_output(ifp);
       set_buffer_timer(ifp);
index d2677cb..664e5b3 100644 (file)
@@ -107,9 +107,9 @@ struct tc_entry {
  * the loop prefetches the next node in order to not loose context if
  * for example the caller wants to delete the current entry.
  */
-#define OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) avl_for_each_element_safe(&tc_tree, tc, vertex_node, iterator.loop, iterator.safe)
-#define OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, iterator) avl_for_each_element_safe(&tc->edge_tree, tc_edge, edge_node, iterator.loop, iterator.safe)
-#define OLSR_FOR_ALL_PREFIX_ENTRIES(tc, rtp, iterator) avl_for_each_element_safe(&tc->prefix_tree, rtp, rtp_prefix_tree_node, iterator.loop, iterator.safe)
+#define OLSR_FOR_ALL_TC_ENTRIES(tc, iterator) avl_for_each_element_safe(&tc_tree, tc, vertex_node, iterator)
+#define OLSR_FOR_ALL_TC_EDGE_ENTRIES(tc, tc_edge, iterator) avl_for_each_element_safe(&tc->edge_tree, tc_edge, edge_node, iterator)
+#define OLSR_FOR_ALL_PREFIX_ENTRIES(tc, rtp, iterator) avl_for_each_element_safe(&tc->prefix_tree, rtp, rtp_prefix_tree_node, iterator)
 
 extern struct avl_tree EXPORT(tc_tree);
 extern struct tc_entry *tc_myself;