xref: /linux-6.15/tools/lib/cmdline.c (revision a88cde57)
1*a88cde57SWei Yang // SPDX-License-Identifier: GPL-2.0-only
2*a88cde57SWei Yang /*
3*a88cde57SWei Yang  * From lib/cmdline.c
4*a88cde57SWei Yang  */
5*a88cde57SWei Yang #include <stdlib.h>
6*a88cde57SWei Yang 
7*a88cde57SWei Yang #if __has_attribute(__fallthrough__)
8*a88cde57SWei Yang # define fallthrough                    __attribute__((__fallthrough__))
9*a88cde57SWei Yang #else
10*a88cde57SWei Yang # define fallthrough                    do {} while (0)  /* fallthrough */
11*a88cde57SWei Yang #endif
12*a88cde57SWei Yang 
memparse(const char * ptr,char ** retptr)13*a88cde57SWei Yang unsigned long long memparse(const char *ptr, char **retptr)
14*a88cde57SWei Yang {
15*a88cde57SWei Yang 	char *endptr;	/* local pointer to end of parsed string */
16*a88cde57SWei Yang 
17*a88cde57SWei Yang 	unsigned long long ret = strtoll(ptr, &endptr, 0);
18*a88cde57SWei Yang 
19*a88cde57SWei Yang 	switch (*endptr) {
20*a88cde57SWei Yang 	case 'E':
21*a88cde57SWei Yang 	case 'e':
22*a88cde57SWei Yang 		ret <<= 10;
23*a88cde57SWei Yang 		fallthrough;
24*a88cde57SWei Yang 	case 'P':
25*a88cde57SWei Yang 	case 'p':
26*a88cde57SWei Yang 		ret <<= 10;
27*a88cde57SWei Yang 		fallthrough;
28*a88cde57SWei Yang 	case 'T':
29*a88cde57SWei Yang 	case 't':
30*a88cde57SWei Yang 		ret <<= 10;
31*a88cde57SWei Yang 		fallthrough;
32*a88cde57SWei Yang 	case 'G':
33*a88cde57SWei Yang 	case 'g':
34*a88cde57SWei Yang 		ret <<= 10;
35*a88cde57SWei Yang 		fallthrough;
36*a88cde57SWei Yang 	case 'M':
37*a88cde57SWei Yang 	case 'm':
38*a88cde57SWei Yang 		ret <<= 10;
39*a88cde57SWei Yang 		fallthrough;
40*a88cde57SWei Yang 	case 'K':
41*a88cde57SWei Yang 	case 'k':
42*a88cde57SWei Yang 		ret <<= 10;
43*a88cde57SWei Yang 		endptr++;
44*a88cde57SWei Yang 		fallthrough;
45*a88cde57SWei Yang 	default:
46*a88cde57SWei Yang 		break;
47*a88cde57SWei Yang 	}
48*a88cde57SWei Yang 
49*a88cde57SWei Yang 	if (retptr)
50*a88cde57SWei Yang 		*retptr = endptr;
51*a88cde57SWei Yang 
52*a88cde57SWei Yang 	return ret;
53*a88cde57SWei Yang }
54