Subject: Re: [PATCH] net: add mac_pton() for parsing MAC address

From: Stephen Hemminger <[email-masked]>
Date: Wed, 4 May 2011 08:12:25 -0700

On Wed, 4 May 2011 09:15:51 +0300
Alexey Dobriyan <[email-masked]> wrote:

> +int mac_pton(const char *s, u8 *mac)
> +{
> +	int i;
> +
> +	/* XX:XX:XX:XX:XX:XX */
> +	if (strlen(s) < 3 * ETH_ALEN - 1)
> +		return 0;
> +
> +	/* Don't half dirty result. */
Shouldn't this be "Don't allow dirty result."?

> +	for (i = 0; i < ETH_ALEN; i++) {
> +		if (!strchr("0123456789abcdefABCDEF", s[i * 3]))
> +			return 0;
> +		if (!strchr("0123456789abcdefABCDEF", s[i * 3 + 1]))
> +			return 0;

		if (!isxdigit(s[i*3]) || !isxdigit(s[i*3+1]))
			return 0;

> +		if (i != ETH_ALEN - 1 && s[i * 3 + 2] != ':')
> +			return 0;
> +	}
> +	for (i = 0; i < ETH_ALEN; i++) {
> +		mac[i] = (hex_to_bin(s[i * 3]) << 4) | hex_to_bin(s[i * 3 + 1]);
		hex2bin(&mac[i], &s[i*3], 1);
> +	}
> +	return 1;
> +}
> +EXPORT_SYMBOL(mac_pton);

Also don't need two loops, okay to parse partial result.