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 Yangunsigned 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