xref: /openbmc/linux/arch/powerpc/boot/stdlib.c (revision d2912cb1)
1d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
29de78277SScott Wood /*
39de78277SScott Wood  * stdlib functions
49de78277SScott Wood  *
59de78277SScott Wood  * Author: Scott Wood <scottwood@freescale.com>
69de78277SScott Wood  *
79de78277SScott Wood  * Copyright (c) 2007 Freescale Semiconductor, Inc.
89de78277SScott Wood  */
99de78277SScott Wood 
109de78277SScott Wood #include "stdlib.h"
119de78277SScott Wood 
129de78277SScott Wood /* Not currently supported: leading whitespace, sign, 0x prefix, zero base */
strtoull(const char * ptr,char ** end,int base)139de78277SScott Wood unsigned long long int strtoull(const char *ptr, char **end, int base)
149de78277SScott Wood {
159de78277SScott Wood 	unsigned long long ret = 0;
169de78277SScott Wood 
179de78277SScott Wood 	if (base > 36)
189de78277SScott Wood 		goto out;
199de78277SScott Wood 
209de78277SScott Wood 	while (*ptr) {
219de78277SScott Wood 		int digit;
229de78277SScott Wood 
239de78277SScott Wood 		if (*ptr >= '0' && *ptr <= '9' && *ptr < '0' + base)
249de78277SScott Wood 			digit = *ptr - '0';
259de78277SScott Wood 		else if (*ptr >= 'A' && *ptr < 'A' + base - 10)
269de78277SScott Wood 			digit = *ptr - 'A' + 10;
279de78277SScott Wood 		else if (*ptr >= 'a' && *ptr < 'a' + base - 10)
289de78277SScott Wood 			digit = *ptr - 'a' + 10;
299de78277SScott Wood 		else
309de78277SScott Wood 			break;
319de78277SScott Wood 
329de78277SScott Wood 		ret *= base;
339de78277SScott Wood 		ret += digit;
349de78277SScott Wood 		ptr++;
359de78277SScott Wood 	}
369de78277SScott Wood 
379de78277SScott Wood out:
389de78277SScott Wood 	if (end)
399de78277SScott Wood 		*end = (char *)ptr;
409de78277SScott Wood 
419de78277SScott Wood 	return ret;
429de78277SScott Wood }
43