xref: /openbmc/qemu/qom/container.c (revision ffe98631)
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     .parent        = TYPE_OBJECT,
20 };
21 
22 static void container_register_types(void)
23 {
24     type_register_static(&container_info);
25 }
26 
27 Object *container_get(Object *root, const char *path)
28 {
29     Object *obj, *child;
30     char **parts;
31     int i;
32 
33     parts = g_strsplit(path, "/", 0);
34     assert(parts != NULL && parts[0] != NULL && !parts[0][0]);
35     obj = root;
36 
37     for (i = 1; parts[i] != NULL; i++, obj = child) {
38         child = object_resolve_path_component(obj, parts[i]);
39         if (!child) {
40             child = object_new("container");
41             object_property_add_child(obj, parts[i], child);
42             object_unref(child);
43         }
44     }
45 
46     g_strfreev(parts);
47 
48     return obj;
49 }
50 
51 
52 type_init(container_register_types)
53