monitor/hmp: add support for flag argument with value

Adds support for the "-xs" parameter type, where "-x" denotes a flag
name and the "s" suffix indicates that this flag is supposed to take
an arbitrary string parameter.

These parameters are always optional, the entry in the qdict will be
omitted if the flag is not given.

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
[FE: fixed typo pointed out by Eric Blake
     use s instead of V to indicate string parameter]
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Message-Id: <20220225084949.35746-2-f.ebner@proxmox.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
Stefan Reiter 2022-02-25 09:49:47 +01:00 committed by Dr. David Alan Gilbert
parent 4ce7a08d3e
commit 26fcd76617
2 changed files with 20 additions and 2 deletions

View File

@ -981,6 +981,7 @@ static QDict *monitor_parse_arguments(Monitor *mon,
{
const char *tmp = p;
int skip_key = 0;
int ret;
/* option */
c = *typestr++;
@ -1003,11 +1004,27 @@ static QDict *monitor_parse_arguments(Monitor *mon,
}
if (skip_key) {
p = tmp;
} else if (*typestr == 's') {
/* has option with string value */
typestr++;
tmp = p++;
while (qemu_isspace(*p)) {
p++;
}
ret = get_str(buf, sizeof(buf), &p);
if (ret < 0) {
monitor_printf(mon, "%s: value expected for -%c\n",
cmd->name, *tmp);
goto fail;
}
qdict_put_str(qdict, key, buf);
} else {
/* has option */
/* has boolean option */
p++;
qdict_put_bool(qdict, key, true);
}
} else if (*typestr == 's') {
typestr++;
}
}
break;

View File

@ -63,7 +63,8 @@
* '.' other form of optional type (for 'i' and 'l')
* 'b' boolean
* user mode accepts "on" or "off"
* '-' optional parameter (eg. '-f')
* '-' optional parameter (eg. '-f'); if followed by a 's', it
* specifies an optional string param (e.g. '-fs' allows '-f foo')
*
*/