mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-18 22:09:30 +02:00
lib: kstrtox: add initial value to _parse_integer_limit()
Add init parameter to _parse_integer_limit() that defines an initial value for the accumulated result when parsing an 64-bit integer. The new function prototype is adjusted so that the _parse_integer() macros stay consistent allowing for one more argument, which defaults to 0. Signed-off-by: Rodrigo Alencar <rodrigo.alencar@analog.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
committed by
Jonathan Cameron
parent
b482908f8c
commit
1eafa5eb97
+3
-2
@@ -45,6 +45,7 @@ const char *_parse_integer_fixup_radix(const char *s, unsigned int *base)
|
||||
* @base: Radix
|
||||
* @p: Where to store result
|
||||
* @max_chars: Maximum amount of characters to convert
|
||||
* @init: Initial value of the multiply-accumulate result
|
||||
*
|
||||
* Convert non-negative integer string representation in explicitly given
|
||||
* radix to an integer. If overflow occurs, value at @p is set to ULLONG_MAX.
|
||||
@@ -56,12 +57,12 @@ const char *_parse_integer_fixup_radix(const char *s, unsigned int *base)
|
||||
*/
|
||||
noinline
|
||||
unsigned int _parse_integer_limit(const char *s, unsigned int base, unsigned long long *p,
|
||||
size_t max_chars)
|
||||
size_t max_chars, unsigned long long init)
|
||||
{
|
||||
unsigned int rv, overflow = 0;
|
||||
unsigned long long res;
|
||||
|
||||
res = 0;
|
||||
res = init;
|
||||
for (rv = 0; rv < max_chars; rv++, s++) {
|
||||
unsigned int c = *s;
|
||||
unsigned int lc = _tolower(c);
|
||||
|
||||
+6
-3
@@ -7,13 +7,16 @@
|
||||
#define KSTRTOX_OVERFLOW (1U << 31)
|
||||
const char *_parse_integer_fixup_radix(const char *s, unsigned int *base);
|
||||
unsigned int _parse_integer_limit(const char *s, unsigned int base, unsigned long long *res,
|
||||
size_t max_chars);
|
||||
size_t max_chars, unsigned long long init);
|
||||
|
||||
#define _parse_integer0(s, base, res, ...) \
|
||||
_parse_integer_limit(s, base, res, INT_MAX)
|
||||
_parse_integer_limit(s, base, res, INT_MAX, 0)
|
||||
|
||||
#define _parse_integer1(s, base, res, max_chars, ...) \
|
||||
_parse_integer_limit(s, base, res, max_chars)
|
||||
_parse_integer_limit(s, base, res, max_chars, 0)
|
||||
|
||||
#define _parse_integer2(s, base, res, max_chars, init, ...) \
|
||||
_parse_integer_limit(s, base, res, max_chars, init)
|
||||
|
||||
#define _parse_integer(s, base, res, ...) \
|
||||
CONCATENATE(_parse_integer, COUNT_ARGS(__VA_ARGS__))(s, base, res, __VA_ARGS__)
|
||||
|
||||
Reference in New Issue
Block a user