提交 bfa40f77 编写于 作者: H Hani Benhabiles 提交者: Luiz Capitulino

monitor: Add command_completion callback to mon_cmd_t.

Convert object_add and object_del commands to use the new callback.
Signed-off-by: NHani Benhabiles <hani@linux.com>
Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
上级 f7bdc41a
...@@ -1254,6 +1254,7 @@ ETEXI ...@@ -1254,6 +1254,7 @@ ETEXI
.params = "[qom-type=]type,id=str[,prop=value][,...]", .params = "[qom-type=]type,id=str[,prop=value][,...]",
.help = "create QOM object", .help = "create QOM object",
.mhandler.cmd = hmp_object_add, .mhandler.cmd = hmp_object_add,
.command_completion = object_add_completion,
}, },
STEXI STEXI
...@@ -1268,6 +1269,7 @@ ETEXI ...@@ -1268,6 +1269,7 @@ ETEXI
.params = "id", .params = "id",
.help = "destroy QOM object", .help = "destroy QOM object",
.mhandler.cmd = hmp_object_del, .mhandler.cmd = hmp_object_del,
.command_completion = object_del_completion,
}, },
STEXI STEXI
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#define HMP_H #define HMP_H
#include "qemu-common.h" #include "qemu-common.h"
#include "qemu/readline.h"
#include "qapi-types.h" #include "qapi-types.h"
#include "qapi/qmp/qdict.h" #include "qapi/qmp/qdict.h"
...@@ -92,5 +93,7 @@ void hmp_qemu_io(Monitor *mon, const QDict *qdict); ...@@ -92,5 +93,7 @@ void hmp_qemu_io(Monitor *mon, const QDict *qdict);
void hmp_cpu_add(Monitor *mon, const QDict *qdict); void hmp_cpu_add(Monitor *mon, const QDict *qdict);
void hmp_object_add(Monitor *mon, const QDict *qdict); void hmp_object_add(Monitor *mon, const QDict *qdict);
void hmp_object_del(Monitor *mon, const QDict *qdict); void hmp_object_del(Monitor *mon, const QDict *qdict);
void object_add_completion(ReadLineState *rs, int nb_args, const char *str);
void object_del_completion(ReadLineState *rs, int nb_args, const char *str);
#endif #endif
...@@ -137,6 +137,7 @@ typedef struct mon_cmd_t { ...@@ -137,6 +137,7 @@ typedef struct mon_cmd_t {
* used, and mhandler of 1st level plays the role of help function. * used, and mhandler of 1st level plays the role of help function.
*/ */
struct mon_cmd_t *sub_table; struct mon_cmd_t *sub_table;
void (*command_completion)(ReadLineState *rs, int nb_args, const char *str);
} mon_cmd_t; } mon_cmd_t;
/* file descriptors passed via SCM_RIGHTS */ /* file descriptors passed via SCM_RIGHTS */
...@@ -4271,11 +4272,15 @@ static void device_add_completion(ReadLineState *rs, const char *str) ...@@ -4271,11 +4272,15 @@ static void device_add_completion(ReadLineState *rs, const char *str)
g_slist_free(list); g_slist_free(list);
} }
static void object_add_completion(ReadLineState *rs, const char *str) void object_add_completion(ReadLineState *rs, int nb_args, const char *str)
{ {
GSList *list, *elt; GSList *list, *elt;
size_t len; size_t len;
if (nb_args != 2) {
return;
}
len = strlen(str); len = strlen(str);
readline_set_completion_index(rs, len); readline_set_completion_index(rs, len);
list = elt = object_class_get_list(TYPE_USER_CREATABLE, false); list = elt = object_class_get_list(TYPE_USER_CREATABLE, false);
...@@ -4310,11 +4315,14 @@ static void device_del_completion(ReadLineState *rs, BusState *bus, ...@@ -4310,11 +4315,14 @@ static void device_del_completion(ReadLineState *rs, BusState *bus,
} }
} }
static void object_del_completion(ReadLineState *rs, const char *str) void object_del_completion(ReadLineState *rs, int nb_args, const char *str)
{ {
ObjectPropertyInfoList *list, *start; ObjectPropertyInfoList *list, *start;
size_t len; size_t len;
if (nb_args != 2) {
return;
}
len = strlen(str); len = strlen(str);
readline_set_completion_index(rs, len); readline_set_completion_index(rs, len);
...@@ -4368,6 +4376,9 @@ static void monitor_find_completion_by_table(Monitor *mon, ...@@ -4368,6 +4376,9 @@ static void monitor_find_completion_by_table(Monitor *mon,
return monitor_find_completion_by_table(mon, cmd->sub_table, return monitor_find_completion_by_table(mon, cmd->sub_table,
&args[1], nb_args - 1); &args[1], nb_args - 1);
} }
if (cmd->command_completion) {
return cmd->command_completion(mon->rs, nb_args, args[nb_args - 1]);
}
ptype = next_arg_type(cmd->args_type); ptype = next_arg_type(cmd->args_type);
for(i = 0; i < nb_args - 2; i++) { for(i = 0; i < nb_args - 2; i++) {
...@@ -4397,8 +4408,6 @@ static void monitor_find_completion_by_table(Monitor *mon, ...@@ -4397,8 +4408,6 @@ static void monitor_find_completion_by_table(Monitor *mon,
case 'O': case 'O':
if (!strcmp(cmd->name, "device_add") && nb_args == 2) { if (!strcmp(cmd->name, "device_add") && nb_args == 2) {
device_add_completion(mon->rs, str); device_add_completion(mon->rs, str);
} else if (!strcmp(cmd->name, "object_add") && nb_args == 2) {
object_add_completion(mon->rs, str);
} }
break; break;
case 's': case 's':
...@@ -4418,8 +4427,6 @@ static void monitor_find_completion_by_table(Monitor *mon, ...@@ -4418,8 +4427,6 @@ static void monitor_find_completion_by_table(Monitor *mon,
size_t len = strlen(str); size_t len = strlen(str);
readline_set_completion_index(mon->rs, len); readline_set_completion_index(mon->rs, len);
device_del_completion(mon->rs, sysbus_get_default(), str, len); device_del_completion(mon->rs, sysbus_get_default(), str, len);
} else if (!strcmp(cmd->name, "object_del") && nb_args == 2) {
object_del_completion(mon->rs, str);
} }
break; break;
default: default:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册