changed to wrappers for strtol(), etc.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1687 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Daniel Reinhold 2002-10-26 19:11:18 +00:00
parent a358152c0a
commit 1c7200419b

View File

@ -1,86 +1,54 @@
/*
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
/*
* Copyright (c) 2002, OpenBeOS Project.
* All rights reserved.
* Distributed under the terms of the OpenBeOS license.
*
*
* atoi.c:
* implements the standard C library functions:
* atoi, atoui, atol, atoul, atoll
* (these are all just wrappers around calls to the strto[u]l[l] functions)
*
*
* Author(s):
* Daniel Reinhold (danielre@users.sf.net)
*
*/
#include <stdlib.h>
#include <ctype.h>
static int hexval(char c)
int
atoi(const char *num)
{
if (c >= '0' && c <= '9')
return c - '0';
else if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
else if (c >= 'A' && c <= 'F')
return c - 'A' + 10;
return 0;
return (int) strtol(num, NULL, 10);
}
int atoi(const char *num)
{
int value = 0;
if (num[0] == '0' && num[1] == 'x') {
// hex
num += 2;
while (*num && isxdigit(*num))
value = value * 16 + hexval(*num++);
} else {
// decimal
while (*num && isdigit(*num))
value = value * 10 + *num++ - '0';
}
return value;
unsigned int
atoui(const char *num)
{
return (unsigned int) strtoul(num, NULL, 10);
}
unsigned int atoui(const char *num)
{
int value = 0;
if (num[0] == '0' && num[1] == 'x') {
// hex
num += 2;
while (*num && isxdigit(*num))
value = value * 16 + hexval(*num++);
} else {
// decimal
while (*num && isdigit(*num))
value = value * 10 + *num++ - '0';
}
return value;
long
atol(const char *num)
{
return strtol(num, NULL, 10);
}
long atol(const char *num)
{
int value = 0;
if (num[0] == '0' && num[1] == 'x') {
// hex
num += 2;
while (*num && isxdigit(*num))
value = value * 16 + hexval(*num++);
} else {
// decimal
while (*num && isdigit(*num))
value = value * 10 + *num++ - '0';
}
return value;
unsigned long
atoul(const char *num)
{
return strtoul(num, NULL, 10);
}
unsigned long atoul(const char *num)
{
int value = 0;
if (num[0] == '0' && num[1] == 'x') {
// hex
num += 2;
while (*num && isxdigit(*num))
value = value * 16 + hexval(*num++);
} else {
// decimal
while (*num && isdigit(*num))
value = value * 10 + *num++ - '0';
}
return value;
long long int
atoll(const char *num)
{
return strtoll(num, NULL, 10);
}