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