diff options
author | Stefan Reiter <s.reiter@proxmox.com> | 2022-02-25 09:49:47 +0100 |
---|---|---|
committer | Dr. David Alan Gilbert <dgilbert@redhat.com> | 2022-03-02 18:12:40 +0000 |
commit | 26fcd766179e8a27c4c6c702201bdb0fe60eb091 (patch) | |
tree | b9cc26900c7d9ff62af57dbdf425d759ed78406f /monitor/hmp.c | |
parent | 4ce7a08d3e3a869f89c2af622fa77e967ade7cbf (diff) | |
download | qemu-26fcd766179e8a27c4c6c702201bdb0fe60eb091.zip qemu-26fcd766179e8a27c4c6c702201bdb0fe60eb091.tar.gz qemu-26fcd766179e8a27c4c6c702201bdb0fe60eb091.tar.bz2 |
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>
Diffstat (limited to 'monitor/hmp.c')
-rw-r--r-- | monitor/hmp.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/monitor/hmp.c b/monitor/hmp.c index b20737e..5690660 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -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; |