From patchwork Mon Jun 16 09:10:16 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ana Rey X-Patchwork-Id: 359983 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 9E5F1140082 for ; Mon, 16 Jun 2014 19:10:39 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754798AbaFPJKe (ORCPT ); Mon, 16 Jun 2014 05:10:34 -0400 Received: from mail-wg0-f46.google.com ([74.125.82.46]:50723 "EHLO mail-wg0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754747AbaFPJKd (ORCPT ); Mon, 16 Jun 2014 05:10:33 -0400 Received: by mail-wg0-f46.google.com with SMTP id y10so5271477wgg.29 for ; Mon, 16 Jun 2014 02:10:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=JrHDbS+azbIKpak6VPeZW0uUV1u/SuGkX39vGb/YeG0=; b=s8DsKmTmZHkOEj7IfmSIaG6pQhudKBXtZwLH3E5IZh9qezz+bQgXW1dK/ooiJpcRwW iNIL3ZfFxqPRuUkocMJ1UjinFZiPoK57vGeZ5RIyWTPooYW/N+sLepG5dCtWZncobyld RkuEhCm7e6/XF1RlPtcCh2HmflZiBAdhF53NFsc60LSEsp6ctc3aNSPba5Yl5PvKV848 bwl24rUV13u/lPIiJa8eA+J1SHqhZ44gv43kMGNnbV68HRTwIrDY0q9gMpBcZIp2lhj7 B0nQeTHCDRVHfP5TFgfKPoJSo4HPiM+SkBM9TNJjMVMLshXDusWgbAVToTGs1X0WJFBi wjeQ== X-Received: by 10.194.240.129 with SMTP id wa1mr26538859wjc.11.1402909832092; Mon, 16 Jun 2014 02:10:32 -0700 (PDT) Received: from localhost.localdomain (186.169.216.87.static.jazztel.es. [87.216.169.186]) by mx.google.com with ESMTPSA id rw4sm17777004wjb.44.2014.06.16.02.10.30 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 16 Jun 2014 02:10:31 -0700 (PDT) From: Ana Rey To: netfilter-devel@vger.kernel.org Cc: Ana Rey Subject: [libnftnl PATCH 3/4] expr: limit: Do not print unset values in json Date: Mon, 16 Jun 2014 11:10:16 +0200 Message-Id: <1402909817-25325-4-git-send-email-anarey@gmail.com> X-Mailer: git-send-email 2.0.0 In-Reply-To: <1402909817-25325-1-git-send-email-anarey@gmail.com> References: <1402909817-25325-1-git-send-email-anarey@gmail.com> Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org It changes the parse and the snprint functions to omit unset values. Now, This part of a json file is gotten without unset elements. {"expr":[{"type":"limit","rate":400,"unit":60}]} Signed-off-by: Ana Rey --- src/expr/limit.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/expr/limit.c b/src/expr/limit.c index 6e0a732..6732318 100644 --- a/src/expr/limit.c +++ b/src/expr/limit.c @@ -124,15 +124,11 @@ static int nft_rule_expr_limit_json_parse(struct nft_rule_expr *e, json_t *root, #ifdef JSON_PARSING uint64_t uval64; - if (nft_jansson_parse_val(root, "rate", NFT_TYPE_U64, &uval64, err) < 0) - return -1; - - nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_RATE, uval64); + if (nft_jansson_parse_val(root, "rate", NFT_TYPE_U64, &uval64, err) == 0) + nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_RATE, uval64); - if (nft_jansson_parse_val(root, "unit", NFT_TYPE_U64, &uval64, err) < 0) - return -1; - - nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_UNIT, uval64); + if (nft_jansson_parse_val(root, "unit", NFT_TYPE_U64, &uval64, err) == 0) + nft_rule_expr_set_u64(e, NFT_EXPR_LIMIT_UNIT, uval64); return 0; #else @@ -191,10 +187,24 @@ static int nft_rule_expr_limit_snprintf_xml(char *buf, size_t len, static int nft_rule_expr_limit_snprintf_json(char *buf, size_t len, struct nft_rule_expr *e) { struct nft_expr_limit *limit = nft_expr_data(e); + int ret, size = len, offset = 0; - return snprintf(buf, len, "\"rate\":%"PRIu64"," - "\"unit\":%"PRIu64"", - limit->rate, limit->unit); + if (e->flags & (1 << NFT_EXPR_LIMIT_RATE)) { + ret = snprintf(buf + offset, len, "\"rate\":%"PRIu64",", + limit->rate); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + } + if (e->flags & (1 << NFT_EXPR_LIMIT_UNIT)) { + ret = snprintf(buf + offset, len, "\"unit\":%"PRIu64",", + limit->unit); + SNPRINTF_BUFFER_SIZE(ret, size, len, offset); + } + + /* Remove the last comma characther */ + if (offset > 0) + offset--; + + return offset; } static int nft_rule_expr_limit_snprintf_default(char *buf, size_t len,