From d0542c15808825e8a57571432660e87b464beb17 Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 6 Sep 2023 00:12:39 +0200 Subject: [PATCH] add atoi function --- src/kernel/include/stdlib.h | 2 ++ src/kernel/lib/stdlib.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/kernel/include/stdlib.h b/src/kernel/include/stdlib.h index e97d284..c2535ad 100644 --- a/src/kernel/include/stdlib.h +++ b/src/kernel/include/stdlib.h @@ -1,6 +1,8 @@ #ifndef _CLIPPER_STDLIB_H_ #define _CLIPPER_STDLIB_H_ +int atoi(const char* str); + char* itoa(int value, char* buffer, int base); char* utoa(unsigned int value, char* buffer, int base); diff --git a/src/kernel/lib/stdlib.c b/src/kernel/lib/stdlib.c index 9b5c1d4..b2e4471 100644 --- a/src/kernel/lib/stdlib.c +++ b/src/kernel/lib/stdlib.c @@ -1,5 +1,34 @@ #include "stdlib.h" +int atoi(const char* str) { + // Blled away whitespace + while(*str++ == ' '); + str--; + + int val = 0; + int factor = 1; + + if (*str == '+') { + str++; + } else if (*str == '-') { + factor = -1; + str++; + } + + const char* start = str; + while (*str >= '0' && *str <= '9') { + str++; + } + + int power_of_ten = 1; + while (start < str) { + val += power_of_ten * ((*(--str)) - '0'); + power_of_ten *= 10; + } + + return factor * val; +} + char* itoa(int value, char* buffer, int base) { char* ptr; char* value_start;