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