mirror of
https://github.com/qemu/qemu.git
synced 2025-08-17 16:03:30 +00:00
qom: Assert that public types have a non-NULL parent field
This protects against unwanted effects of changing TYPE_OBJECT from NULL to a string. Suggested-by: Andreas Färber <afaerber@suse.de> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
9c4b4cc436
commit
049cb3cfda
14
qom/object.c
14
qom/object.c
@ -95,7 +95,7 @@ static TypeImpl *type_table_lookup(const char *name)
|
|||||||
return g_hash_table_lookup(type_table_get(), name);
|
return g_hash_table_lookup(type_table_get(), name);
|
||||||
}
|
}
|
||||||
|
|
||||||
TypeImpl *type_register(const TypeInfo *info)
|
static TypeImpl *type_register_internal(const TypeInfo *info)
|
||||||
{
|
{
|
||||||
TypeImpl *ti = g_malloc0(sizeof(*ti));
|
TypeImpl *ti = g_malloc0(sizeof(*ti));
|
||||||
|
|
||||||
@ -137,6 +137,12 @@ TypeImpl *type_register(const TypeInfo *info)
|
|||||||
return ti;
|
return ti;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TypeImpl *type_register(const TypeInfo *info)
|
||||||
|
{
|
||||||
|
assert(info->parent);
|
||||||
|
return type_register_internal(info);
|
||||||
|
}
|
||||||
|
|
||||||
TypeImpl *type_register_static(const TypeInfo *info)
|
TypeImpl *type_register_static(const TypeInfo *info)
|
||||||
{
|
{
|
||||||
return type_register(info);
|
return type_register(info);
|
||||||
@ -204,7 +210,7 @@ static void type_class_interface_init(TypeImpl *ti, InterfaceImpl *iface)
|
|||||||
char *name = g_strdup_printf("<%s::%s>", ti->name, iface->parent);
|
char *name = g_strdup_printf("<%s::%s>", ti->name, iface->parent);
|
||||||
|
|
||||||
info.name = name;
|
info.name = name;
|
||||||
iface->type = type_register(&info);
|
iface->type = type_register_internal(&info);
|
||||||
g_free(name);
|
g_free(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1239,8 +1245,8 @@ static void register_types(void)
|
|||||||
.abstract = true,
|
.abstract = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
type_interface = type_register_static(&interface_info);
|
type_interface = type_register_internal(&interface_info);
|
||||||
type_register_static(&object_info);
|
type_register_internal(&object_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
type_init(register_types)
|
type_init(register_types)
|
||||||
|
Loading…
Reference in New Issue
Block a user