Fix processing of negated options
[project/firewall3.git] / utils.c
diff --git a/utils.c b/utils.c
index ea40974..66c1865 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -557,9 +557,7 @@ write_ipset_uci(struct uci_context *ctx, struct fw3_ipset *s,
 
        list_for_each_entry(type, &s->datatypes, list)
        {
-               sprintf(buf, "%s_%s", type->dest ? "dst" : "src",
-                                     fw3_ipset_type_names[type->type]);
-
+               sprintf(buf, "%s_%s", type->dir, fw3_ipset_type_names[type->type]);
                ptr.o      = NULL;
                ptr.option = "match";
                ptr.value  = buf;
@@ -656,6 +654,22 @@ fw3_free_object(void *obj, const void *opts)
        free(obj);
 }
 
+void
+fw3_free_list(struct list_head *head)
+{
+       struct list_head *entry, *tmp;
+
+       if (!head)
+               return;
+
+       list_for_each_safe(entry, tmp, head)
+       {
+               list_del(entry);
+               free(entry);
+       }
+
+       free(head);
+}
 
 bool
 fw3_hotplug(bool add, void *zone, void *device)