1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * stdlib functions |
4 | * |
5 | * Author: Scott Wood <scottwood@freescale.com> |
6 | * |
7 | * Copyright (c) 2007 Freescale Semiconductor, Inc. |
8 | */ |
9 | |
10 | #include "stdlib.h" |
11 | |
12 | /* Not currently supported: leading whitespace, sign, 0x prefix, zero base */ |
13 | unsigned long long int strtoull(const char *ptr, char **end, int base) |
14 | { |
15 | unsigned long long ret = 0; |
16 | |
17 | if (base > 36) |
18 | goto out; |
19 | |
20 | while (*ptr) { |
21 | int digit; |
22 | |
23 | if (*ptr >= '0' && *ptr <= '9' && *ptr < '0' + base) |
24 | digit = *ptr - '0'; |
25 | else if (*ptr >= 'A' && *ptr < 'A' + base - 10) |
26 | digit = *ptr - 'A' + 10; |
27 | else if (*ptr >= 'a' && *ptr < 'a' + base - 10) |
28 | digit = *ptr - 'a' + 10; |
29 | else |
30 | break; |
31 | |
32 | ret *= base; |
33 | ret += digit; |
34 | ptr++; |
35 | } |
36 | |
37 | out: |
38 | if (end) |
39 | *end = (char *)ptr; |
40 | |
41 | return ret; |
42 | } |
43 | |