diff options
Diffstat (limited to 'net/core/utils.c')
| -rw-r--r-- | net/core/utils.c | 13 | 
1 files changed, 7 insertions, 6 deletions
diff --git a/net/core/utils.c b/net/core/utils.c index f4185447053..ec6bb322f37 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;  |