Message ID | 1318390361-583-1-git-send-email-xiawenc@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
On Wed, 2011-10-12 at 11:32 +0800, Wayne Xia wrote: > 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. > > Signed-off-by: Wayne Xia <xiawenc@linux.vnet.ibm.com> > --- > monitor.c | 30 ++++++++++++++++++++++++++---- > 1 files changed, 26 insertions(+), 4 deletions(-) > > diff --git a/monitor.c b/monitor.c > index 31b212a..a172167 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -195,8 +195,8 @@ static inline int mon_print_count_get(const Monitor *mon) { return 0; } > > static QLIST_HEAD(mon_list, Monitor) mon_list; > > -static const mon_cmd_t mon_cmds[]; > -static const mon_cmd_t info_cmds[]; > +static mon_cmd_t mon_cmds[]; > +static mon_cmd_t info_cmds[]; > > static const mon_cmd_t qmp_cmds[]; > static const mon_cmd_t qmp_query_cmds[]; > @@ -2726,13 +2726,14 @@ int monitor_get_fd(Monitor *mon, const char *fdname) > 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" > { NULL, NULL, }, > }; > > /* 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", > .args_type = "", > @@ -5068,6 +5069,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: > @@ -5110,6 +5130,8 @@ void monitor_init(CharDriverState *chr, int flags) > QLIST_INSERT_HEAD(&mon_list, mon, entry); > if (!default_mon || (flags & MONITOR_IS_DEFAULT)) > default_mon = mon; > + > + sortcmdlist(); > } > > static void bdrv_password_cb(Monitor *mon, const char *password, void *opaque) Tested-by: Wenyi Gao <wenyi@linux.vnet.ibm.com> Work nice. Wenyi Gao
On 10/11/2011 10:32 PM, Wayne Xia wrote: > 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. > > Signed-off-by: Wayne Xia<xiawenc@linux.vnet.ibm.com> Applied. Thanks. Regards, Anthony Liguori > --- > monitor.c | 30 ++++++++++++++++++++++++++---- > 1 files changed, 26 insertions(+), 4 deletions(-) > > diff --git a/monitor.c b/monitor.c > index 31b212a..a172167 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -195,8 +195,8 @@ static inline int mon_print_count_get(const Monitor *mon) { return 0; } > > static QLIST_HEAD(mon_list, Monitor) mon_list; > > -static const mon_cmd_t mon_cmds[]; > -static const mon_cmd_t info_cmds[]; > +static mon_cmd_t mon_cmds[]; > +static mon_cmd_t info_cmds[]; > > static const mon_cmd_t qmp_cmds[]; > static const mon_cmd_t qmp_query_cmds[]; > @@ -2726,13 +2726,14 @@ int monitor_get_fd(Monitor *mon, const char *fdname) > 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" > { NULL, NULL, }, > }; > > /* 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", > .args_type = "", > @@ -5068,6 +5069,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: > @@ -5110,6 +5130,8 @@ void monitor_init(CharDriverState *chr, int flags) > QLIST_INSERT_HEAD(&mon_list, mon, entry); > if (!default_mon || (flags& MONITOR_IS_DEFAULT)) > default_mon = mon; > + > + sortcmdlist(); > } > > static void bdrv_password_cb(Monitor *mon, const char *password, void *opaque)
diff --git a/monitor.c b/monitor.c index 31b212a..a172167 100644 --- a/monitor.c +++ b/monitor.c @@ -195,8 +195,8 @@ static inline int mon_print_count_get(const Monitor *mon) { return 0; } static QLIST_HEAD(mon_list, Monitor) mon_list; -static const mon_cmd_t mon_cmds[]; -static const mon_cmd_t info_cmds[]; +static mon_cmd_t mon_cmds[]; +static mon_cmd_t info_cmds[]; static const mon_cmd_t qmp_cmds[]; static const mon_cmd_t qmp_query_cmds[]; @@ -2726,13 +2726,14 @@ int monitor_get_fd(Monitor *mon, const char *fdname) 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" { NULL, NULL, }, }; /* 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", .args_type = "", @@ -5068,6 +5069,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: @@ -5110,6 +5130,8 @@ void monitor_init(CharDriverState *chr, int flags) QLIST_INSERT_HEAD(&mon_list, mon, entry); if (!default_mon || (flags & MONITOR_IS_DEFAULT)) default_mon = mon; + + sortcmdlist(); } static void bdrv_password_cb(Monitor *mon, const char *password, void *opaque)
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. Signed-off-by: Wayne Xia <xiawenc@linux.vnet.ibm.com> --- monitor.c | 30 ++++++++++++++++++++++++++---- 1 files changed, 26 insertions(+), 4 deletions(-)