On Tue, Jan 20, 2026 at 05:12:27PM +0300, Dmitry Antipov wrote:
> Introduce 'memvalue()' which uses 'memparse()' to parse a string
> with optional memory suffix into a non-negative number. If parsing
> has succeeded, returns 0 and stores the result at the location
> specified by the second argument. Otherwise returns -EINVAL and
> leaves the location untouched.
...
> +/**
> + * memvalue - Wrap memparse() with simple error detection
> + * @ptr: Where parse begins
> + * @valptr: Where to store result
> + *
> + * Uses memparse() to parse a string into a number stored at
> + * @valptr, leaving memory at @valptr untouched in case of error.
> + *
> + * Return: -EINVAL for a presumably negative value or if an
> + * unrecognized character was encountered, and 0 otherwise.
> + */
> +int __must_check memvalue(const char *ptr, unsigned long long *valptr)
> +{
> + unsigned long long ret;
> + char *end;
> +
> + if (*ptr == '-')
> + return -EINVAL;
> + ret = memparse(ptr, &end);
> + if (*end)
> + return -EINVAL;
> + *valptr = ret;
> + return 0;
> +}
My questions seem left unsettled:
- why -EINVAL in the first place and not -ERANGE in the first place;
- why do we need this patch _at all_ based on the how callers are
doing now (w.o. this change), i.o.w. why the memparse() can't be
used directly.
--
With Best Regards,
Andy Shevchenko