Add a helper to decide at runtime whether a type can be registered to the QOM framework or not.
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> --- include/qom/object.h | 4 ++++ qom/object.c | 3 +++ 2 files changed, 7 insertions(+) diff --git a/include/qom/object.h b/include/qom/object.h index afccd24ca7..0d42fe17de 100644 --- a/include/qom/object.h +++ b/include/qom/object.h @@ -372,6 +372,8 @@ struct Object * struct TypeInfo: * @name: The name of the type. * @parent: The name of the parent type. + * @can_register: This optional function is called before a type is registered. + * If it exists and returns false, the type is not registered. * @instance_size: The size of the object (derivative of #Object). If * @instance_size is 0, then the size of the object will be the size of the * parent object. @@ -414,6 +416,8 @@ struct TypeInfo const char *name; const char *parent; + bool (*can_register)(void); + size_t instance_size; size_t instance_align; void (*instance_init)(Object *obj); diff --git a/qom/object.c b/qom/object.c index 95c0dc8285..f09b6b5a92 100644 --- a/qom/object.c +++ b/qom/object.c @@ -150,6 +150,9 @@ static TypeImpl *type_register_internal(const TypeInfo *info) TypeImpl *type_register(const TypeInfo *info) { assert(info->parent); + if (info->can_register && !info->can_register()) { + return NULL; + } return type_register_internal(info); } -- 2.41.0