Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * stdlib functions
0004  *
0005  * Author: Scott Wood <scottwood@freescale.com>
0006  *
0007  * Copyright (c) 2007 Freescale Semiconductor, Inc.
0008  */
0009 
0010 #include "stdlib.h"
0011 
0012 /* Not currently supported: leading whitespace, sign, 0x prefix, zero base */
0013 unsigned long long int strtoull(const char *ptr, char **end, int base)
0014 {
0015     unsigned long long ret = 0;
0016 
0017     if (base > 36)
0018         goto out;
0019 
0020     while (*ptr) {
0021         int digit;
0022 
0023         if (*ptr >= '0' && *ptr <= '9' && *ptr < '0' + base)
0024             digit = *ptr - '0';
0025         else if (*ptr >= 'A' && *ptr < 'A' + base - 10)
0026             digit = *ptr - 'A' + 10;
0027         else if (*ptr >= 'a' && *ptr < 'a' + base - 10)
0028             digit = *ptr - 'a' + 10;
0029         else
0030             break;
0031 
0032         ret *= base;
0033         ret += digit;
0034         ptr++;
0035     }
0036 
0037 out:
0038     if (end)
0039         *end = (char *)ptr;
0040 
0041     return ret;
0042 }