From f05f1a37cb1df5fab3419bd5c3421c9c6f03310a Mon Sep 17 00:00:00 2001 From: Andy Shevchenko Date: Mon, 20 Sep 2010 20:40:26 +0000 Subject: [PATCH] --- yaml --- r: 214599 b: refs/heads/master c: 82fd5b5d1ec370a50b3060418cde6a4ac8401117 h: refs/heads/master i: 214597: bf1805e2aa712575dd1d5977606de3d6aa1401fb 214595: d7f8d90c059a7ec628a46c0a0764bf990305cc45 214591: 062c0460869e5f70973439febc15ba7d0554bfc4 v: v3 --- [refs] | 2 +- trunk/net/core/pktgen.c | 10 ++++------ trunk/net/core/utils.c | 13 +++++++------ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index e45a7ca04d9f..7280ad66d899 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 66bb16de6b9a05936d1eeb20155bab008b476191 +refs/heads/master: 82fd5b5d1ec370a50b3060418cde6a4ac8401117 diff --git a/trunk/net/core/pktgen.c b/trunk/net/core/pktgen.c index 386c2283f14e..2c0df0f95b3d 100644 --- a/trunk/net/core/pktgen.c +++ b/trunk/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/trunk/net/core/utils.c b/trunk/net/core/utils.c index f41854470539..ec6bb322f372 100644 --- a/trunk/net/core/utils.c +++ b/trunk/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;