Merge remote-tracking branch 'bonzini/header-dirs' into staging
[sdk/emulator/qemu.git] / qom / container.c
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 "qom/object.h"
14 #include "qemu/module.h"
15 #include <assert.h>
16
17 static 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     gchar **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, NULL);
43         }
44     }
45
46     g_strfreev(parts);
47
48     return obj;
49 }
50
51
52 type_init(container_register_types)