18b45d447SAnthony Liguori /* 28b45d447SAnthony Liguori * Device Container 38b45d447SAnthony Liguori * 48b45d447SAnthony Liguori * Copyright IBM, Corp. 2012 58b45d447SAnthony Liguori * 68b45d447SAnthony Liguori * Authors: 78b45d447SAnthony Liguori * Anthony Liguori <aliguori@us.ibm.com> 88b45d447SAnthony Liguori * 98b45d447SAnthony Liguori * This work is licensed under the terms of the GNU GPL, version 2 or later. 108b45d447SAnthony Liguori * See the COPYING file in the top-level directory. 118b45d447SAnthony Liguori */ 128b45d447SAnthony Liguori 13*14cccb61SPaolo Bonzini #include "qom/object.h" 148b45d447SAnthony Liguori #include "module.h" 15a612b2a6SPaolo Bonzini #include <assert.h> 168b45d447SAnthony Liguori 178b45d447SAnthony Liguori static TypeInfo container_info = { 188b45d447SAnthony Liguori .name = "container", 198b45d447SAnthony Liguori .instance_size = sizeof(Object), 208b45d447SAnthony Liguori .parent = TYPE_OBJECT, 218b45d447SAnthony Liguori }; 228b45d447SAnthony Liguori 2383f7d43aSAndreas Färber static void container_register_types(void) 248b45d447SAnthony Liguori { 258b45d447SAnthony Liguori type_register_static(&container_info); 268b45d447SAnthony Liguori } 278b45d447SAnthony Liguori 28dfe47e70SAndreas Färber Object *container_get(Object *root, const char *path) 29a612b2a6SPaolo Bonzini { 30a612b2a6SPaolo Bonzini Object *obj, *child; 31a612b2a6SPaolo Bonzini gchar **parts; 32a612b2a6SPaolo Bonzini int i; 33a612b2a6SPaolo Bonzini 34a612b2a6SPaolo Bonzini parts = g_strsplit(path, "/", 0); 35a612b2a6SPaolo Bonzini assert(parts != NULL && parts[0] != NULL && !parts[0][0]); 36dfe47e70SAndreas Färber obj = root; 37a612b2a6SPaolo Bonzini 38a612b2a6SPaolo Bonzini for (i = 1; parts[i] != NULL; i++, obj = child) { 39a612b2a6SPaolo Bonzini child = object_resolve_path_component(obj, parts[i]); 40a612b2a6SPaolo Bonzini if (!child) { 41a612b2a6SPaolo Bonzini child = object_new("container"); 42a612b2a6SPaolo Bonzini object_property_add_child(obj, parts[i], child, NULL); 43a612b2a6SPaolo Bonzini } 44a612b2a6SPaolo Bonzini } 45a612b2a6SPaolo Bonzini 46f156f238SStefan Weil g_strfreev(parts); 47f156f238SStefan Weil 48a612b2a6SPaolo Bonzini return obj; 49a612b2a6SPaolo Bonzini } 50a612b2a6SPaolo Bonzini 51a612b2a6SPaolo Bonzini 5283f7d43aSAndreas Färber type_init(container_register_types) 53