Fixed buffer overflow in mserver; fixed type of checkinfo () 2nd parameter; memory
[ZeXOS.git] / libc / stdlib / atoll.c
blob952ff91d2c0cabc9f97f17f6c0326b235be25e0b
1 /*
2 * ZeX/OS
3 * Copyright (C) 2010 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 long long atoll (const char *s)
21 char **endptr = (char **) &s;
22 int base = 10;
24 int nDigit;
25 long long acc = 0;
27 while((nDigit = *s) != 0)
29 // Convert to digit
30 nDigit -= '0';
31 if(nDigit > 9)
32 nDigit -= ('A' - '9' - 1);
33 if(nDigit > base - 1)
34 break;
36 // Move the value to the next rank and add the digit
37 acc *= base;
38 acc += nDigit;
39 s ++;
42 if(endptr != 0)
43 *endptr = (char *) s;
45 return acc;