diff options
| author | Andy Shevchenko <andy.shevchenko@gmail.com> | 2010-09-20 16:40:26 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2010-09-21 21:04:45 -0400 |
| commit | 82fd5b5d1ec370a50b3060418cde6a4ac8401117 (patch) | |
| tree | d9a30b87d31636d4ad8fa0df96c9fb031564010e | |
| parent | 66bb16de6b9a05936d1eeb20155bab008b476191 (diff) | |
net: core: use kernel's converter from hex to bin
Signed-off-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | net/core/pktgen.c | 10 | ||||
| -rw-r--r-- | 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 386c2283f14e..2c0df0f95b3d 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, | |||
| 729 | *num = 0; | 729 | *num = 0; |
| 730 | 730 | ||
| 731 | for (; i < maxlen; i++) { | 731 | for (; i < maxlen; i++) { |
| 732 | int value; | ||
| 732 | char c; | 733 | char c; |
| 733 | *num <<= 4; | 734 | *num <<= 4; |
| 734 | if (get_user(c, &user_buffer[i])) | 735 | if (get_user(c, &user_buffer[i])) |
| 735 | return -EFAULT; | 736 | return -EFAULT; |
| 736 | if ((c >= '0') && (c <= '9')) | 737 | value = hex_to_bin(c); |
| 737 | *num |= c - '0'; | 738 | if (value >= 0) |
| 738 | else if ((c >= 'a') && (c <= 'f')) | 739 | *num |= value; |
| 739 | *num |= c - 'a' + 10; | ||
| 740 | else if ((c >= 'A') && (c <= 'F')) | ||
| 741 | *num |= c - 'A' + 10; | ||
| 742 | else | 740 | else |
| 743 | break; | 741 | break; |
| 744 | } | 742 | } |
diff --git a/net/core/utils.c b/net/core/utils.c index f41854470539..ec6bb322f372 100644 --- a/net/core/utils.c +++ b/net/core/utils.c | |||
| @@ -92,18 +92,19 @@ EXPORT_SYMBOL(in_aton); | |||
| 92 | 92 | ||
| 93 | static inline int xdigit2bin(char c, int delim) | 93 | static inline int xdigit2bin(char c, int delim) |
| 94 | { | 94 | { |
| 95 | int val; | ||
| 96 | |||
| 95 | if (c == delim || c == '\0') | 97 | if (c == delim || c == '\0') |
| 96 | return IN6PTON_DELIM; | 98 | return IN6PTON_DELIM; |
| 97 | if (c == ':') | 99 | if (c == ':') |
| 98 | return IN6PTON_COLON_MASK; | 100 | return IN6PTON_COLON_MASK; |
| 99 | if (c == '.') | 101 | if (c == '.') |
| 100 | return IN6PTON_DOT; | 102 | return IN6PTON_DOT; |
| 101 | if (c >= '0' && c <= '9') | 103 | |
| 102 | return (IN6PTON_XDIGIT | IN6PTON_DIGIT| (c - '0')); | 104 | val = hex_to_bin(c); |
| 103 | if (c >= 'a' && c <= 'f') | 105 | if (val >= 0) |
| 104 | return (IN6PTON_XDIGIT | (c - 'a' + 10)); | 106 | return val | IN6PTON_XDIGIT | (val < 10 ? IN6PTON_DIGIT : 0); |
| 105 | if (c >= 'A' && c <= 'F') | 107 | |
| 106 | return (IN6PTON_XDIGIT | (c - 'A' + 10)); | ||
| 107 | if (delim == -1) | 108 | if (delim == -1) |
| 108 | return IN6PTON_DELIM; | 109 | return IN6PTON_DELIM; |
| 109 | return IN6PTON_UNKNOWN; | 110 | return IN6PTON_UNKNOWN; |
