Loading hmp-commands.hx +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading hmp.h +2 −0 Original line number Diff line number Diff line Loading @@ -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 monitor.c +48 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ #include "qmp-commands.h" #include "hmp.h" #include "qemu/thread.h" #include "block/qapi.h" /* for pic/irq_info */ #if defined(TARGET_SPARC) Loading Loading @@ -4648,6 +4649,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, Loading Loading
hmp-commands.hx +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading
hmp.h +2 −0 Original line number Diff line number Diff line Loading @@ -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
monitor.c +48 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ #include "qmp-commands.h" #include "hmp.h" #include "qemu/thread.h" #include "block/qapi.h" /* for pic/irq_info */ #if defined(TARGET_SPARC) Loading Loading @@ -4648,6 +4649,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, Loading