On 23 July 2012 12:33, Laszlo Ersek <[email protected]> wrote:
>
> Signed-off-by: Laszlo Ersek <[email protected]>
I think it would be much nicer to just rewrite qdev_get_fw_dev_path
so we weren't trying to fill the path into a fixed string buffer
at all. Here is an entirely untested implementation:
char *qdev_get_fw_dev_path(DeviceState *dev)
{
char *path;
char **strarray;
int depth = 0;
DeviceState *d = dev;
for (d = dev; d && d->parent_bus; d = d->parent_bus->parent) {
depth++;
}
depth++;
strarray = g_new(char*, depth);
for (d = dev; d && d->parent_bus; d = d->parent_bus->parent) {
depth--;
strarray[depth] = bus_get_fw_dev_path(dev->parent_bus, dev);
if (!strarray[depth]) {
strarray[depth] = g_strdup(object_get_typename(OBJECT(dev)));
}
}
strarray[0] = g_strdup("");
path = g_strjoinv("/", strarray);
g_strfreev(strarray);
return path;
}
Bonus extra patch: check that all the implementations of get_fw_dev_path()
are returning a g_malloc'd string rather than a plain malloc'd one
(both this code and the current implementation assume so but at least
the scsi bus implementation doesn't use the glib functions.)
-- PMM