monitor: Add device_add and device_del completion.
Also fix device_add completion including non-hotpluggable devices. Signed-off-by: Hani Benhabiles <hani@linux.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
bfa40f77af
commit
2da1b3abbc
|
@ -658,6 +658,7 @@ ETEXI
|
||||||
.help = "add device, like -device on the command line",
|
.help = "add device, like -device on the command line",
|
||||||
.user_print = monitor_user_noop,
|
.user_print = monitor_user_noop,
|
||||||
.mhandler.cmd_new = do_device_add,
|
.mhandler.cmd_new = do_device_add,
|
||||||
|
.command_completion = device_add_completion,
|
||||||
},
|
},
|
||||||
|
|
||||||
STEXI
|
STEXI
|
||||||
|
@ -673,6 +674,7 @@ ETEXI
|
||||||
.params = "device",
|
.params = "device",
|
||||||
.help = "remove device",
|
.help = "remove device",
|
||||||
.mhandler.cmd = hmp_device_del,
|
.mhandler.cmd = hmp_device_del,
|
||||||
|
.command_completion = device_del_completion,
|
||||||
},
|
},
|
||||||
|
|
||||||
STEXI
|
STEXI
|
||||||
|
|
2
hmp.h
2
hmp.h
|
@ -95,5 +95,7 @@ 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_add_completion(ReadLineState *rs, int nb_args, const char *str);
|
||||||
void object_del_completion(ReadLineState *rs, int nb_args, const char *str);
|
void object_del_completion(ReadLineState *rs, int nb_args, const char *str);
|
||||||
|
void device_add_completion(ReadLineState *rs, int nb_args, const char *str);
|
||||||
|
void device_del_completion(ReadLineState *rs, int nb_args, const char *str);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
36
monitor.c
36
monitor.c
|
@ -4251,11 +4251,15 @@ static const char *next_arg_type(const char *typestr)
|
||||||
return (p != NULL ? ++p : typestr);
|
return (p != NULL ? ++p : typestr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void device_add_completion(ReadLineState *rs, const char *str)
|
void device_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_DEVICE, false);
|
list = elt = object_class_get_list(TYPE_DEVICE, false);
|
||||||
|
@ -4264,7 +4268,9 @@ static void device_add_completion(ReadLineState *rs, const char *str)
|
||||||
DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data,
|
DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data,
|
||||||
TYPE_DEVICE);
|
TYPE_DEVICE);
|
||||||
name = object_class_get_name(OBJECT_CLASS(dc));
|
name = object_class_get_name(OBJECT_CLASS(dc));
|
||||||
if (!strncmp(name, str, len)) {
|
|
||||||
|
if (!dc->cannot_instantiate_with_device_add_yet
|
||||||
|
&& !strncmp(name, str, len)) {
|
||||||
readline_add_completion(rs, name);
|
readline_add_completion(rs, name);
|
||||||
}
|
}
|
||||||
elt = elt->next;
|
elt = elt->next;
|
||||||
|
@ -4296,7 +4302,7 @@ void object_add_completion(ReadLineState *rs, int nb_args, const char *str)
|
||||||
g_slist_free(list);
|
g_slist_free(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void device_del_completion(ReadLineState *rs, BusState *bus,
|
static void device_del_bus_completion(ReadLineState *rs, BusState *bus,
|
||||||
const char *str, size_t len)
|
const char *str, size_t len)
|
||||||
{
|
{
|
||||||
BusChild *kid;
|
BusChild *kid;
|
||||||
|
@ -4310,11 +4316,24 @@ static void device_del_completion(ReadLineState *rs, BusState *bus,
|
||||||
}
|
}
|
||||||
|
|
||||||
QLIST_FOREACH(dev_child, &dev->child_bus, sibling) {
|
QLIST_FOREACH(dev_child, &dev->child_bus, sibling) {
|
||||||
device_del_completion(rs, dev_child, str, len);
|
device_del_bus_completion(rs, dev_child, str, len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void device_del_completion(ReadLineState *rs, int nb_args, const char *str)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
if (nb_args != 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
len = strlen(str);
|
||||||
|
readline_set_completion_index(rs, len);
|
||||||
|
device_del_bus_completion(rs, sysbus_get_default(), str, len);
|
||||||
|
}
|
||||||
|
|
||||||
void object_del_completion(ReadLineState *rs, int nb_args, const char *str)
|
void object_del_completion(ReadLineState *rs, int nb_args, const char *str)
|
||||||
{
|
{
|
||||||
ObjectPropertyInfoList *list, *start;
|
ObjectPropertyInfoList *list, *start;
|
||||||
|
@ -4405,11 +4424,6 @@ static void monitor_find_completion_by_table(Monitor *mon,
|
||||||
readline_set_completion_index(mon->rs, strlen(str));
|
readline_set_completion_index(mon->rs, strlen(str));
|
||||||
bdrv_iterate(block_completion_it, &mbs);
|
bdrv_iterate(block_completion_it, &mbs);
|
||||||
break;
|
break;
|
||||||
case 'O':
|
|
||||||
if (!strcmp(cmd->name, "device_add") && nb_args == 2) {
|
|
||||||
device_add_completion(mon->rs, str);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 's':
|
case 's':
|
||||||
case 'S':
|
case 'S':
|
||||||
if (!strcmp(cmd->name, "sendkey")) {
|
if (!strcmp(cmd->name, "sendkey")) {
|
||||||
|
@ -4423,10 +4437,6 @@ static void monitor_find_completion_by_table(Monitor *mon,
|
||||||
} else if (!strcmp(cmd->name, "help|?")) {
|
} else if (!strcmp(cmd->name, "help|?")) {
|
||||||
monitor_find_completion_by_table(mon, cmd_table,
|
monitor_find_completion_by_table(mon, cmd_table,
|
||||||
&args[1], nb_args - 1);
|
&args[1], nb_args - 1);
|
||||||
} else if (!strcmp(cmd->name, "device_del") && nb_args == 2) {
|
|
||||||
size_t len = strlen(str);
|
|
||||||
readline_set_completion_index(mon->rs, len);
|
|
||||||
device_del_completion(mon->rs, sysbus_get_default(), str, len);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue