Revision 1ca4d09a hw/qdev.c
b/hw/qdev.c | ||
---|---|---|
889 | 889 |
} |
890 | 890 |
return qdev_unplug(dev); |
891 | 891 |
} |
892 |
|
|
893 |
static int qdev_get_fw_dev_path_helper(DeviceState *dev, char *p, int size) |
|
894 |
{ |
|
895 |
int l = 0; |
|
896 |
|
|
897 |
if (dev && dev->parent_bus) { |
|
898 |
char *d; |
|
899 |
l = qdev_get_fw_dev_path_helper(dev->parent_bus->parent, p, size); |
|
900 |
if (dev->parent_bus->info->get_fw_dev_path) { |
|
901 |
d = dev->parent_bus->info->get_fw_dev_path(dev); |
|
902 |
l += snprintf(p + l, size - l, "%s", d); |
|
903 |
qemu_free(d); |
|
904 |
} else { |
|
905 |
l += snprintf(p + l, size - l, "%s", dev->info->name); |
|
906 |
} |
|
907 |
} |
|
908 |
l += snprintf(p + l , size - l, "/"); |
|
909 |
|
|
910 |
return l; |
|
911 |
} |
|
912 |
|
|
913 |
char* qdev_get_fw_dev_path(DeviceState *dev) |
|
914 |
{ |
|
915 |
char path[128]; |
|
916 |
int l; |
|
917 |
|
|
918 |
l = qdev_get_fw_dev_path_helper(dev, path, 128); |
|
919 |
|
|
920 |
path[l-1] = '\0'; |
|
921 |
|
|
922 |
return strdup(path); |
|
923 |
} |
Also available in: Unified diff