Re: [Qemu-devel] [PATCH 1/3] qom: introduce object_class_get_list_sorted
On 08.03.2018 18:28, Paolo Bonzini wrote: > Unify half a dozen copies of very similar code (the only difference being > whether comparisons were case-sensitive) and use it also in Tricore, > which did not do any sorting of CPU model names. > > Signed-off-by: Paolo Bonzini> --- > include/qom/object.h| 11 +++ > qdev-monitor.c | 9 + > qom/object.c| 13 + > target/alpha/cpu.c | 15 +-- > target/hppa/cpu.c | 15 +-- > target/lm32/cpu.c | 15 +-- > target/sh4/cpu.c| 15 +-- > target/tricore/helper.c | 2 +- > 8 files changed, 30 insertions(+), 65 deletions(-) Reviewed-by: Thomas Huth
Re: [Qemu-devel] [PATCH 1/3] qom: introduce object_class_get_list_sorted
On 03/08/2018 02:28 PM, Paolo Bonzini wrote: > Unify half a dozen copies of very similar code (the only difference being > whether comparisons were case-sensitive) and use it also in Tricore, > which did not do any sorting of CPU model names. > > Signed-off-by: Paolo BonziniReviewed-by: Philippe Mathieu-Daudé > --- > include/qom/object.h| 11 +++ > qdev-monitor.c | 9 + > qom/object.c| 13 + > target/alpha/cpu.c | 15 +-- > target/hppa/cpu.c | 15 +-- > target/lm32/cpu.c | 15 +-- > target/sh4/cpu.c| 15 +-- > target/tricore/helper.c | 2 +- > 8 files changed, 30 insertions(+), 65 deletions(-) > > diff --git a/include/qom/object.h b/include/qom/object.h > index 4f07090db0..96ce81bc5e 100644 > --- a/include/qom/object.h > +++ b/include/qom/object.h > @@ -913,6 +913,17 @@ void object_class_foreach(void (*fn)(ObjectClass *klass, > void *opaque), > GSList *object_class_get_list(const char *implements_type, >bool include_abstract); > > +/** > + * object_class_get_list_sorted: > + * @implements_type: The type to filter for, including its derivatives. > + * @include_abstract: Whether to include abstract classes. > + * > + * Returns: A singly-linked list of the classes in alphabetical > + * case-insensitive order. > + */ > +GSList *object_class_get_list_sorted(const char *implements_type, > + bool include_abstract); > + > /** > * object_ref: > * @obj: the object > diff --git a/qdev-monitor.c b/qdev-monitor.c > index b7e3291f8b..61e0300991 100644 > --- a/qdev-monitor.c > +++ b/qdev-monitor.c > @@ -122,12 +122,6 @@ static void qdev_print_devinfo(DeviceClass *dc) > error_printf("\n"); > } > > -static gint devinfo_cmp(gconstpointer a, gconstpointer b) > -{ > -return strcasecmp(object_class_get_name((ObjectClass *)a), > - object_class_get_name((ObjectClass *)b)); > -} > - > static void qdev_print_devinfos(bool show_no_user) > { > static const char *cat_name[DEVICE_CATEGORY_MAX + 1] = { > @@ -146,8 +140,7 @@ static void qdev_print_devinfos(bool show_no_user) > int i; > bool cat_printed; > > -list = g_slist_sort(object_class_get_list(TYPE_DEVICE, false), > -devinfo_cmp); > +list = object_class_get_list_sorted(TYPE_DEVICE, false); > > for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) { > cat_printed = false; > diff --git a/qom/object.c b/qom/object.c > index 755ad03819..6088f55943 100644 > --- a/qom/object.c > +++ b/qom/object.c > @@ -891,6 +891,19 @@ GSList *object_class_get_list(const char > *implements_type, > return list; > } > > +static gint object_class_cmp(gconstpointer a, gconstpointer b) > +{ > +return strcasecmp(object_class_get_name((ObjectClass *)a), > + object_class_get_name((ObjectClass *)b)); > +} > + > +GSList *object_class_get_list_sorted(const char *implements_type, > + bool include_abstract) > +{ > +return g_slist_sort(object_class_get_list(implements_type, > include_abstract), > +object_class_cmp); > +} > + > void object_ref(Object *obj) > { > if (!obj) { > diff --git a/target/alpha/cpu.c b/target/alpha/cpu.c > index 55675ce419..b08078e7fc 100644 > --- a/target/alpha/cpu.c > +++ b/target/alpha/cpu.c > @@ -71,18 +71,6 @@ static void alpha_cpu_realizefn(DeviceState *dev, Error > **errp) > acc->parent_realize(dev, errp); > } > > -/* Sort alphabetically by type name. */ > -static gint alpha_cpu_list_compare(gconstpointer a, gconstpointer b) > -{ > -ObjectClass *class_a = (ObjectClass *)a; > -ObjectClass *class_b = (ObjectClass *)b; > -const char *name_a, *name_b; > - > -name_a = object_class_get_name(class_a); > -name_b = object_class_get_name(class_b); > -return strcmp(name_a, name_b); > -} > - > static void alpha_cpu_list_entry(gpointer data, gpointer user_data) > { > ObjectClass *oc = data; > @@ -100,8 +88,7 @@ void alpha_cpu_list(FILE *f, fprintf_function cpu_fprintf) > }; > GSList *list; > > -list = object_class_get_list(TYPE_ALPHA_CPU, false); > -list = g_slist_sort(list, alpha_cpu_list_compare); > +list = object_class_get_list_sorted(TYPE_ALPHA_CPU, false); > (*cpu_fprintf)(f, "Available CPUs:\n"); > g_slist_foreach(list, alpha_cpu_list_entry, ); > g_slist_free(list); > diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c > index 969f628f0a..c261b6b090 100644 > --- a/target/hppa/cpu.c > +++ b/target/hppa/cpu.c > @@ -110,18 +110,6 @@ static void hppa_cpu_realizefn(DeviceState *dev, Error > **errp) > #endif > } > > -/* Sort hppabetically by type name. */ > -static gint hppa_cpu_list_compare(gconstpointer a, gconstpointer b) > -{ > -ObjectClass *class_a = (ObjectClass *)a; > -
[Qemu-devel] [PATCH 1/3] qom: introduce object_class_get_list_sorted
Unify half a dozen copies of very similar code (the only difference being whether comparisons were case-sensitive) and use it also in Tricore, which did not do any sorting of CPU model names. Signed-off-by: Paolo Bonzini--- include/qom/object.h| 11 +++ qdev-monitor.c | 9 + qom/object.c| 13 + target/alpha/cpu.c | 15 +-- target/hppa/cpu.c | 15 +-- target/lm32/cpu.c | 15 +-- target/sh4/cpu.c| 15 +-- target/tricore/helper.c | 2 +- 8 files changed, 30 insertions(+), 65 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index 4f07090db0..96ce81bc5e 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -913,6 +913,17 @@ void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque), GSList *object_class_get_list(const char *implements_type, bool include_abstract); +/** + * object_class_get_list_sorted: + * @implements_type: The type to filter for, including its derivatives. + * @include_abstract: Whether to include abstract classes. + * + * Returns: A singly-linked list of the classes in alphabetical + * case-insensitive order. + */ +GSList *object_class_get_list_sorted(const char *implements_type, + bool include_abstract); + /** * object_ref: * @obj: the object diff --git a/qdev-monitor.c b/qdev-monitor.c index b7e3291f8b..61e0300991 100644 --- a/qdev-monitor.c +++ b/qdev-monitor.c @@ -122,12 +122,6 @@ static void qdev_print_devinfo(DeviceClass *dc) error_printf("\n"); } -static gint devinfo_cmp(gconstpointer a, gconstpointer b) -{ -return strcasecmp(object_class_get_name((ObjectClass *)a), - object_class_get_name((ObjectClass *)b)); -} - static void qdev_print_devinfos(bool show_no_user) { static const char *cat_name[DEVICE_CATEGORY_MAX + 1] = { @@ -146,8 +140,7 @@ static void qdev_print_devinfos(bool show_no_user) int i; bool cat_printed; -list = g_slist_sort(object_class_get_list(TYPE_DEVICE, false), -devinfo_cmp); +list = object_class_get_list_sorted(TYPE_DEVICE, false); for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) { cat_printed = false; diff --git a/qom/object.c b/qom/object.c index 755ad03819..6088f55943 100644 --- a/qom/object.c +++ b/qom/object.c @@ -891,6 +891,19 @@ GSList *object_class_get_list(const char *implements_type, return list; } +static gint object_class_cmp(gconstpointer a, gconstpointer b) +{ +return strcasecmp(object_class_get_name((ObjectClass *)a), + object_class_get_name((ObjectClass *)b)); +} + +GSList *object_class_get_list_sorted(const char *implements_type, + bool include_abstract) +{ +return g_slist_sort(object_class_get_list(implements_type, include_abstract), +object_class_cmp); +} + void object_ref(Object *obj) { if (!obj) { diff --git a/target/alpha/cpu.c b/target/alpha/cpu.c index 55675ce419..b08078e7fc 100644 --- a/target/alpha/cpu.c +++ b/target/alpha/cpu.c @@ -71,18 +71,6 @@ static void alpha_cpu_realizefn(DeviceState *dev, Error **errp) acc->parent_realize(dev, errp); } -/* Sort alphabetically by type name. */ -static gint alpha_cpu_list_compare(gconstpointer a, gconstpointer b) -{ -ObjectClass *class_a = (ObjectClass *)a; -ObjectClass *class_b = (ObjectClass *)b; -const char *name_a, *name_b; - -name_a = object_class_get_name(class_a); -name_b = object_class_get_name(class_b); -return strcmp(name_a, name_b); -} - static void alpha_cpu_list_entry(gpointer data, gpointer user_data) { ObjectClass *oc = data; @@ -100,8 +88,7 @@ void alpha_cpu_list(FILE *f, fprintf_function cpu_fprintf) }; GSList *list; -list = object_class_get_list(TYPE_ALPHA_CPU, false); -list = g_slist_sort(list, alpha_cpu_list_compare); +list = object_class_get_list_sorted(TYPE_ALPHA_CPU, false); (*cpu_fprintf)(f, "Available CPUs:\n"); g_slist_foreach(list, alpha_cpu_list_entry, ); g_slist_free(list); diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c index 969f628f0a..c261b6b090 100644 --- a/target/hppa/cpu.c +++ b/target/hppa/cpu.c @@ -110,18 +110,6 @@ static void hppa_cpu_realizefn(DeviceState *dev, Error **errp) #endif } -/* Sort hppabetically by type name. */ -static gint hppa_cpu_list_compare(gconstpointer a, gconstpointer b) -{ -ObjectClass *class_a = (ObjectClass *)a; -ObjectClass *class_b = (ObjectClass *)b; -const char *name_a, *name_b; - -name_a = object_class_get_name(class_a); -name_b = object_class_get_name(class_b); -return strcmp(name_a, name_b); -} - static void hppa_cpu_list_entry(gpointer data, gpointer user_data) { ObjectClass *oc = data; @@ -138,8 +126,7 @@ void hppa_cpu_list(FILE *f, fprintf_function
Re: [Qemu-devel] [PATCH 1/3] qom: introduce object_class_get_list_sorted
On 06.03.2018 20:45, Paolo Bonzini wrote: > Unify half a dozen copies of very similar code (the only difference being > whether comparisons were case-sensitive) and use it also in Tricore, > which did not do any sorting of CPU model names. > > Signed-off-by: Paolo Bonzini> --- [...] > diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c > index 969f628f0a..c261b6b090 100644 > --- a/target/hppa/cpu.c > +++ b/target/hppa/cpu.c > @@ -110,18 +110,6 @@ static void hppa_cpu_realizefn(DeviceState *dev, Error > **errp) > #endif > } > > -/* Sort hppabetically by type name. */ Oh, what a pity to see that "hppabetically" go away, that looked like a really neat search-and-replace bug :-) Anyway, patch looks fine to me: Reviewed-by: Thomas Huth
Re: [Qemu-devel] [PATCH 1/3] qom: introduce object_class_get_list_sorted
On 03/06/2018 01:49 PM, Paolo Bonzini wrote: > Unify half a dozen copies of very similar code (the only difference being > whether comparisons were case-sensitive) and use it also in Tricore, > which did not do any sorting of CPU model names. > > Signed-off-by: Paolo BonziniReviewed-by: Philippe Mathieu-Daudé > --- > include/qom/object.h| 10 ++ > qdev-monitor.c | 9 + > qom/object.c| 14 ++ > target/alpha/cpu.c | 15 +-- > target/hppa/cpu.c | 14 +- > target/lm32/cpu.c | 15 +-- > target/sh4/cpu.c| 15 +-- > target/tricore/helper.c | 2 +- > 8 files changed, 30 insertions(+), 64 deletions(-) > > diff --git a/include/qom/object.h b/include/qom/object.h > index 4f07090db0..12c0f58c8f 100644 > --- a/include/qom/object.h > +++ b/include/qom/object.h > @@ -913,6 +913,17 @@ void object_class_foreach(void (*fn)(ObjectClass *klass, > void *opaque), > GSList *object_class_get_list(const char *implements_type, >bool include_abstract); > > +/** > + * object_class_get_list_sorted: > + * @implements_type: The type to filter for, including its derivatives. > + * @include_abstract: Whether to include abstract classes. > + * > + * Returns: A singly-linked list of the classes in alphabetical > + * case-insensitive order. > + */ > +GSList *object_class_get_list_sorted(const char *implements_type, > + bool include_abstract); > + > /** > * object_ref: > * @obj: the object > diff --git a/qdev-monitor.c b/qdev-monitor.c > index b7e3291f8b..61e0300991 100644 > --- a/qdev-monitor.c > +++ b/qdev-monitor.c > @@ -122,12 +122,6 @@ static void qdev_print_devinfo(DeviceClass *dc) > error_printf("\n"); > } > > -static gint devinfo_cmp(gconstpointer a, gconstpointer b) > -{ > -return strcasecmp(object_class_get_name((ObjectClass *)a), > - object_class_get_name((ObjectClass *)b)); > -} > - > static void qdev_print_devinfos(bool show_no_user) > { > static const char *cat_name[DEVICE_CATEGORY_MAX + 1] = { > @@ -146,8 +140,7 @@ static void qdev_print_devinfos(bool show_no_user) > int i; > bool cat_printed; > > -list = g_slist_sort(object_class_get_list(TYPE_DEVICE, false), > -devinfo_cmp); > +list = object_class_get_list_sorted(TYPE_DEVICE, false); > > for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) { > cat_printed = false; > diff --git a/qom/object.c b/qom/object.c > index 755ad03819..6088f55943 100644 > --- a/qom/object.c > +++ b/qom/object.c > @@ -891,6 +891,19 @@ GSList *object_class_get_list(const char > *implements_type, > return list; > } > > +static gint object_class_cmp(gconstpointer a, gconstpointer b) > +{ > +return strcasecmp(object_class_get_name((ObjectClass *)a), > + object_class_get_name((ObjectClass *)b)); > +} > + > +GSList *object_class_get_list_sorted(const char *implements_type, > + bool include_abstract) > +{ > +return g_slist_sort(object_class_get_list(implements_type, > include_abstract), > +object_class_cmp); > +} > + > void object_ref(Object *obj) > { > if (!obj) { > diff --git a/target/alpha/cpu.c b/target/alpha/cpu.c > index 55675ce419..b08078e7fc 100644 > --- a/target/alpha/cpu.c > +++ b/target/alpha/cpu.c > @@ -71,18 +71,6 @@ static void alpha_cpu_realizefn(DeviceState *dev, Error > **errp) > acc->parent_realize(dev, errp); > } > > -/* Sort alphabetically by type name. */ > -static gint alpha_cpu_list_compare(gconstpointer a, gconstpointer b) > -{ > -ObjectClass *class_a = (ObjectClass *)a; > -ObjectClass *class_b = (ObjectClass *)b; > -const char *name_a, *name_b; > - > -name_a = object_class_get_name(class_a); > -name_b = object_class_get_name(class_b); > -return strcmp(name_a, name_b); > -} > - > static void alpha_cpu_list_entry(gpointer data, gpointer user_data) > { > ObjectClass *oc = data; > @@ -100,8 +88,7 @@ void alpha_cpu_list(FILE *f, fprintf_function cpu_fprintf) > }; > GSList *list; > > -list = object_class_get_list(TYPE_ALPHA_CPU, false); > -list = g_slist_sort(list, alpha_cpu_list_compare); > +list = object_class_get_list_sorted(TYPE_ALPHA_CPU, false); > (*cpu_fprintf)(f, "Available CPUs:\n"); > g_slist_foreach(list, alpha_cpu_list_entry, ); > g_slist_free(list); > diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c > index 969f628f0a..e5da8c3cab 100644 > --- a/target/hppa/cpu.c > +++ b/target/hppa/cpu.c > @@ -110,18 +110,6 @@ static void hppa_cpu_realizefn(DeviceState *dev, Error > **errp) > #endif > } > > -/* Sort hppabetically by type name. */ > -static gint hppa_cpu_list_compare(gconstpointer a, gconstpointer b) > -{ > -ObjectClass *class_a = (ObjectClass *)a; > -
[Qemu-devel] [PATCH 1/3] qom: introduce object_class_get_list_sorted
Unify half a dozen copies of very similar code (the only difference being whether comparisons were case-sensitive) and use it also in Tricore, which did not do any sorting of CPU model names. Signed-off-by: Paolo Bonzini--- include/qom/object.h| 11 +++ qdev-monitor.c | 9 + qom/object.c| 13 + target/alpha/cpu.c | 15 +-- target/hppa/cpu.c | 15 +-- target/lm32/cpu.c | 15 +-- target/sh4/cpu.c| 15 +-- target/tricore/helper.c | 2 +- 8 files changed, 30 insertions(+), 65 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index 4f07090db0..96ce81bc5e 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -913,6 +913,17 @@ void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque), GSList *object_class_get_list(const char *implements_type, bool include_abstract); +/** + * object_class_get_list_sorted: + * @implements_type: The type to filter for, including its derivatives. + * @include_abstract: Whether to include abstract classes. + * + * Returns: A singly-linked list of the classes in alphabetical + * case-insensitive order. + */ +GSList *object_class_get_list_sorted(const char *implements_type, + bool include_abstract); + /** * object_ref: * @obj: the object diff --git a/qdev-monitor.c b/qdev-monitor.c index b7e3291f8b..61e0300991 100644 --- a/qdev-monitor.c +++ b/qdev-monitor.c @@ -122,12 +122,6 @@ static void qdev_print_devinfo(DeviceClass *dc) error_printf("\n"); } -static gint devinfo_cmp(gconstpointer a, gconstpointer b) -{ -return strcasecmp(object_class_get_name((ObjectClass *)a), - object_class_get_name((ObjectClass *)b)); -} - static void qdev_print_devinfos(bool show_no_user) { static const char *cat_name[DEVICE_CATEGORY_MAX + 1] = { @@ -146,8 +140,7 @@ static void qdev_print_devinfos(bool show_no_user) int i; bool cat_printed; -list = g_slist_sort(object_class_get_list(TYPE_DEVICE, false), -devinfo_cmp); +list = object_class_get_list_sorted(TYPE_DEVICE, false); for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) { cat_printed = false; diff --git a/qom/object.c b/qom/object.c index 755ad03819..6088f55943 100644 --- a/qom/object.c +++ b/qom/object.c @@ -891,6 +891,19 @@ GSList *object_class_get_list(const char *implements_type, return list; } +static gint object_class_cmp(gconstpointer a, gconstpointer b) +{ +return strcasecmp(object_class_get_name((ObjectClass *)a), + object_class_get_name((ObjectClass *)b)); +} + +GSList *object_class_get_list_sorted(const char *implements_type, + bool include_abstract) +{ +return g_slist_sort(object_class_get_list(implements_type, include_abstract), +object_class_cmp); +} + void object_ref(Object *obj) { if (!obj) { diff --git a/target/alpha/cpu.c b/target/alpha/cpu.c index 55675ce419..b08078e7fc 100644 --- a/target/alpha/cpu.c +++ b/target/alpha/cpu.c @@ -71,18 +71,6 @@ static void alpha_cpu_realizefn(DeviceState *dev, Error **errp) acc->parent_realize(dev, errp); } -/* Sort alphabetically by type name. */ -static gint alpha_cpu_list_compare(gconstpointer a, gconstpointer b) -{ -ObjectClass *class_a = (ObjectClass *)a; -ObjectClass *class_b = (ObjectClass *)b; -const char *name_a, *name_b; - -name_a = object_class_get_name(class_a); -name_b = object_class_get_name(class_b); -return strcmp(name_a, name_b); -} - static void alpha_cpu_list_entry(gpointer data, gpointer user_data) { ObjectClass *oc = data; @@ -100,8 +88,7 @@ void alpha_cpu_list(FILE *f, fprintf_function cpu_fprintf) }; GSList *list; -list = object_class_get_list(TYPE_ALPHA_CPU, false); -list = g_slist_sort(list, alpha_cpu_list_compare); +list = object_class_get_list_sorted(TYPE_ALPHA_CPU, false); (*cpu_fprintf)(f, "Available CPUs:\n"); g_slist_foreach(list, alpha_cpu_list_entry, ); g_slist_free(list); diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c index 969f628f0a..c261b6b090 100644 --- a/target/hppa/cpu.c +++ b/target/hppa/cpu.c @@ -110,18 +110,6 @@ static void hppa_cpu_realizefn(DeviceState *dev, Error **errp) #endif } -/* Sort hppabetically by type name. */ -static gint hppa_cpu_list_compare(gconstpointer a, gconstpointer b) -{ -ObjectClass *class_a = (ObjectClass *)a; -ObjectClass *class_b = (ObjectClass *)b; -const char *name_a, *name_b; - -name_a = object_class_get_name(class_a); -name_b = object_class_get_name(class_b); -return strcmp(name_a, name_b); -} - static void hppa_cpu_list_entry(gpointer data, gpointer user_data) { ObjectClass *oc = data; @@ -138,8 +126,7 @@ void hppa_cpu_list(FILE *f, fprintf_function
[Qemu-devel] [PATCH 1/3] qom: introduce object_class_get_list_sorted
Unify half a dozen copies of very similar code (the only difference being whether comparisons were case-sensitive) and use it also in Tricore, which did not do any sorting of CPU model names. Signed-off-by: Paolo Bonzini--- include/qom/object.h| 10 ++ qdev-monitor.c | 9 + qom/object.c| 14 ++ target/alpha/cpu.c | 15 +-- target/hppa/cpu.c | 14 +- target/lm32/cpu.c | 15 +-- target/sh4/cpu.c| 15 +-- target/tricore/helper.c | 2 +- 8 files changed, 30 insertions(+), 64 deletions(-) diff --git a/include/qom/object.h b/include/qom/object.h index 4f07090db0..12c0f58c8f 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -913,6 +913,17 @@ void object_class_foreach(void (*fn)(ObjectClass *klass, void *opaque), GSList *object_class_get_list(const char *implements_type, bool include_abstract); +/** + * object_class_get_list_sorted: + * @implements_type: The type to filter for, including its derivatives. + * @include_abstract: Whether to include abstract classes. + * + * Returns: A singly-linked list of the classes in alphabetical + * case-insensitive order. + */ +GSList *object_class_get_list_sorted(const char *implements_type, + bool include_abstract); + /** * object_ref: * @obj: the object diff --git a/qdev-monitor.c b/qdev-monitor.c index b7e3291f8b..61e0300991 100644 --- a/qdev-monitor.c +++ b/qdev-monitor.c @@ -122,12 +122,6 @@ static void qdev_print_devinfo(DeviceClass *dc) error_printf("\n"); } -static gint devinfo_cmp(gconstpointer a, gconstpointer b) -{ -return strcasecmp(object_class_get_name((ObjectClass *)a), - object_class_get_name((ObjectClass *)b)); -} - static void qdev_print_devinfos(bool show_no_user) { static const char *cat_name[DEVICE_CATEGORY_MAX + 1] = { @@ -146,8 +140,7 @@ static void qdev_print_devinfos(bool show_no_user) int i; bool cat_printed; -list = g_slist_sort(object_class_get_list(TYPE_DEVICE, false), -devinfo_cmp); +list = object_class_get_list_sorted(TYPE_DEVICE, false); for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) { cat_printed = false; diff --git a/qom/object.c b/qom/object.c index 755ad03819..6088f55943 100644 --- a/qom/object.c +++ b/qom/object.c @@ -891,6 +891,19 @@ GSList *object_class_get_list(const char *implements_type, return list; } +static gint object_class_cmp(gconstpointer a, gconstpointer b) +{ +return strcasecmp(object_class_get_name((ObjectClass *)a), + object_class_get_name((ObjectClass *)b)); +} + +GSList *object_class_get_list_sorted(const char *implements_type, + bool include_abstract) +{ +return g_slist_sort(object_class_get_list(implements_type, include_abstract), +object_class_cmp); +} + void object_ref(Object *obj) { if (!obj) { diff --git a/target/alpha/cpu.c b/target/alpha/cpu.c index 55675ce419..b08078e7fc 100644 --- a/target/alpha/cpu.c +++ b/target/alpha/cpu.c @@ -71,18 +71,6 @@ static void alpha_cpu_realizefn(DeviceState *dev, Error **errp) acc->parent_realize(dev, errp); } -/* Sort alphabetically by type name. */ -static gint alpha_cpu_list_compare(gconstpointer a, gconstpointer b) -{ -ObjectClass *class_a = (ObjectClass *)a; -ObjectClass *class_b = (ObjectClass *)b; -const char *name_a, *name_b; - -name_a = object_class_get_name(class_a); -name_b = object_class_get_name(class_b); -return strcmp(name_a, name_b); -} - static void alpha_cpu_list_entry(gpointer data, gpointer user_data) { ObjectClass *oc = data; @@ -100,8 +88,7 @@ void alpha_cpu_list(FILE *f, fprintf_function cpu_fprintf) }; GSList *list; -list = object_class_get_list(TYPE_ALPHA_CPU, false); -list = g_slist_sort(list, alpha_cpu_list_compare); +list = object_class_get_list_sorted(TYPE_ALPHA_CPU, false); (*cpu_fprintf)(f, "Available CPUs:\n"); g_slist_foreach(list, alpha_cpu_list_entry, ); g_slist_free(list); diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c index 969f628f0a..e5da8c3cab 100644 --- a/target/hppa/cpu.c +++ b/target/hppa/cpu.c @@ -110,18 +110,6 @@ static void hppa_cpu_realizefn(DeviceState *dev, Error **errp) #endif } -/* Sort hppabetically by type name. */ -static gint hppa_cpu_list_compare(gconstpointer a, gconstpointer b) -{ -ObjectClass *class_a = (ObjectClass *)a; -ObjectClass *class_b = (ObjectClass *)b; -const char *name_a, *name_b; - -name_a = object_class_get_name(class_a); -name_b = object_class_get_name(class_b); -return strcmp(name_a, name_b); -} - static void hppa_cpu_list_entry(gpointer data, gpointer user_data) { ObjectClass *oc = data; @@ -138,7 +126,7 @@ void hppa_cpu_list(FILE *f, fprintf_function