From 07557e5612723897fee21e62795dabc0ad0925f8 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 30 Sep 2002 08:50:00 +0000 Subject: Magnus Holmgren's improved atoi() git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2446 a1c6a512-1295-4272-9138-f99709370657 --- firmware/common/atoi.c | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/firmware/common/atoi.c b/firmware/common/atoi.c index 4911d93e92..59887ec9fa 100644 --- a/firmware/common/atoi.c +++ b/firmware/common/atoi.c @@ -17,15 +17,38 @@ * ****************************************************************************/ -#include "string.h" +#include "ctype.h" int atoi (const char *str) { - int val = 0, mlt = 1; - char *p; - p = (char *) (str + strlen(str) - 1); - for (; p >= str; --p, mlt *=10) - val += (mlt * ((int)*p - '0')); - return val; -} + int value = 0; + int sign = 1; + + while (isspace(*str)) + { + str++; + } + + if ('-' == *str) + { + sign = -1; + str++; + } + else if ('+' == *str) + { + str++; + } + + while ('0' == *str) + { + str++; + } + while (isdigit(*str)) + { + value = (value * 10) + (*str - '0'); + str++; + } + + return value * sign; +} -- cgit v1.2.3