From patchwork Thu Jan 18 18:13:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Serhey Popovych X-Patchwork-Id: 863054 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="N3BIW+FF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zMsYZ2lNXz9s71 for ; Fri, 19 Jan 2018 05:14:42 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755504AbeARSOU (ORCPT ); Thu, 18 Jan 2018 13:14:20 -0500 Received: from mail-lf0-f65.google.com ([209.85.215.65]:34507 "EHLO mail-lf0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752368AbeARSOS (ORCPT ); Thu, 18 Jan 2018 13:14:18 -0500 Received: by mail-lf0-f65.google.com with SMTP id k19so7592499lfj.1 for ; Thu, 18 Jan 2018 10:14:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=4lkbjbowKtx4JSly4C3GZp09NBc3lmCBWrXO2m9F/Sg=; b=N3BIW+FFBr7aGd/36mJE4gKbhDBP0IbNYceQ3De8uFqT72445bNNTdDGNZuRXboz9Y QWt2/AZgxpYQktBJ8YQ8Gydz2l8rWUaAVL5pQBL4nz9uw+I6clsr8UB0Woak9wfV50gC Iwd5tBAQYCUs1VWsrhJg4LxTLqI1VtbeR+P/p6IkMTpU3WiiwVWqfCs9vRRFOSiww//H ikSE8k/hsGRjiUdc2gH7RyGPXt+UlTpDVEEtaUNwZnP8OPgwfqmLL+1ufzELjzEVzQX7 KX8RJKsYOYYX8EIASnY08WcTrQbdjp3cLnydik3IaMM2dszr61179i/WwqDkvbVTsxmK FTiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=4lkbjbowKtx4JSly4C3GZp09NBc3lmCBWrXO2m9F/Sg=; b=tfdXeXtTit8iDRwaBV8iRq1Wejfi3go8tEmTscCrb12PAcSToT4Tgz/d/M8BFFA5j8 Ilu9nelrSx0ycButScqdQta1CJyiBc/2UJghYXAbRhUNHX5ylkXL0LceNmFnuwIieh43 YQ1OvU1u7Yt+SRaMaLs675wGdfThIGB3J3GCrBXhdBODTWMMFGHTFKr7jtRAorTwANOd o17amyFm0beM8O+lgYL8fkZXYiLebmcXFwv6gt1/ZlbWX+Ub456wn854NVpZg5XVU/p6 ydlBzvLmhgfrc+5xPczLMt/WutKH0/aH8qYiNkwJyxZ+IMKJ4LpfuAxoQOzMm/YrJcfh /GfA== X-Gm-Message-State: AKwxyteH8xEXei3AE4YyeOKgjYumL4iYdiX6VycxQ7yZPRZktyvLBmuj yVHha8Fzcj5NeRXPSLaKwLjvtg== X-Google-Smtp-Source: ACJfBosnadUKQ7g3/b3IYgLmq9pyC5KsZCIJTFxxY2YKv8kzM9QK6mZ8AJy92uEeOdXuUPUYzUDEsw== X-Received: by 10.25.24.85 with SMTP id o82mr15379190lfi.88.1516299256472; Thu, 18 Jan 2018 10:14:16 -0800 (PST) Received: from tuxracer.localdomain ([2a01:6d80::195:20:96:53]) by smtp.gmail.com with ESMTPSA id l187sm1319975lfg.12.2018.01.18.10.14.15 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 18 Jan 2018 10:14:15 -0800 (PST) From: Serhey Popovych To: netdev@vger.kernel.org Subject: [PATCH iproute2 2/6] utils: Always specify family and ->bytelen in get_prefix_1() Date: Thu, 18 Jan 2018 20:13:43 +0200 Message-Id: <1516299227-26724-3-git-send-email-serhe.popovych@gmail.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1516299227-26724-1-git-send-email-serhe.popovych@gmail.com> References: <1516299227-26724-1-git-send-email-serhe.popovych@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Handle default/all/any special case in get_addr_1() to setup ->family and ->bytelen correctly. Make get_addr_1() return ->bitlen == -2 instead of -1 to distinguish default/all/any special case from the rest: it is safe because all callers check ->bitlen < 0, not explicit value -1. Reduce intendation by one level and get rid of goto/label to make code more readable. Signed-off-by: Serhey Popovych --- lib/utils.c | 64 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/lib/utils.c b/lib/utils.c index a023e74..48c4bcb 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -545,7 +545,7 @@ int get_addr_1(inet_prefix *addr, const char *name, int family) return -1; addr->family = (family != AF_UNSPEC) ? family : AF_INET; addr->bytelen = af_byte_len(addr->family); - addr->bitlen = -1; + addr->bitlen = -2; return 0; } @@ -644,46 +644,46 @@ int af_byte_len(int af) int get_prefix_1(inet_prefix *dst, char *arg, int family) { - int err; - unsigned int plen; char *slash; - - memset(dst, 0, sizeof(*dst)); - - if (strcmp(arg, "default") == 0 || - strcmp(arg, "any") == 0 || - strcmp(arg, "all") == 0) { - if ((family == AF_DECnet) || (family == AF_MPLS)) - return -1; - dst->family = family; - dst->bytelen = 0; - dst->bitlen = 0; - dst->flags |= PREFIXLEN_SPECIFIED; - return 0; - } + int err, bitlen, flags; slash = strchr(arg, '/'); if (slash) *slash = 0; err = get_addr_1(dst, arg, family); - if (err == 0) { - dst->bitlen = af_bit_len(dst->family); - - if (slash) { - if (get_netmask(&plen, slash+1, 0) - || plen > dst->bitlen) { - err = -1; - goto done; - } - dst->flags |= PREFIXLEN_SPECIFIED; - dst->bitlen = plen; - } - } -done: + if (slash) *slash = '/'; - return err; + + if (err) + return err; + + bitlen = af_bit_len(dst->family); + + flags = PREFIXLEN_SPECIFIED; + if (slash) { + unsigned int plen; + + if (dst->bitlen == -2) + return -1; + if (get_netmask(&plen, slash + 1, 0)) + return -1; + if (plen > bitlen) + return -1; + + bitlen = plen; + } else { + if (dst->bitlen == -2) + bitlen = 0; + else + flags = 0; + } + + dst->flags |= flags; + dst->bitlen = bitlen; + + return 0; } static const char *family_name_verbose(int family)