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