]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - lib/strto.c
imx: hab: Check if CSF contains deprecated commands
[people/ms/u-boot.git] / lib / strto.c
index e93a4f5491c3263ae179f6430476996538026328..7f6076909ab7401e802eac798671b79c0515a0b7 100644 (file)
 #include <errno.h>
 #include <linux/ctype.h>
 
+/* from lib/kstrtox.c */
+static const char *_parse_integer_fixup_radix(const char *s, unsigned int *base)
+{
+       if (*base == 0) {
+               if (s[0] == '0') {
+                       if (tolower(s[1]) == 'x' && isxdigit(s[2]))
+                               *base = 16;
+                       else
+                               *base = 8;
+               } else
+                       *base = 10;
+       }
+       if (*base == 16 && s[0] == '0' && tolower(s[1]) == 'x')
+               s += 2;
+       return s;
+}
+
 unsigned long simple_strtoul(const char *cp, char **endp,
                                unsigned int base)
 {
        unsigned long result = 0;
        unsigned long value;
 
-       if (*cp == '0') {
-               cp++;
-               if ((*cp == 'x') && isxdigit(cp[1])) {
-                       base = 16;
-                       cp++;
-               }
-
-               if (!base)
-                       base = 8;
-       }
-
-       if (!base)
-               base = 10;
+       cp = _parse_integer_fixup_radix(cp, &base);
 
        while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp)
            ? toupper(*cp) : *cp)-'A'+10) < base) {
@@ -128,19 +133,7 @@ unsigned long long simple_strtoull(const char *cp, char **endp,
 {
        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;
+       cp = _parse_integer_fixup_radix(cp, &base);
 
        while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp - '0'
                : (islower(*cp) ? toupper(*cp) : *cp) - 'A' + 10) < base) {