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 | 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 | object_unref(child); |
44 | } |
45 | } |
46 | |
47 | g_strfreev(parts); |
48 | |
49 | return obj; |
50 | } |
51 | |
52 | |
53 | type_init(container_register_types) |
54 | |