xref: /OK3568_Linux_fs/u-boot/lib/stdlib.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #include <linux/ctype.h>
7*4882a593Smuzhiyun #include <linux/types.h>
8*4882a593Smuzhiyun 
atol(const char * nptr)9*4882a593Smuzhiyun long atol(const char *nptr)
10*4882a593Smuzhiyun {
11*4882a593Smuzhiyun 	int c;
12*4882a593Smuzhiyun 	long total;
13*4882a593Smuzhiyun 	int sign;
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun 	while (isspace((int)(unsigned char)*nptr))
16*4882a593Smuzhiyun 		++nptr;
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun 	c = (int)(unsigned char)*nptr++;
19*4882a593Smuzhiyun 	sign = c;
20*4882a593Smuzhiyun 	if (c == '-' || c == '+')
21*4882a593Smuzhiyun 		c = (int)(unsigned char)*nptr++;
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun 	total = 0;
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun 	while (isdigit(c)) {
26*4882a593Smuzhiyun 		total = 10 * total + (c - '0');
27*4882a593Smuzhiyun 		c = (int)(unsigned char)*nptr++;
28*4882a593Smuzhiyun 	}
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun 	if (sign == '-')
31*4882a593Smuzhiyun 		return -total;
32*4882a593Smuzhiyun 	else
33*4882a593Smuzhiyun 		return total;
34*4882a593Smuzhiyun }
35*4882a593Smuzhiyun 
atoi(const char * nptr)36*4882a593Smuzhiyun int atoi(const char *nptr)
37*4882a593Smuzhiyun {
38*4882a593Smuzhiyun 	return (int)atol(nptr);
39*4882a593Smuzhiyun }
40