Commit 6d5213e502 for qemu.org
commit 6d5213e5022487ef8eeb8d23bd2573ebd67c2fe8
Author: Daniel P. Berrangé <berrange@redhat.com>
Date: Thu Sep 3 17:10:32 2026 +0100
qom: refactor data passing for QOM list filtering
Currently the QOM list method can filter on the abstract flag,
but extending the filtering to more variables requires a way
to pass in extra data items. This requires a refactoring of the
iterator to take a full struct as its opaque data item.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
diff --git a/qom/qom-qmp-cmds.c b/qom/qom-qmp-cmds.c
index 330895361d..b999e9f723 100644
--- a/qom/qom-qmp-cmds.c
+++ b/qom/qom-qmp-cmds.c
@@ -151,9 +151,13 @@ QObject *qmp_qom_get(const char *path, const char *property, Error **errp)
return object_property_get_qobject(obj, property, errp);
}
-static void qom_list_types_tramp(ObjectClass *klass, void *data)
+typedef struct {
+ ObjectTypeInfoList *list;
+} ObjectTypeInfoData;
+
+static void qom_list_types_tramp(ObjectClass *klass, void *opaque)
{
- ObjectTypeInfoList **pret = data;
+ ObjectTypeInfoData *data = opaque;
ObjectTypeInfo *info;
ObjectClass *parent = object_class_get_parent(klass);
@@ -164,7 +168,7 @@ static void qom_list_types_tramp(ObjectClass *klass, void *data)
info->parent = g_strdup(object_class_get_name(parent));
}
- QAPI_LIST_PREPEND(*pret, info);
+ QAPI_LIST_PREPEND(data->list, info);
}
ObjectTypeInfoList *qmp_qom_list_types(const char *implements,
@@ -172,12 +176,14 @@ ObjectTypeInfoList *qmp_qom_list_types(const char *implements,
bool abstract,
Error **errp)
{
- ObjectTypeInfoList *ret = NULL;
+ ObjectTypeInfoData data = {
+ .list = NULL,
+ };
module_load_qom_all();
- object_class_foreach(qom_list_types_tramp, implements, abstract, &ret);
+ object_class_foreach(qom_list_types_tramp, implements, abstract, &data);
- return ret;
+ return data.list;
}
ObjectPropertyInfoList *qmp_device_list_properties(const char *typename,