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