diff options
author | Andrey Smirnov <andrew.smirnov@gmail.com> | 2019-01-17 16:41:42 -0800 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-01-21 09:56:50 +0100 |
commit | 92367b7b02824c65121b824cd65b4381e66983c9 (patch) | |
tree | 247f2bcad9c424aa3ac340958c5991489094d677 /lib | |
parent | a4f623587b779faa9271bf593b3e9a494bda3e49 (diff) | |
download | barebox-92367b7b02824c65121b824cd65b4381e66983c9.tar.gz barebox-92367b7b02824c65121b824cd65b4381e66983c9.tar.xz |
lib: strtox: Use plumbing from kstrtox.c
Sync up implemenations of simple_str*() functions with their kernel
counterparts in order to convert the code to use plumbing from
kstrtox.c
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/strtox.c | 102 |
1 files changed, 48 insertions, 54 deletions
diff --git a/lib/strtox.c b/lib/strtox.c index 4b601a1b39..a5b770c8ca 100644 --- a/lib/strtox.c +++ b/lib/strtox.c @@ -1,38 +1,56 @@ #include <common.h> #include <linux/ctype.h> -unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) +#include "kstrtox.h" + +/** + * simple_strtoull - convert a string to an unsigned long long + * @cp: The start of the string + * @endp: A pointer to the end of the parsed string will be placed here + * @base: The number base to use + * + * This function is obsolete. Please use kstrtoull instead. + */ +unsigned long long simple_strtoull(const char *cp, char **endp, + unsigned int base) { - unsigned long result = 0, value; - - if (*cp == '0') { - cp++; - - if ((*cp == 'x') && isxdigit(cp[1])) { - base = 16; - cp++; - } - - if (!base) - base = 8; - } + unsigned long long result; + unsigned int rv; - if (!base) - base = 10; - - while (isxdigit(*cp) && (value = isdigit(*cp) ? - *cp - '0' : toupper(*cp) - 'A' + 10) < base) { - result = result * base + value; - cp++; - } + cp = _parse_integer_fixup_radix(cp, &base); + rv = _parse_integer(cp, base, &result); + /* FIXME */ + cp += (rv & ~KSTRTOX_OVERFLOW); if (endp) *endp = (char *)cp; return result; } +EXPORT_SYMBOL(simple_strtoull); + +/** + * simple_strtoul - convert a string to an unsigned long + * @cp: The start of the string + * @endp: A pointer to the end of the parsed string will be placed here + * @base: The number base to use + * + * This function is obsolete. Please use kstrtoul instead. + */ +unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base) +{ + return simple_strtoull(cp, endp, base); +} EXPORT_SYMBOL(simple_strtoul); +/** + * simple_strtol - convert a string to a signed long + * @cp: The start of the string + * @endp: A pointer to the end of the parsed string will be placed here + * @base: The number base to use + * + * This function is obsolete. Please use kstrtol instead. + */ long simple_strtol(const char *cp, char **endp, unsigned int base) { if (*cp == '-') @@ -42,38 +60,14 @@ long simple_strtol(const char *cp, char **endp, unsigned int base) } EXPORT_SYMBOL(simple_strtol); -unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) -{ - unsigned long long result = 0, value; - - if (*cp == '0') { - cp++; - - if ((*cp == 'x') && isxdigit(cp[1])) { - base = 16; - cp++; - } - - if (!base) - base = 8; - } - - if (!base) - base = 10; - - while (isxdigit(*cp) && (value = isdigit(*cp) ? - *cp - '0' : toupper(*cp) - 'A' + 10) < base) { - result = result * base + value; - cp++; - } - - if (endp) - *endp = (char *)cp; - - return result; -} -EXPORT_SYMBOL(simple_strtoull); - +/** + * simple_strtoll - convert a string to a signed long long + * @cp: The start of the string + * @endp: A pointer to the end of the parsed string will be placed here + * @base: The number base to use + * + * This function is obsolete. Please use kstrtoll instead. + */ long long simple_strtoll(const char *cp, char **endp, unsigned int base) { if (*cp == '-') |