xref: /linux/arch/powerpc/boot/stdlib.c (revision e86908614f2c7fec401827e5cefd7a6ea9407f85)
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 }
46