On 23 July 2012 12:33, Laszlo Ersek <ler...@redhat.com> wrote:
>
> Signed-off-by: Laszlo Ersek <ler...@redhat.com>

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

Reply via email to