diff options
-rw-r--r-- | utils.c | 33 | ||||
-rw-r--r-- | utils.h | 1 |
2 files changed, 34 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; @@ -70,6 +70,7 @@ int pretty_size_snprintf(u64 size, char *str, size_t str_bytes); int get_mountpt(char *dev, char *mntpt, size_t size); int btrfs_scan_block_devices(int run_ioctl); u64 parse_size(char *s); +u64 arg_strtou64(const char *str); int open_file_or_dir(const char *fname, DIR **dirstream); void close_file_or_dir(int fd, DIR *dirstream); int get_fs_info(char *path, struct btrfs_ioctl_fs_info_args *fi_args, |