virPCIDeviceGetDriverPathAndName is a static function that will need to be called by another function that occurs above it in the file. This patch reorders the static functions so that a forward declaration isn't needed. --- src/util/virpci.c | 177 +++++++++++++++++++++++++++--------------------------- 1 file changed, 90 insertions(+), 87 deletions(-) diff --git a/src/util/virpci.c b/src/util/virpci.c index 54f7715..fc76952 100644 --- a/src/util/virpci.c +++ b/src/util/virpci.c @@ -188,6 +188,96 @@ static int virPCIOnceInit(void) VIR_ONCE_GLOBAL_INIT(virPCI) + +static int +virPCIDriverDir(char **buffer, const char *driver) +{ + VIR_FREE(*buffer); + + if (virAsprintf(buffer, PCI_SYSFS "drivers/%s", driver) < 0) { + virReportOOMError(); + return -1; + } + + return 0; +} + + +static int +virPCIDriverFile(char **buffer, const char *driver, const char *file) +{ + VIR_FREE(*buffer); + + if (virAsprintf(buffer, PCI_SYSFS "drivers/%s/%s", driver, file) < 0) { + virReportOOMError(); + return -1; + } + + return 0; +} + + +static int +virPCIFile(char **buffer, const char *device, const char *file) +{ + VIR_FREE(*buffer); + + if (virAsprintf(buffer, PCI_SYSFS "devices/%s/%s", device, file) < 0) { + virReportOOMError(); + return -1; + } + + return 0; +} + + +/* virPCIDeviceGetDriverPathAndName - put the path to the driver + * directory of the driver in use for this device in @path and the + * name of the driver in @name. Both could be NULL if it's not bound + * to any driver. + * + * Return 0 for success, -1 for error. + */ +static int +virPCIDeviceGetDriverPathAndName(virPCIDevicePtr dev, char **path, char **name) +{ + int ret = -1; + char *drvlink = NULL; + + *path = *name = NULL; + /* drvlink = "/sys/bus/pci/dddd:bb:ss.ff/driver" */ + if (virPCIFile(&drvlink, dev->name, "driver") < 0) + goto cleanup; + + if (virFileIsLink(drvlink) != 1) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Invalid device %s driver file %s is not a symlink"), + dev->name, drvlink); + goto cleanup; + } + if (virFileResolveLink(drvlink, path) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Unable to resolve device %s driver symlink %s"), + dev->name, drvlink); + goto cleanup; + } + /* path = "/sys/bus/pci/drivers/${drivername}" */ + + if (VIR_STRDUP(*name, last_component(*path)) < 0) + goto cleanup; + /* name = "${drivername}" */ + + ret = 0; +cleanup: + VIR_FREE(drvlink); + if (ret < 0) { + VIR_FREE(*path); + VIR_FREE(*name); + } + return ret; +} + + static int virPCIDeviceConfigOpen(virPCIDevicePtr dev, bool fatal) { @@ -842,93 +932,6 @@ cleanup: static int -virPCIDriverDir(char **buffer, const char *driver) -{ - VIR_FREE(*buffer); - - if (virAsprintf(buffer, PCI_SYSFS "drivers/%s", driver) < 0) { - virReportOOMError(); - return -1; - } - - return 0; -} - -static int -virPCIDriverFile(char **buffer, const char *driver, const char *file) -{ - VIR_FREE(*buffer); - - if (virAsprintf(buffer, PCI_SYSFS "drivers/%s/%s", driver, file) < 0) { - virReportOOMError(); - return -1; - } - - return 0; -} - -static int -virPCIFile(char **buffer, const char *device, const char *file) -{ - VIR_FREE(*buffer); - - if (virAsprintf(buffer, PCI_SYSFS "devices/%s/%s", device, file) < 0) { - virReportOOMError(); - return -1; - } - - return 0; -} - - -/* virPCIDeviceGetDriverPathAndName - put the path to the driver - * directory of the driver in use for this device in @path and the - * name of the driver in @name. Both could be NULL if it's not bound - * to any driver. - * - * Return 0 for success, -1 for error. - */ -static int -virPCIDeviceGetDriverPathAndName(virPCIDevicePtr dev, char **path, char **name) -{ - int ret = -1; - char *drvlink = NULL; - - *path = *name = NULL; - /* drvlink = "/sys/bus/pci/dddd:bb:ss.ff/driver" */ - if (virPCIFile(&drvlink, dev->name, "driver") < 0) - goto cleanup; - - if (virFileIsLink(drvlink) != 1) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Invalid device %s driver file %s is not a symlink"), - dev->name, drvlink); - goto cleanup; - } - if (virFileResolveLink(drvlink, path) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unable to resolve device %s driver symlink %s"), - dev->name, drvlink); - goto cleanup; - } - /* path = "/sys/bus/pci/drivers/${drivername}" */ - - if (VIR_STRDUP(*name, last_component(*path)) < 0) - goto cleanup; - /* name = "${drivername}" */ - - ret = 0; -cleanup: - VIR_FREE(drvlink); - if (ret < 0) { - VIR_FREE(*path); - VIR_FREE(*name); - } - return ret; -} - - -static int virPCIProbeStubDriver(const char *driver) { char *drvpath = NULL; -- 1.7.11.7 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list