summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/stdlib.C40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/lib/stdlib.C b/src/lib/stdlib.C
index a7c694f9d..2688959bd 100644
--- a/src/lib/stdlib.C
+++ b/src/lib/stdlib.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2010,2018 */
+/* Contributors Listed Below - COPYRIGHT 2010,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -161,3 +161,41 @@ void* calloc(size_t num, size_t size)
return mem;
}
+uint64_t strtoul(const char *nptr, char **endptr, int base)
+{
+ uint64_t l_data = 0;
+ size_t i = 0;
+ while( nptr[i] != '\0' )
+ {
+ uint64_t l_nib = 0;
+ switch(nptr[i])
+ {
+ // handle leading '0x' or 'x'
+ case('x'): case('X'):
+ l_data = 0;
+ break;
+ case('0'): l_nib = 0; break;
+ case('1'): l_nib = 1; break;
+ case('2'): l_nib = 2; break;
+ case('3'): l_nib = 3; break;
+ case('4'): l_nib = 4; break;
+ case('5'): l_nib = 5; break;
+ case('6'): l_nib = 6; break;
+ case('7'): l_nib = 7; break;
+ case('8'): l_nib = 8; break;
+ case('9'): l_nib = 9; break;
+ case('A'): case('a'): l_nib = 0xA; break;
+ case('B'): case('b'): l_nib = 0xB; break;
+ case('C'): case('c'): l_nib = 0xC; break;
+ case('D'): case('d'): l_nib = 0xD; break;
+ case('E'): case('e'): l_nib = 0xE; break;
+ case('F'): case('f'): l_nib = 0xF; break;
+ default:
+ return 0ULL;
+ }
+ l_data <<= 4;
+ l_data |= l_nib;
+ i++;
+ }
+ return l_data;
+}
OpenPOWER on IntegriCloud