]>
Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | // SPDX-License-Identifier: GPL-2.0-only |
9de78277 SW |
2 | /* |
3 | * stdlib functions | |
4 | * | |
5 | * Author: Scott Wood <scottwood@freescale.com> | |
6 | * | |
7 | * Copyright (c) 2007 Freescale Semiconductor, Inc. | |
9de78277 SW |
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 | } |