]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
xtables-compat: xtables-save: don't return 1
authorFlorian Westphal <fw@strlen.de>
Mon, 7 May 2018 11:37:45 +0000 (13:37 +0200)
committerFlorian Westphal <fw@strlen.de>
Mon, 7 May 2018 11:39:20 +0000 (13:39 +0200)
noticed that iptables-compat-save exits with 1 on success,
whereas iptables-compat-save -t filter returns 0 (as expected).

Caused by double-invert of return value, so ge rid of those.
do_output now returns a value suitable to pass to exit() or return from main.

Signed-off-by: Florian Westphal <fw@strlen.de>
iptables/nft.c
iptables/xtables-save.c

index 165fb9cf8f99d0027a7f17b4398d8930b9aab840..fcceb09c0840a474b2491bcc36a502a67e6611da 100644 (file)
@@ -1630,20 +1630,17 @@ int nft_for_each_table(struct nft_handle *h,
                       int (*func)(struct nft_handle *h, const char *tablename, bool counters),
                       bool counters)
 {
-       int ret = 1;
        struct nftnl_table_list *list;
        struct nftnl_table_list_iter *iter;
        struct nftnl_table *t;
 
        list = nftnl_table_list_get(h);
-       if (list == NULL) {
-               ret = 0;
-               goto err;
-       }
+       if (list == NULL)
+               return -1;
 
        iter = nftnl_table_list_iter_create(list);
        if (iter == NULL)
-               return 0;
+               return -1;
 
        t = nftnl_table_list_iter_next(iter);
        while (t != NULL) {
@@ -1656,10 +1653,7 @@ int nft_for_each_table(struct nft_handle *h,
        }
 
        nftnl_table_list_free(list);
-
-err:
-       /* the core expects 1 for success and 0 for error */
-       return ret == 0 ? 1 : 0;
+       return 0;
 }
 
 static int __nft_rule_del(struct nft_handle *h, struct nftnl_rule_list *list,
index 893b2b93116f876c8c344e2552279068836fd441..e5401daf7f5454cdd2390efb1495aadd5e1324ad 100644 (file)
@@ -45,16 +45,16 @@ do_output(struct nft_handle *h, const char *tablename, bool counters)
        struct nftnl_chain_list *chain_list;
 
        if (!tablename)
-               return nft_for_each_table(h, do_output, counters);
+               return nft_for_each_table(h, do_output, counters) ? 1 : 0;
 
        if (!nft_table_find(h, tablename)) {
                printf("Table `%s' does not exist\n", tablename);
-               return 0;
+               return 1;
        }
 
        if (!nft_is_table_compatible(h, tablename)) {
                printf("# Table `%s' is incompatible, use 'nft' tool.\n", tablename);
-               return 1;
+               return 0;
        }
 
        chain_list = nft_chain_dump(h);
@@ -73,8 +73,7 @@ do_output(struct nft_handle *h, const char *tablename, bool counters)
        now = time(NULL);
        printf("COMMIT\n");
        printf("# Completed on %s", ctime(&now));
-
-       return 1;
+       return 0;
 }
 
 /* Format:
@@ -176,7 +175,7 @@ xtables_save_main(int family, const char *progname, int argc, char *argv[])
                exit(0);
        }
 
-       return !do_output(&h, tablename, show_counters);
+       return do_output(&h, tablename, show_counters);
 }
 
 int xtables_ip4_save_main(int argc, char *argv[])