mirror of
https://github.com/clearlinux/graphene.git
synced 2026-09-06 05:41:37 +00:00
76 lines
2.1 KiB
C
76 lines
2.1 KiB
C
/* Copyright (C) 1991, 1997 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with the GNU C Library; if not, write to the Free
|
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
02111-1307 USA. */
|
|
|
|
#include "api.h"
|
|
|
|
long strtol(const char* s, char** endptr, int base) {
|
|
int neg = 0;
|
|
long val = 0;
|
|
|
|
// gobble initial whitespace
|
|
while (*s == ' ' || *s == '\t') {
|
|
s++;
|
|
}
|
|
|
|
// plus/minus sign
|
|
if (*s == '+')
|
|
s++;
|
|
else if (*s == '-')
|
|
s++, neg = 1;
|
|
|
|
// hex or octal base prefix
|
|
if ((base == 0 || base == 16) && (s[0] == '0' && s[1] == 'x'))
|
|
s += 2, base = 16;
|
|
else if (base == 0 && s[0] == '0')
|
|
s++, base = 8;
|
|
else if (base == 0)
|
|
base = 10;
|
|
|
|
// digits
|
|
while (1) {
|
|
int dig;
|
|
|
|
if (*s >= '0' && *s <= '9')
|
|
dig = *s - '0';
|
|
else if (*s >= 'a' && *s <= 'z')
|
|
dig = *s - 'a' + 10;
|
|
else if (*s >= 'A' && *s <= 'Z')
|
|
dig = *s - 'A' + 10;
|
|
else
|
|
break;
|
|
if (dig >= base)
|
|
break;
|
|
s++, val = (val * base) + dig;
|
|
// we don't properly detect overflow!
|
|
}
|
|
|
|
if (endptr)
|
|
*endptr = (char*)s;
|
|
return (neg ? -val : val);
|
|
}
|
|
|
|
/* Convert a string to an int. */
|
|
int atoi(const char* nptr) {
|
|
return (int)strtol(nptr, (char**)NULL, 10);
|
|
}
|
|
|
|
/* Convert a string to an long int. */
|
|
long int atol(const char* nptr) {
|
|
return strtol(nptr, (char**)NULL, 10);
|
|
}
|