Commit | Line | Data |
---|---|---|
9de78277 SW |
1 | /* |
2 | * stdlib functions | |
3 | * | |
4 | * Author: Scott Wood <scottwood@freescale.com> | |
5 | * | |
6 | * Copyright (c) 2007 Freescale Semiconductor, Inc. | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify it | |
9 | * under the terms of the GNU General Public License version 2 as published | |
10 | * by the Free Software Foundation. | |
11 | */ | |
12 | ||
13 | #include "stdlib.h" | |
14 | ||
15 | /* Not currently supported: leading whitespace, sign, 0x prefix, zero base */ | |
16 | unsigned long long int strtoull(const char *ptr, char **end, int base) | |
17 | { | |
18 | unsigned long long ret = 0; | |
19 | ||
20 | if (base > 36) | |
21 | goto out; | |
22 | ||
23 | while (*ptr) { | |
24 | int digit; | |
25 | ||
26 | if (*ptr >= '0' && *ptr <= '9' && *ptr < '0' + base) | |
27 | digit = *ptr - '0'; | |
28 | else if (*ptr >= 'A' && *ptr < 'A' + base - 10) | |
29 | digit = *ptr - 'A' + 10; | |
30 | else if (*ptr >= 'a' && *ptr < 'a' + base - 10) | |
31 | digit = *ptr - 'a' + 10; | |
32 | else | |
33 | break; | |
34 | ||
35 | ret *= base; | |
36 | ret += digit; | |
37 | ptr++; | |
38 | } | |
39 | ||
40 | out: | |
41 | if (end) | |
42 | *end = (char *)ptr; | |
43 | ||
44 | return ret; | |
45 | } |