xref: /plan9/sys/src/libc/port/atol.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 #include <u.h>
2 #include <libc.h>
3 
4 long
5 atol(char *s)
6 {
7 	long n;
8 	int f;
9 
10 	n = 0;
11 	f = 0;
12 	while(*s == ' ' || *s == '\t')
13 		s++;
14 	if(*s == '-' || *s == '+') {
15 		if(*s++ == '-')
16 			f = 1;
17 		while(*s == ' ' || *s == '\t')
18 			s++;
19 	}
20 	if(s[0]=='0' && s[1]){
21 		if(s[1]=='x' || s[1]=='X'){
22 			s += 2;
23 			for(;;){
24 				if(*s >= '0' && *s <= '9')
25 					n = n*16 + *s++ - '0';
26 				else if(*s >= 'a' && *s <= 'f')
27 					n = n*16 + *s++ - 'a' + 10;
28 				else if(*s >= 'A' && *s <= 'F')
29 					n = n*16 + *s++ - 'A' + 10;
30 				else
31 					break;
32 			}
33 		} else
34 			while(*s >= '0' && *s <= '7')
35 				n = n*8 + *s++ - '0';
36 	} else
37 		while(*s >= '0' && *s <= '9')
38 			n = n*10 + *s++ - '0';
39 	if(f)
40 		n = -n;
41 	return n;
42 }
43 
44 atoi(char *s)
45 {
46 
47 	return atol(s);
48 }
49