xref: /openbmc/qemu/qom/container.c (revision 0c4e9931)
1 /*
2  * Device Container
3  *
4  * Copyright IBM, Corp. 2012
5  *
6  * Authors:
7  *  Anthony Liguori   <aliguori@us.ibm.com>
8  *
9  * This work is licensed under the terms of the GNU GPL, version 2 or later.
10  * See the COPYING file in the top-level directory.
11  */
12 
13 #include "qemu/osdep.h"
14 #include "qom/object.h"
15 #include "qemu/module.h"
16 
17 static const TypeInfo container_info = {
18     .name          = "container",
19     .instance_size = sizeof(Object),
20     .parent        = TYPE_OBJECT,
21 };
22 
23 static void container_register_types(void)
24 {
25     type_register_static(&container_info);
26 }
27 
28 Object *container_get(Object *root, const char *path)
29 {
30     Object *obj, *child;
31     char **parts;
32     int i;
33 
34     parts = g_strsplit(path, "/", 0);
35     assert(parts != NULL && parts[0] != NULL && !parts[0][0]);
36     obj = root;
37 
38     for (i = 1; parts[i] != NULL; i++, obj = child) {
39         child = object_resolve_path_component(obj, parts[i]);
40         if (!child) {
41             child = object_new("container");
42             object_property_add_child(obj, parts[i], child);
43             object_unref(child);
44         }
45     }
46 
47     g_strfreev(parts);
48 
49     return obj;
50 }
51 
52 
53 type_init(container_register_types)
54