From: Mark Date: Tue, 12 Dec 2023 08:30:40 +0000 (+0100) Subject: Fix json output for -name option X-Git-Tag: v7.20~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8b3824f9e209754135e7afa52a8f056eabb3442b;p=thirdparty%2Fipset.git Fix json output for -name option When listing just the set names,json output generated key:value pairs in an array and not a map, which is invalid in json. Instead of [ "name" : "test" "name" : "test2" ] generate [ { "name" : "test" }, { "name" : "test2" } ] Fixes bugzilla #1726. Signed-off-by: Jozsef Kadlecsik --- diff --git a/lib/session.c b/lib/session.c index 944e002f..281b3141 100644 --- a/lib/session.c +++ b/lib/session.c @@ -1306,6 +1306,7 @@ callback_list(struct ipset_session *session, struct nlattr *nla[], enum ipset_cmd cmd) { struct ipset_data *data = session->data; + static bool firstipset = true; if (setjmp(printf_failure)) { session->saved_setname[0] = '\0'; @@ -1324,10 +1325,13 @@ callback_list(struct ipset_session *session, struct nlattr *nla[], if (session->mode == IPSET_LIST_XML) safe_snprintf(session, "\n", ipset_data_setname(data)); - if (session->mode == IPSET_LIST_JSON) - safe_snprintf(session, "\"name\" : \"%s\"\n", + else if (session->mode == IPSET_LIST_JSON) { + if (!firstipset) + safe_snprintf(session, ",\n"); + firstipset = false; + safe_snprintf(session, " { \"name\" : \"%s\" }", ipset_data_setname(data)); - else + } else safe_snprintf(session, "%s\n", ipset_data_setname(data)); return call_outfn(session) ? MNL_CB_ERROR : MNL_CB_OK;