xref: /qemu/qom/container.c (revision c5e18709)
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 
139bbc853bSPeter Maydell #include "qemu/osdep.h"
1414cccb61SPaolo Bonzini #include "qom/object.h"
151de7afc9SPaolo Bonzini #include "qemu/module.h"
168b45d447SAnthony Liguori 
178c43a6f0SAndreas Färber static const TypeInfo container_info = {
188b45d447SAnthony Liguori     .name          = "container",
198b45d447SAnthony Liguori     .parent        = TYPE_OBJECT,
208b45d447SAnthony Liguori };
218b45d447SAnthony Liguori 
container_register_types(void)2283f7d43aSAndreas Färber static void container_register_types(void)
238b45d447SAnthony Liguori {
248b45d447SAnthony Liguori     type_register_static(&container_info);
258b45d447SAnthony Liguori }
268b45d447SAnthony Liguori 
container_get(Object * root,const char * path)27dfe47e70SAndreas Färber Object *container_get(Object *root, const char *path)
28a612b2a6SPaolo Bonzini {
29a612b2a6SPaolo Bonzini     Object *obj, *child;
30ddfb0baaSMarkus Armbruster     char **parts;
31a612b2a6SPaolo Bonzini     int i;
32a612b2a6SPaolo Bonzini 
33a612b2a6SPaolo Bonzini     parts = g_strsplit(path, "/", 0);
34a612b2a6SPaolo Bonzini     assert(parts != NULL && parts[0] != NULL && !parts[0][0]);
35dfe47e70SAndreas Färber     obj = root;
36a612b2a6SPaolo Bonzini 
37a612b2a6SPaolo Bonzini     for (i = 1; parts[i] != NULL; i++, obj = child) {
38a612b2a6SPaolo Bonzini         child = object_resolve_path_component(obj, parts[i]);
39a612b2a6SPaolo Bonzini         if (!child) {
40a612b2a6SPaolo Bonzini             child = object_new("container");
41*d2623129SMarkus Armbruster             object_property_add_child(obj, parts[i], child);
42f8df5f92SMarc-André Lureau             object_unref(child);
43a612b2a6SPaolo Bonzini         }
44a612b2a6SPaolo Bonzini     }
45a612b2a6SPaolo Bonzini 
46f156f238SStefan Weil     g_strfreev(parts);
47f156f238SStefan Weil 
48a612b2a6SPaolo Bonzini     return obj;
49a612b2a6SPaolo Bonzini }
50a612b2a6SPaolo Bonzini 
51a612b2a6SPaolo Bonzini 
5283f7d43aSAndreas Färber type_init(container_register_types)
53