mirror of https://github.com/xemu-project/xemu.git
Sort the help info shown in monitor at runtime
This patch would try sort the command list in monitor at runtime. As a result, command help and help info would show a more friendly sorted command list. For eg: (qemu)help acl_add acl_policy acl_remove acl_reset acl_show balloon block_passwd ... the command list is sorted. v3: using qsort function to sort the command list. Tested-by: Wenyi Gao <wenyi@linux.vnet.ibm.com> Signed-off-by: Wayne Xia <xiawenc@linux.vnet.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
2284451019
commit
816f89256e
30
monitor.c
30
monitor.c
|
@ -199,8 +199,8 @@ static inline int mon_print_count_get(const Monitor *mon) { return 0; }
|
||||||
|
|
||||||
static QLIST_HEAD(mon_list, Monitor) mon_list;
|
static QLIST_HEAD(mon_list, Monitor) mon_list;
|
||||||
|
|
||||||
static const mon_cmd_t mon_cmds[];
|
static mon_cmd_t mon_cmds[];
|
||||||
static const mon_cmd_t info_cmds[];
|
static mon_cmd_t info_cmds[];
|
||||||
|
|
||||||
static const mon_cmd_t qmp_cmds[];
|
static const mon_cmd_t qmp_cmds[];
|
||||||
|
|
||||||
|
@ -2591,13 +2591,14 @@ int monitor_get_fd(Monitor *mon, const char *fdname)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const mon_cmd_t mon_cmds[] = {
|
/* mon_cmds and info_cmds would be sorted at runtime */
|
||||||
|
static mon_cmd_t mon_cmds[] = {
|
||||||
#include "hmp-commands.h"
|
#include "hmp-commands.h"
|
||||||
{ NULL, NULL, },
|
{ NULL, NULL, },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Please update hmp-commands.hx when adding or changing commands */
|
/* Please update hmp-commands.hx when adding or changing commands */
|
||||||
static const mon_cmd_t info_cmds[] = {
|
static mon_cmd_t info_cmds[] = {
|
||||||
{
|
{
|
||||||
.name = "version",
|
.name = "version",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
|
@ -4832,6 +4833,25 @@ static void monitor_event(void *opaque, int event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
compare_mon_cmd(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return strcmp(((const mon_cmd_t *)a)->name,
|
||||||
|
((const mon_cmd_t *)b)->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sortcmdlist(void)
|
||||||
|
{
|
||||||
|
int array_num;
|
||||||
|
int elem_size = sizeof(mon_cmd_t);
|
||||||
|
|
||||||
|
array_num = sizeof(mon_cmds)/elem_size-1;
|
||||||
|
qsort((void *)mon_cmds, array_num, elem_size, compare_mon_cmd);
|
||||||
|
|
||||||
|
array_num = sizeof(info_cmds)/elem_size-1;
|
||||||
|
qsort((void *)info_cmds, array_num, elem_size, compare_mon_cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Local variables:
|
* Local variables:
|
||||||
|
@ -4874,6 +4894,8 @@ void monitor_init(CharDriverState *chr, int flags)
|
||||||
QLIST_INSERT_HEAD(&mon_list, mon, entry);
|
QLIST_INSERT_HEAD(&mon_list, mon, entry);
|
||||||
if (!default_mon || (flags & MONITOR_IS_DEFAULT))
|
if (!default_mon || (flags & MONITOR_IS_DEFAULT))
|
||||||
default_mon = mon;
|
default_mon = mon;
|
||||||
|
|
||||||
|
sortcmdlist();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bdrv_password_cb(Monitor *mon, const char *password, void *opaque)
|
static void bdrv_password_cb(Monitor *mon, const char *password, void *opaque)
|
||||||
|
|
Loading…
Reference in New Issue