diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/chain.c | 8 | ||||
-rw-r--r-- | src/rule.c | 17 | ||||
-rw-r--r-- | src/set.c | 8 | ||||
-rw-r--r-- | src/set_elem.c | 9 | ||||
-rw-r--r-- | src/table.c | 8 |
5 files changed, 44 insertions, 6 deletions
diff --git a/src/chain.c b/src/chain.c index b67385e..26ad14d 100644 --- a/src/chain.c +++ b/src/chain.c @@ -973,7 +973,10 @@ struct nft_chain_list_iter *nft_chain_list_iter_create(struct nft_chain_list *l) return NULL; iter->list = l; - iter->cur = list_entry(l->list.next, struct nft_chain, head); + if (nft_chain_list_is_empty(l)) + iter->cur = NULL; + else + iter->cur = list_entry(l->list.next, struct nft_chain, head); return iter; } @@ -983,6 +986,9 @@ struct nft_chain *nft_chain_list_iter_next(struct nft_chain_list_iter *iter) { struct nft_chain *r = iter->cur; + if (r == NULL) + return NULL; + /* get next chain, if any */ iter->cur = list_entry(iter->cur->head.next, struct nft_chain, head); if (&iter->cur->head == iter->list->list.next) @@ -1043,7 +1043,11 @@ struct nft_rule_expr_iter *nft_rule_expr_iter_create(struct nft_rule *r) return NULL; iter->r = r; - iter->cur = list_entry(r->expr_list.next, struct nft_rule_expr, head); + if (list_empty(&r->expr_list)) + iter->cur = NULL; + else + iter->cur = list_entry(r->expr_list.next, struct nft_rule_expr, + head); return iter; } @@ -1053,6 +1057,9 @@ struct nft_rule_expr *nft_rule_expr_iter_next(struct nft_rule_expr_iter *iter) { struct nft_rule_expr *expr = iter->cur; + if (expr == NULL) + return NULL; + /* get next expression, if any */ iter->cur = list_entry(iter->cur->head.next, struct nft_rule_expr, head); if (&iter->cur->head == iter->r->expr_list.next) @@ -1152,7 +1159,10 @@ struct nft_rule_list_iter *nft_rule_list_iter_create(struct nft_rule_list *l) return NULL; iter->list = l; - iter->cur = list_entry(l->list.next, struct nft_rule, head); + if (nft_rule_list_is_empty(l)) + iter->cur = NULL; + else + iter->cur = list_entry(l->list.next, struct nft_rule, head); return iter; } @@ -1168,6 +1178,9 @@ struct nft_rule *nft_rule_list_iter_next(struct nft_rule_list_iter *iter) { struct nft_rule *r = iter->cur; + if (r == NULL) + return NULL; + /* get next rule, if any */ iter->cur = list_entry(iter->cur->head.next, struct nft_rule, head); if (&iter->cur->head == iter->list->list.next) @@ -1020,7 +1020,10 @@ struct nft_set_list_iter *nft_set_list_iter_create(struct nft_set_list *l) return NULL; iter->list = l; - iter->cur = list_entry(l->list.next, struct nft_set, head); + if (nft_set_list_is_empty(l)) + iter->cur = NULL; + else + iter->cur = list_entry(l->list.next, struct nft_set, head); return iter; } @@ -1036,6 +1039,9 @@ struct nft_set *nft_set_list_iter_next(struct nft_set_list_iter *iter) { struct nft_set *s = iter->cur; + if (s == NULL) + return NULL; + /* get next rule, if any */ iter->cur = list_entry(iter->cur->head.next, struct nft_set, head); if (&iter->cur->head == iter->list->list.next) diff --git a/src/set_elem.c b/src/set_elem.c index 95f12bf..4f52b1a 100644 --- a/src/set_elem.c +++ b/src/set_elem.c @@ -690,7 +690,11 @@ struct nft_set_elems_iter *nft_set_elems_iter_create(struct nft_set *s) iter->set = s; iter->list = &s->element_list; - iter->cur = list_entry(s->element_list.next, struct nft_set_elem, head); + if (list_empty(&s->element_list)) + iter->cur = NULL; + else + iter->cur = list_entry(s->element_list.next, + struct nft_set_elem, head); return iter; } @@ -706,6 +710,9 @@ struct nft_set_elem *nft_set_elems_iter_next(struct nft_set_elems_iter *iter) { struct nft_set_elem *s = iter->cur; + if (s == NULL) + return NULL; + iter->cur = list_entry(iter->cur->head.next, struct nft_set_elem, head); if (&iter->cur->head == iter->list->next) return NULL; diff --git a/src/table.c b/src/table.c index c93e6fb..e947394 100644 --- a/src/table.c +++ b/src/table.c @@ -544,7 +544,10 @@ struct nft_table_list_iter *nft_table_list_iter_create(struct nft_table_list *l) return NULL; iter->list = l; - iter->cur = list_entry(l->list.next, struct nft_table, head); + if (nft_table_list_is_empty(l)) + iter->cur = NULL; + else + iter->cur = list_entry(l->list.next, struct nft_table, head); return iter; } @@ -554,6 +557,9 @@ struct nft_table *nft_table_list_iter_next(struct nft_table_list_iter *iter) { struct nft_table *r = iter->cur; + if (r == NULL) + return NULL; + /* get next table, if any */ iter->cur = list_entry(iter->cur->head.next, struct nft_table, head); if (&iter->cur->head == iter->list->list.next) |