xref: /aosp_15_r20/external/musl/src/stdlib/atoll.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include <stdlib.h>
2*c9945492SAndroid Build Coastguard Worker #include <ctype.h>
3*c9945492SAndroid Build Coastguard Worker 
atoll(const char * s)4*c9945492SAndroid Build Coastguard Worker long long atoll(const char *s)
5*c9945492SAndroid Build Coastguard Worker {
6*c9945492SAndroid Build Coastguard Worker 	long long n=0;
7*c9945492SAndroid Build Coastguard Worker 	int neg=0;
8*c9945492SAndroid Build Coastguard Worker 	while (isspace(*s)) s++;
9*c9945492SAndroid Build Coastguard Worker 	switch (*s) {
10*c9945492SAndroid Build Coastguard Worker 	case '-': neg=1;
11*c9945492SAndroid Build Coastguard Worker 	case '+': s++;
12*c9945492SAndroid Build Coastguard Worker 	}
13*c9945492SAndroid Build Coastguard Worker 	/* Compute n as a negative number to avoid overflow on LLONG_MIN */
14*c9945492SAndroid Build Coastguard Worker 	while (isdigit(*s))
15*c9945492SAndroid Build Coastguard Worker 		n = 10*n - (*s++ - '0');
16*c9945492SAndroid Build Coastguard Worker 	return neg ? n : -n;
17*c9945492SAndroid Build Coastguard Worker }
18