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