diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2012-04-04 15:58:40 +0200 |
---|---|---|
committer | Andreas Färber <afaerber@suse.de> | 2012-06-18 15:14:37 +0200 |
commit | 049cb3cfdac182bbaab39a07936eb45fd1d83a4a (patch) | |
tree | 7ad4e864f19bcd9a3fb0e2a36c401774aec78715 | |
parent | 9c4b4cc436b3b05f5af79ba06c23acbe64319231 (diff) |
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>
-rw-r--r-- | qom/object.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/qom/object.c b/qom/object.c index dac9de57c2..cec2d406b8 100644 --- a/qom/object.c +++ b/qom/object.c @@ -95,7 +95,7 @@ static TypeImpl *type_table_lookup(const char *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)); @@ -137,6 +137,12 @@ TypeImpl *type_register(const TypeInfo *info) return ti; } +TypeImpl *type_register(const TypeInfo *info) +{ + assert(info->parent); + return type_register_internal(info); +} + TypeImpl *type_register_static(const TypeInfo *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); info.name = name; - iface->type = type_register(&info); + iface->type = type_register_internal(&info); g_free(name); } @@ -1239,8 +1245,8 @@ static void register_types(void) .abstract = true, }; - type_interface = type_register_static(&interface_info); - type_register_static(&object_info); + type_interface = type_register_internal(&interface_info); + type_register_internal(&object_info); } type_init(register_types) |