mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
qdev: provide an interface to return canonical path from root (v2)
The canonical path is the path in the composition tree from the root to the device. This is effectively the name of the device. This is an incredibly unefficient implementation that will be optimized in a future patch. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
a10f07a7d0
commit
f9fbd2fd0e
2 changed files with 57 additions and 0 deletions
48
hw/qdev.c
48
hw/qdev.c
|
@ -1173,3 +1173,51 @@ DeviceState *qdev_get_root(void)
|
|||
|
||||
return qdev_root;
|
||||
}
|
||||
|
||||
static gchar *qdev_get_path_in(DeviceState *parent, DeviceState *dev)
|
||||
{
|
||||
DeviceProperty *prop;
|
||||
|
||||
if (parent == dev) {
|
||||
return g_strdup("");
|
||||
}
|
||||
|
||||
QTAILQ_FOREACH(prop, &parent->properties, node) {
|
||||
gchar *subpath;
|
||||
|
||||
if (!strstart(prop->type, "child<", NULL)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Check to see if the device is one of parent's children */
|
||||
if (prop->opaque == dev) {
|
||||
return g_strdup(prop->name);
|
||||
}
|
||||
|
||||
/* Check to see if the device is a child of our child */
|
||||
subpath = qdev_get_path_in(prop->opaque, dev);
|
||||
if (subpath) {
|
||||
gchar *path;
|
||||
|
||||
path = g_strdup_printf("%s/%s", prop->name, subpath);
|
||||
g_free(subpath);
|
||||
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gchar *qdev_get_canonical_path(DeviceState *dev)
|
||||
{
|
||||
gchar *path, *newpath;
|
||||
|
||||
path = qdev_get_path_in(qdev_get_root(), dev);
|
||||
g_assert(path != NULL);
|
||||
|
||||
newpath = g_strdup_printf("/%s", path);
|
||||
g_free(path);
|
||||
|
||||
return newpath;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue