summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--c_src/cmd_format.c3
-rw-r--r--c_src/tools-util.c15
-rw-r--r--c_src/tools-util.h2
3 files changed, 18 insertions, 2 deletions
diff --git a/c_src/cmd_format.c b/c_src/cmd_format.c
index d0c8e197..152f7f37 100644
--- a/c_src/cmd_format.c
+++ b/c_src/cmd_format.c
@@ -220,8 +220,7 @@ int cmd_format(int argc, char *argv[])
unconsumed_dev_option = true;
break;
case O_version:
- if (kstrtouint(optarg, 10, &opts.version))
- die("invalid version");
+ opts.version = version_parse(optarg);
break;
case O_no_initialize:
initialize = false;
diff --git a/c_src/tools-util.c b/c_src/tools-util.c
index 3a76a02e..3df2b004 100644
--- a/c_src/tools-util.c
+++ b/c_src/tools-util.c
@@ -726,6 +726,21 @@ struct bbpos_range bbpos_range_parse(char *buf)
return (struct bbpos_range) { .start = start, .end = end };
}
+unsigned version_parse(char *buf)
+{
+ char *s = buf;
+ char *major_str = strsep(&s, ".");
+ char *minor_str = strsep(&s, ".");
+
+ unsigned major, minor;
+
+ if (kstrtouint(major_str, 10, &major) ||
+ kstrtouint(minor_str, 10, &minor))
+ die("invalid version");
+
+ return BCH_VERSION(major, minor);
+}
+
darray_str get_or_split_cmdline_devs(int argc, char *argv[])
{
darray_str ret = {};
diff --git a/c_src/tools-util.h b/c_src/tools-util.h
index 572aca05..1694ad86 100644
--- a/c_src/tools-util.h
+++ b/c_src/tools-util.h
@@ -209,6 +209,8 @@ struct bbpos_range {
struct bbpos_range bbpos_range_parse(char *);
+unsigned version_parse(char *);
+
darray_str get_or_split_cmdline_devs(int argc, char *argv[]);
#endif /* _TOOLS_UTIL_H */