[U-Boot] [PATCH v7 02/13] lib: strto: fix metric suffix parsing in strtoul[l]

Stefan Roese sr at denx.de
Sat Sep 1 08:48:25 UTC 2018


On 31.08.2018 16:57, Miquel Raynal wrote:
> While 1kB or 1kiB will be parsed correctly, 1k will return the right
> amount, but the metric suffix will not be escaped once the char
> pointer updated. Fix this situation by simplifying the move of the
> endp pointer.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>
> ---
>   lib/strto.c | 22 ++++++++++------------
>   1 file changed, 10 insertions(+), 12 deletions(-)
> 
> diff --git a/lib/strto.c b/lib/strto.c
> index 84f8d92d57..502a0153e7 100644
> --- a/lib/strto.c
> +++ b/lib/strto.c
> @@ -97,12 +97,11 @@ unsigned long ustrtoul(const char *cp, char **endp, unsigned int base)
>   	case 'K':
>   	case 'k':
>   		result *= 1024;
> -		if ((*endp)[1] == 'i') {
> -			if ((*endp)[2] == 'B')
> -				(*endp) += 3;
> -			else
> -				(*endp) += 2;
> -		}
> +		(*endp)++;
> +		if (**endp == 'i')
> +			(*endp)++;
> +		if (**endp == 'B')
> +			(*endp)++;
>   	}
>   	return result;
>   }
> @@ -122,12 +121,11 @@ unsigned long long ustrtoull(const char *cp, char **endp, unsigned int base)
>   	case 'K':
>   	case 'k':
>   		result *= 1024;
> -		if ((*endp)[1] == 'i') {
> -			if ((*endp)[2] == 'B')
> -				(*endp) += 3;
> -			else
> -				(*endp) += 2;
> -		}
> +		(*endp)++;
> +		if (**endp == 'i')
> +			(*endp)++;
> +		if (**endp == 'B')
> +			(*endp)++;
>   	}
>   	return result;
>   }
> 

Even though KiB is not equal to KB in general (at least in Linux
userspace AFAIK), lets not change this in U-Boot and always use
KiB and KB as a representation for 1024 (instead of 1000). So:

Reviewed-by: Stefan Roese <sr at denx.de>

Thanks,
Stefan


More information about the U-Boot mailing list