xref: /plan9/sys/src/libc/port/atol.c (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier long
atol(char * s)53e12c5d1SDavid du Colombier atol(char *s)
63e12c5d1SDavid du Colombier {
73e12c5d1SDavid du Colombier 	long n;
8*59cc4ca5SDavid du Colombier 	int f, c;
93e12c5d1SDavid du Colombier 
103e12c5d1SDavid du Colombier 	n = 0;
113e12c5d1SDavid du Colombier 	f = 0;
123e12c5d1SDavid du Colombier 	while(*s == ' ' || *s == '\t')
133e12c5d1SDavid du Colombier 		s++;
143e12c5d1SDavid du Colombier 	if(*s == '-' || *s == '+') {
153e12c5d1SDavid du Colombier 		if(*s++ == '-')
163e12c5d1SDavid du Colombier 			f = 1;
173e12c5d1SDavid du Colombier 		while(*s == ' ' || *s == '\t')
183e12c5d1SDavid du Colombier 			s++;
193e12c5d1SDavid du Colombier 	}
203e12c5d1SDavid du Colombier 	if(s[0]=='0' && s[1]) {
213e12c5d1SDavid du Colombier 		if(s[1]=='x' || s[1]=='X'){
223e12c5d1SDavid du Colombier 			s += 2;
233e12c5d1SDavid du Colombier 			for(;;) {
24*59cc4ca5SDavid du Colombier 				c = *s;
25*59cc4ca5SDavid du Colombier 				if(c >= '0' && c <= '9')
26*59cc4ca5SDavid du Colombier 					n = n*16 + c - '0';
27*59cc4ca5SDavid du Colombier 				else
28*59cc4ca5SDavid du Colombier 				if(c >= 'a' && c <= 'f')
29*59cc4ca5SDavid du Colombier 					n = n*16 + c - 'a' + 10;
30*59cc4ca5SDavid du Colombier 				else
31*59cc4ca5SDavid du Colombier 				if(c >= 'A' && c <= 'F')
32*59cc4ca5SDavid du Colombier 					n = n*16 + c - 'A' + 10;
333e12c5d1SDavid du Colombier 				else
343e12c5d1SDavid du Colombier 					break;
35*59cc4ca5SDavid du Colombier 				s++;
363e12c5d1SDavid du Colombier 			}
373e12c5d1SDavid du Colombier 		} else
383e12c5d1SDavid du Colombier 			while(*s >= '0' && *s <= '7')
393e12c5d1SDavid du Colombier 				n = n*8 + *s++ - '0';
403e12c5d1SDavid du Colombier 	} else
413e12c5d1SDavid du Colombier 		while(*s >= '0' && *s <= '9')
423e12c5d1SDavid du Colombier 			n = n*10 + *s++ - '0';
433e12c5d1SDavid du Colombier 	if(f)
443e12c5d1SDavid du Colombier 		n = -n;
453e12c5d1SDavid du Colombier 	return n;
463e12c5d1SDavid du Colombier }
473e12c5d1SDavid du Colombier 
487dd7cddfSDavid du Colombier int
atoi(char * s)493e12c5d1SDavid du Colombier atoi(char *s)
503e12c5d1SDavid du Colombier {
513e12c5d1SDavid du Colombier 
523e12c5d1SDavid du Colombier 	return atol(s);
533e12c5d1SDavid du Colombier }
54