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 138b45d447SAnthony Liguori #include "qemu/object.h" 148b45d447SAnthony Liguori #include "module.h" 15*a612b2a6SPaolo 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 28*a612b2a6SPaolo Bonzini Object *container_get(const char *path) 29*a612b2a6SPaolo Bonzini { 30*a612b2a6SPaolo Bonzini Object *obj, *child; 31*a612b2a6SPaolo Bonzini gchar **parts; 32*a612b2a6SPaolo Bonzini int i; 33*a612b2a6SPaolo Bonzini 34*a612b2a6SPaolo Bonzini parts = g_strsplit(path, "/", 0); 35*a612b2a6SPaolo Bonzini assert(parts != NULL && parts[0] != NULL && !parts[0][0]); 36*a612b2a6SPaolo Bonzini obj = object_get_root(); 37*a612b2a6SPaolo Bonzini 38*a612b2a6SPaolo Bonzini for (i = 1; parts[i] != NULL; i++, obj = child) { 39*a612b2a6SPaolo Bonzini child = object_resolve_path_component(obj, parts[i]); 40*a612b2a6SPaolo Bonzini if (!child) { 41*a612b2a6SPaolo Bonzini child = object_new("container"); 42*a612b2a6SPaolo Bonzini object_property_add_child(obj, parts[i], child, NULL); 43*a612b2a6SPaolo Bonzini } 44*a612b2a6SPaolo Bonzini } 45*a612b2a6SPaolo Bonzini 46*a612b2a6SPaolo Bonzini return obj; 47*a612b2a6SPaolo Bonzini } 48*a612b2a6SPaolo Bonzini 49*a612b2a6SPaolo Bonzini 5083f7d43aSAndreas Färber type_init(container_register_types) 51