It makes no sense to allow zero interfaces; either a positive count is
given or -i is omitted entirely. vm.conf(5) does not allow interface
configuration that results in zero interfaces either.
$ doas vmctl start -Li0 -b ~/bsd.rd foo
vmctl: starting without disks
vmctl: started vm 6 successfully, tty /dev/ttyph
Diff below raises the minimum to one and tells more about invalid counts
with the usual strtonum(3) idiom:
$ doas vmctl start -Li-1 -b ~/bsd.rd foo
vmctl: invalid count "-1": too small
vmctl: invalid interface count: -1
$ doas ./obj/vmctl start -Li0 -b ~/bsd.rd foo
vmctl: count is too small: 0
vmctl: invalid interface count: 0
Those duplicate errors aren't easily merged without breaking consistency
with how all the command line flags are passed, so I did nothing about
this.
OK?
Index: main.c
===================================================================
RCS file: /cvs/src/usr.sbin/vmctl/main.c,v
retrieving revision 1.58
diff -u -p -r1.58 main.c
--- main.c 23 Aug 2019 07:55:20 -0000 1.58
+++ main.c 25 Oct 2019 22:48:49 -0000
@@ -373,9 +373,9 @@ parse_ifs(struct parse_result *res, char
const char *error;
if (word != NULL) {
- val = strtonum(word, 0, INT_MAX, &error);
+ val = strtonum(word, 1, INT_MAX, &error);
if (error != NULL) {
- warnx("invalid count \"%s\": %s", word, error);
+ warnx("count is %s: %s", error, word);
return (-1);
}
}