Home | History | Annotate | Download | only in qom
      1 /*
      2  * Device Container
      3  *
      4  * Copyright IBM, Corp. 2012
      5  *
      6  * Authors:
      7  *  Anthony Liguori   <aliguori (at) 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 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         }
     44     }
     45 
     46     g_strfreev(parts);
     47 
     48     return obj;
     49 }
     50 
     51 
     52 type_init(container_register_types)
     53