commit 55c7ba2c76c9719617f0e76cb781fad0e26eba74 Author: Eitan Adler Date: Sat Nov 9 22:09:17 2013 -0500 Convert from a hand-rolled function to expand_number. diff --git a/usr.sbin/mptutil/mpt_config.c b/usr.sbin/mptutil/mpt_config.c index 17b9945..0d34d16 100644 --- a/usr.sbin/mptutil/mpt_config.c +++ b/usr.sbin/mptutil/mpt_config.c @@ -50,35 +50,6 @@ __RCSID("$FreeBSD$"); static void dump_config(CONFIG_PAGE_RAID_VOL_0 *vol); #endif -static long -dehumanize(const char *value) -{ - char *vtp; - long iv; - - if (value == NULL) - return (0); - iv = strtoq(value, &vtp, 0); - if (vtp == value || (vtp[0] != '\0' && vtp[1] != '\0')) { - return (0); - } - switch (vtp[0]) { - case 't': case 'T': - iv *= 1024; - case 'g': case 'G': - iv *= 1024; - case 'm': case 'M': - iv *= 1024; - case 'k': case 'K': - iv *= 1024; - case '\0': - break; - default: - return (0); - } - return (iv); -} - /* * Lock the volume by opening its /dev device read/write. This will * only work if nothing else has it opened (including mounts). We @@ -615,7 +586,7 @@ create_volume(int ac, char **av) CONFIG_PAGE_RAID_VOL_0 *vol; struct config_id_state state; struct volume_info *info; - long stripe_size; + uint64_t stripe_size; int ch, error, fd, i, quick, raid_type, verbose; #ifdef DEBUG int dump; @@ -666,7 +637,11 @@ create_volume(int ac, char **av) quick = 1; break; case 's': - stripe_size = dehumanize(optarg); + error = expand_number(optarg, &stripe_size); + if (error == -1) { + warnx("Invalid stripe size %s", optarg); + return (errno); + } if ((stripe_size < 512) || (!powerof2(stripe_size))) { warnx("Invalid stripe size %s", optarg); return (EINVAL); commit fdca0b483f9184f0a6de420086a81cfa34652a5f Author: Eitan Adler Date: Sat Nov 9 22:09:17 2013 -0500 Convert from a hand-rolled function to expand_number. Reviewed by: sbruno diff --git a/usr.sbin/mfiutil/mfi_config.c b/usr.sbin/mfiutil/mfi_config.c index a919214..abecb7d 100644 --- a/usr.sbin/mfiutil/mfi_config.c +++ b/usr.sbin/mfiutil/mfi_config.c @@ -47,35 +47,6 @@ static int add_spare(int ac, char **av); static int remove_spare(int ac, char **av); -static long -dehumanize(const char *value) -{ - char *vtp; - long iv; - - if (value == NULL) - return (0); - iv = strtoq(value, &vtp, 0); - if (vtp == value || (vtp[0] != '\0' && vtp[1] != '\0')) { - return (0); - } - switch (vtp[0]) { - case 't': case 'T': - iv *= 1024; - case 'g': case 'G': - iv *= 1024; - case 'm': case 'M': - iv *= 1024; - case 'k': case 'K': - iv *= 1024; - case '\0': - break; - default: - return (0); - } - return (iv); -} - int mfi_config_read(int fd, struct mfi_config_data **configp) { @@ -629,7 +600,11 @@ create_volume(int ac, char **av) break; #endif case 's': - stripe_size = dehumanize(optarg); + error = expand_number(optarg, &stripe_size); + if (error == -1) { + error = errno; + goto error; + } if ((stripe_size < 512) || (!powerof2(stripe_size))) stripe_size = 64 * 1024; break; commit 20ad9d0a2bd9aea4aaf7c5ae9253978ae0aed75c Author: Eitan Adler Date: Sat Nov 9 22:19:41 2013 -0500 Indicate that expand_number is case-insensitive. diff --git a/lib/libutil/expand_number.3 b/lib/libutil/expand_number.3 index f78223b..2f5871f 100644 --- a/lib/libutil/expand_number.3 +++ b/lib/libutil/expand_number.3 @@ -51,12 +51,13 @@ argument. The .Fn expand_number function +is case-insensitive and follows the SI power of two convention. .Pp The prefixes are: .Bl -column "Prefix" "Description" "1000000000000000000" -offset indent .It Sy "Prefix" Ta Sy "Description" Ta Sy "Multiplier" -.It Li k Ta No kilo Ta 1024 +.It Li K Ta No kilo Ta 1024 .It Li M Ta No mega Ta 1048576 .It Li G Ta No giga Ta 1073741824 .It Li T Ta No tera Ta 1099511627776