From patchwork Tue Sep 21 06:40:26 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Shevchenko X-Patchwork-Id: 65275 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41B48B70A5 for ; Tue, 21 Sep 2010 16:41:41 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756187Ab0IUGk6 (ORCPT ); Tue, 21 Sep 2010 02:40:58 -0400 Received: from mail-ey0-f174.google.com ([209.85.215.174]:47899 "EHLO mail-ey0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753274Ab0IUGkq (ORCPT ); Tue, 21 Sep 2010 02:40:46 -0400 Received: by mail-ey0-f174.google.com with SMTP id 6so1820927eyb.19 for ; Mon, 20 Sep 2010 23:40:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer:in-reply-to:references:in-reply-to:references; bh=MvXLH3MdYzbQaA/nDMpUhqxQaSqcod0BGmuzzRxsqms=; b=VnE/YOWcNWZ1viSU2fT4s6QgqrdV8zng4k1AKQDUh+0+k5qMUECeBdnWeTOTiKrJgW gIS+EExDRqBbPok0STEU6JsPC+kEZWEN42cA53atRZwvmd00SulHX9XpgAxI1Q8tR+Ng 2GB/7X5fSit0ZZKjltQTXpXmrp6RAKeemtnk8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; b=WRmEqGTTbY/GVuVlS2sFcdYpJ8Hai8CFcKeRKdmq0f4I5nsyVZcqqQPTm2WxByIpdR 6EiLZ7yy8vQgmAMRigEnGRAzTk3FWbEkulo4rLtqS76vkqEnxVK0Oi+Oso7xU9P2QNFU kR3cRDrTepTG9HwxYuEvzHQo0OsgEOIMyb8Pw= Received: by 10.213.105.148 with SMTP id t20mr3710384ebo.30.1285051245232; Mon, 20 Sep 2010 23:40:45 -0700 (PDT) Received: from localhost.localdomain (79-134-110-186.cust.suomicom.fi [79.134.110.186]) by mx.google.com with ESMTPS id z55sm12308371eeh.3.2010.09.20.23.40.43 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 20 Sep 2010 23:40:44 -0700 (PDT) From: Andy Shevchenko To: linux-kernel@vger.kernel.org Cc: "David S. Miller" , netdev@vger.kernel.org, Andy Shevchenko Subject: [PATCHv1.5 3/3] net: core: use kernel's converter from hex to bin Date: Tue, 21 Sep 2010 09:40:26 +0300 Message-Id: <3998a210e172f58814e2b559f67d42c9ba78ba6a.1285051188.git.andy.shevchenko@gmail.com> X-Mailer: git-send-email 1.7.2.2 In-Reply-To: <2d00b66224535ae82be1a1e638b86b81fb890f58.1285051188.git.andy.shevchenko@gmail.com> References: <2d00b66224535ae82be1a1e638b86b81fb890f58.1285051188.git.andy.shevchenko@gmail.com> In-Reply-To: <2d00b66224535ae82be1a1e638b86b81fb890f58.1285051188.git.andy.shevchenko@gmail.com> References: <2d00b66224535ae82be1a1e638b86b81fb890f58.1285051188.git.andy.shevchenko@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Andy Shevchenko --- net/core/pktgen.c | 10 ++++------ net/core/utils.c | 13 +++++++------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 386c228..2c0df0f 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -729,16 +729,14 @@ static int hex32_arg(const char __user *user_buffer, unsigned long maxlen, *num = 0; for (; i < maxlen; i++) { + int value; char c; *num <<= 4; if (get_user(c, &user_buffer[i])) return -EFAULT; - if ((c >= '0') && (c <= '9')) - *num |= c - '0'; - else if ((c >= 'a') && (c <= 'f')) - *num |= c - 'a' + 10; - else if ((c >= 'A') && (c <= 'F')) - *num |= c - 'A' + 10; + value = hex_to_bin(c); + if (value >= 0) + *num |= value; else break; } diff --git a/net/core/utils.c b/net/core/utils.c index f418544..ec6bb32 100644 --- a/net/core/utils.c +++ b/net/core/utils.c @@ -92,18 +92,19 @@ EXPORT_SYMBOL(in_aton); static inline int xdigit2bin(char c, int delim) { + int val; + if (c == delim || c == '\0') return IN6PTON_DELIM; if (c == ':') return IN6PTON_COLON_MASK; if (c == '.') return IN6PTON_DOT; - if (c >= '0' && c <= '9') - return (IN6PTON_XDIGIT | IN6PTON_DIGIT| (c - '0')); - if (c >= 'a' && c <= 'f') - return (IN6PTON_XDIGIT | (c - 'a' + 10)); - if (c >= 'A' && c <= 'F') - return (IN6PTON_XDIGIT | (c - 'A' + 10)); + + val = hex_to_bin(c); + if (val >= 0) + return val | IN6PTON_XDIGIT | (val < 10 ? IN6PTON_DIGIT : 0); + if (delim == -1) return IN6PTON_DELIM; return IN6PTON_UNKNOWN;