54 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * From lib/cmdline.c4 */5#include <stdlib.h>6 7#if __has_attribute(__fallthrough__)8# define fallthrough __attribute__((__fallthrough__))9#else10# define fallthrough do {} while (0) /* fallthrough */11#endif12 13unsigned 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