The parse_size() wrapper around scan_scaled(3) writes its intermediate
result to the function argument which is always passed as literal zero.
This seems odd, the function parameter has no meaning but merely serves
as storage, so let's use a proper function scoped variable instead.
OK?
Index: main.c
===================================================================
RCS file: /cvs/src/usr.sbin/vmctl/main.c,v
retrieving revision 1.59
diff -u -p -r1.59 main.c
--- main.c 27 Oct 2019 08:59:48 -0000 1.59
+++ main.c 6 Dec 2019 17:46:54 -0000
@@ -407,8 +407,10 @@ parse_network(struct parse_result *res,
}
int
-parse_size(struct parse_result *res, char *word, long long val)
+parse_size(struct parse_result *res, char *word)
{
+ long long val = 0;
+
if (word != NULL) {
if (scan_scaled(word, &val) != 0) {
warn("invalid size: %s", word);
@@ -576,7 +578,7 @@ ctl_create(struct parse_result *res, int
err(1, "unveil");
break;
case 's':
- if (parse_size(res, optarg, 0) != 0)
+ if (parse_size(res, optarg) != 0)
errx(1, "invalid size: %s", optarg);
break;
default:
@@ -872,7 +874,7 @@ ctl_start(struct parse_result *res, int
case 'm':
if (res->size)
errx(1, "memory specified multiple times");
- if (parse_size(res, optarg, 0) != 0)
+ if (parse_size(res, optarg) != 0)
errx(1, "invalid memory size: %s", optarg);
break;
case 'n':
Index: vmctl.h
===================================================================
RCS file: /cvs/src/usr.sbin/vmctl/vmctl.h,v
retrieving revision 1.32
diff -u -p -r1.32 vmctl.h
--- vmctl.h 11 May 2019 23:07:46 -0000 1.32
+++ vmctl.h 6 Dec 2019 17:42:51 -0000
@@ -77,7 +77,7 @@ struct imsgbuf *ibuf;
int vmmaction(struct parse_result *);
int parse_ifs(struct parse_result *, char *, int);
int parse_network(struct parse_result *, char *);
-int parse_size(struct parse_result *, char *, long long);
+int parse_size(struct parse_result *, char *);
int parse_disktype(const char *, const char **);
int parse_disk(struct parse_result *, char *, int);
int parse_vmid(struct parse_result *, char *, int);