atol.c - scc - simple c99 compiler
(HTM) git clone git://git.simple-cc.org/scc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
atol.c (365B)
---
1 #include <ctype.h>
2 #include <stdlib.h>
3
4 #include "../libc.h"
5
6 #undef atol
7
8 long
9 atol(const char *s)
10 {
11 int d, sign = -1;
12 long n;
13
14 while (isspace(*s))
15 ++s;
16
17 switch (*s) {
18 case '-':
19 sign = 1;
20 case '+':
21 ++s;
22 }
23
24 /* Compute n as a negative number to avoid overflow on LONG_MIN */
25 for (n = 0; (d = _dtoi(*s)) < 10; ++s)
26 n = n*10 - d;
27
28 return sign * n;
29 }