xref: /qemu/qom/container.c (revision a612b2a6635fa1a3a29a8bcf41b31f1f3fae1110)
18b45d447SAnthony Liguori /*
28b45d447SAnthony Liguori  * Device Container
38b45d447SAnthony Liguori  *
48b45d447SAnthony Liguori  * Copyright IBM, Corp. 2012
58b45d447SAnthony Liguori  *
68b45d447SAnthony Liguori  * Authors:
78b45d447SAnthony Liguori  *  Anthony Liguori   <aliguori@us.ibm.com>
88b45d447SAnthony Liguori  *
98b45d447SAnthony Liguori  * This work is licensed under the terms of the GNU GPL, version 2 or later.
108b45d447SAnthony Liguori  * See the COPYING file in the top-level directory.
118b45d447SAnthony Liguori  */
128b45d447SAnthony Liguori 
138b45d447SAnthony Liguori #include "qemu/object.h"
148b45d447SAnthony Liguori #include "module.h"
15*a612b2a6SPaolo Bonzini #include <assert.h>
168b45d447SAnthony Liguori 
178b45d447SAnthony Liguori static TypeInfo container_info = {
188b45d447SAnthony Liguori     .name          = "container",
198b45d447SAnthony Liguori     .instance_size = sizeof(Object),
208b45d447SAnthony Liguori     .parent        = TYPE_OBJECT,
218b45d447SAnthony Liguori };
228b45d447SAnthony Liguori 
2383f7d43aSAndreas Färber static void container_register_types(void)
248b45d447SAnthony Liguori {
258b45d447SAnthony Liguori     type_register_static(&container_info);
268b45d447SAnthony Liguori }
278b45d447SAnthony Liguori 
28*a612b2a6SPaolo Bonzini Object *container_get(const char *path)
29*a612b2a6SPaolo Bonzini {
30*a612b2a6SPaolo Bonzini     Object *obj, *child;
31*a612b2a6SPaolo Bonzini     gchar **parts;
32*a612b2a6SPaolo Bonzini     int i;
33*a612b2a6SPaolo Bonzini 
34*a612b2a6SPaolo Bonzini     parts = g_strsplit(path, "/", 0);
35*a612b2a6SPaolo Bonzini     assert(parts != NULL && parts[0] != NULL && !parts[0][0]);
36*a612b2a6SPaolo Bonzini     obj = object_get_root();
37*a612b2a6SPaolo Bonzini 
38*a612b2a6SPaolo Bonzini     for (i = 1; parts[i] != NULL; i++, obj = child) {
39*a612b2a6SPaolo Bonzini         child = object_resolve_path_component(obj, parts[i]);
40*a612b2a6SPaolo Bonzini         if (!child) {
41*a612b2a6SPaolo Bonzini             child = object_new("container");
42*a612b2a6SPaolo Bonzini             object_property_add_child(obj, parts[i], child, NULL);
43*a612b2a6SPaolo Bonzini         }
44*a612b2a6SPaolo Bonzini     }
45*a612b2a6SPaolo Bonzini 
46*a612b2a6SPaolo Bonzini     return obj;
47*a612b2a6SPaolo Bonzini }
48*a612b2a6SPaolo Bonzini 
49*a612b2a6SPaolo Bonzini 
5083f7d43aSAndreas Färber type_init(container_register_types)
51