From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55025) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WmWb6-0001BH-RZ for qemu-devel@nongnu.org; Mon, 19 May 2014 19:04:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WmWb0-0006jQ-Kq for qemu-devel@nongnu.org; Mon, 19 May 2014 19:03:56 -0400 Received: from mail-wg0-x232.google.com ([2a00:1450:400c:c00::232]:64586) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WmWb0-0006j0-ES for qemu-devel@nongnu.org; Mon, 19 May 2014 19:03:50 -0400 Received: by mail-wg0-f50.google.com with SMTP id x12so8442467wgg.33 for ; Mon, 19 May 2014 16:03:49 -0700 (PDT) From: Hani Benhabiles Date: Tue, 20 May 2014 00:03:20 +0100 Message-Id: <1400540600-1328-8-git-send-email-kroosec@gmail.com> In-Reply-To: <1400540600-1328-1-git-send-email-kroosec@gmail.com> References: <1400540600-1328-1-git-send-email-kroosec@gmail.com> Subject: [Qemu-devel] [PATCH 7/7] monitor: Add delvm and loadvm argument completion. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, mdroth@linux.vnet.ibm.com, lcapitulino@redhat.com, stefanha@redhat.com, imammedo@redhat.com Signed-off-by: Hani Benhabiles --- hmp-commands.hx | 2 ++ hmp.h | 2 ++ monitor.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/hmp-commands.hx b/hmp-commands.hx index 935f744..d68a00b 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -335,6 +335,7 @@ ETEXI .params = "tag|id", .help = "restore a VM snapshot from its tag or id", .mhandler.cmd = do_loadvm, + .command_completion = loadvm_completion, }, STEXI @@ -350,6 +351,7 @@ ETEXI .params = "tag|id", .help = "delete a VM snapshot from its tag or id", .mhandler.cmd = do_delvm, + .command_completion = delvm_completion, }, STEXI diff --git a/hmp.h b/hmp.h index a53ad51..2d9b0a2 100644 --- a/hmp.h +++ b/hmp.h @@ -112,5 +112,7 @@ void migrate_set_capability_completion(ReadLineState *rs, int nb_args, void host_net_add_completion(ReadLineState *rs, int nb_args, const char *str); void host_net_remove_completion(ReadLineState *rs, int nb_args, const char *str); +void delvm_completion(ReadLineState *rs, int nb_args, const char *str); +void loadvm_completion(ReadLineState *rs, int nb_args, const char *str); #endif diff --git a/monitor.c b/monitor.c index 805d29f..b6ac4e0 100644 --- a/monitor.c +++ b/monitor.c @@ -69,6 +69,7 @@ #include "qmp-commands.h" #include "hmp.h" #include "qemu/thread.h" +#include "block/qapi.h" /* for pic/irq_info */ #if defined(TARGET_SPARC) @@ -4645,6 +4646,53 @@ void host_net_remove_completion(ReadLineState *rs, int nb_args, const char *str) } } +static void vm_completion(ReadLineState *rs, const char *str) +{ + size_t len; + BlockDriverState *bs = NULL; + + len = strlen(str); + readline_set_completion_index(rs, len); + while ((bs = bdrv_next(bs))) { + SnapshotInfoList *snapshots, *snapshot; + + if (!bdrv_can_snapshot(bs)) { + continue; + } + if (bdrv_query_snapshot_info_list(bs, &snapshots, NULL)) { + continue; + } + snapshot = snapshots; + while (snapshot) { + char *completion = snapshot->value->name; + if (!strncmp(str, completion, len)) { + readline_add_completion(rs, completion); + } + completion = snapshot->value->id; + if (!strncmp(str, completion, len)) { + readline_add_completion(rs, completion); + } + snapshot = snapshot->next; + } + qapi_free_SnapshotInfoList(snapshots); + } + +} + +void delvm_completion(ReadLineState *rs, int nb_args, const char *str) +{ + if (nb_args == 2) { + vm_completion(rs, str); + } +} + +void loadvm_completion(ReadLineState *rs, int nb_args, const char *str) +{ + if (nb_args == 2) { + vm_completion(rs, str); + } +} + static void monitor_find_completion_by_table(Monitor *mon, const mon_cmd_t *cmd_table, char **args, -- 1.8.3.2