| // SPDX-License-Identifier: GPL-2.0-only |
| /* |
| * From lib/cmdline.c |
| */ |
| #include <stdlib.h> |
| |
| #if __has_attribute(__fallthrough__) |
| # define fallthrough __attribute__((__fallthrough__)) |
| #else |
| # define fallthrough do {} while (0) /* fallthrough */ |
| #endif |
| |
| unsigned long long memparse(const char *ptr, char **retptr) |
| { |
| char *endptr; /* local pointer to end of parsed string */ |
| |
| unsigned long long ret = strtoll(ptr, &endptr, 0); |
| |
| switch (*endptr) { |
| case 'E': |
| case 'e': |
| ret <<= 10; |
| fallthrough; |
| case 'P': |
| case 'p': |
| ret <<= 10; |
| fallthrough; |
| case 'T': |
| case 't': |
| ret <<= 10; |
| fallthrough; |
| case 'G': |
| case 'g': |
| ret <<= 10; |
| fallthrough; |
| case 'M': |
| case 'm': |
| ret <<= 10; |
| fallthrough; |
| case 'K': |
| case 'k': |
| ret <<= 10; |
| endptr++; |
| fallthrough; |
| default: |
| break; |
| } |
| |
| if (retptr) |
| *retptr = endptr; |
| |
| return ret; |
| } |