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