diff options
Diffstat (limited to 'utils.c')
-rw-r--r-- | utils.c | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -1517,6 +1517,39 @@ scan_again: return 0; } +/* + * This function should be only used when parsing + * command arg, it won't return error to it's + * caller and rather exit directly just like usage(). + */ +u64 arg_strtou64(const char *str) +{ + u64 value; + char *ptr_parse_end = NULL; + + value = strtoull(str, &ptr_parse_end, 0); + if (ptr_parse_end && *ptr_parse_end != '\0') { + fprintf(stderr, "ERROR: %s is not a valid numeric value.\n", + str); + exit(1); + } + /* + * if we pass a negative number to strtoull, + * it will return an unexpected number to us, + * so let's do the check ourselves. + */ + if (str[0] == '-') { + fprintf(stderr, "ERROR: %s: negative value is invalid.\n", + str); + exit(1); + } + if (value == ULLONG_MAX) { + fprintf(stderr, "ERROR: %s is too large.\n", str); + exit(1); + } + return value; +} + u64 parse_size(char *s) { int i; |