
On 05/03/2013 08:53 AM, Michal Privoznik wrote:
--- src/node_device/node_device_driver.c | 33 ++++-------- src/node_device/node_device_hal.c | 13 ++--- src/node_device/node_device_udev.c | 99 ++++++++++-------------------------- 3 files changed, 46 insertions(+), 99 deletions(-)
diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c index 05dc49c..8a84094 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -89,13 +89,8 @@ static int update_driver_name(virNodeDeviceObjPtr dev) }
p = strrchr(devpath, '/'); - if (p) { - dev->def->driver = strdup(p+1); - if (!dev->def->driver) { - virReportOOMError(); - goto cleanup; - } - } + if (p && VIR_STRDUP(dev->def->driver, p+1) < 0)
spaces around + while you are touching this
+++ b/src/node_device/node_device_hal.c @@ -446,10 +446,10 @@ static void dev_create(const char *udi) virNodeDeviceDefPtr def = NULL; const char *name = hal_name(udi); int rv; - char *privData = strdup(udi); + char *privData; char *devicePath = NULL;
- if (!privData) + if (VIR_STRDUP(privData, udi) < 0) return;
silent->noisy in a void function, but the rest of the function is just using VIR_DEBUG on failure, so I think this is an improvement. Not to mention that HAL code is used less and less these days.
+++ b/src/node_device/node_device_udev.c @@ -387,21 +383,9 @@ static int udevTranslatePCIIds(unsigned int vendor, NULL, NULL);
- if (vendor_name != NULL) { - *vendor_string = strdup(vendor_name); - if (*vendor_string == NULL) { - virReportOOMError(); - goto out; - } - } - - if (device_name != NULL) { - *product_string = strdup(device_name); - if (*product_string == NULL) { - virReportOOMError(); - goto out; - } - } + if ((vendor_name && VIR_STRDUP(*vendor_string, vendor_name) < 0) || + (device_name && VIR_STRDUP(*product_string, device_name) < 0)) + goto out;
Can be simplified now that we allow NULL source.
@@ -718,34 +699,34 @@ static int udevGetSCSIType(virNodeDeviceDefPtr def ATTRIBUTE_UNUSED,
switch (type) { case TYPE_DISK: - *typestring = strdup("disk"); + ignore_value(VIR_STRDUP(*typestring, "disk")); break; case TYPE_TAPE: - *typestring = strdup("tape"); + ignore_value(VIR_STRDUP(*typestring, "tape")); break;
Another situation where you could reduce the number of ignore_value() by assigning to a const char*, then saving the dup until after the switch finishes - although such a rework would be no real semantic change. For that matter, this whole switch statement could be rewritten with VIR_ENUM_* magic, but that would be a separate cleanup.
@@ -996,10 +973,7 @@ static int udevKludgeStorageType(virNodeDeviceDefPtr def)
if (STRPREFIX(def->caps->data.storage.block, "/dev/vd")) { /* virtio disk */ - def->caps->data.storage.drive_type = strdup("disk"); - if (def->caps->data.storage.drive_type != NULL) { - ret = 0; - } + ret = VIR_STRDUP(def->caps->data.storage.drive_type, "disk");
silent->noisy, but I think it's an improvement.
@@ -1043,7 +1017,7 @@ static int udevProcessStorage(struct udev_device *device, VIR_DEBUG("No devnode for '%s'", udev_device_get_devpath(device)); goto out; } - data->storage.block = strdup(devnode); + ignore_value(VIR_STRDUP(data->storage.block, devnode));
Pre-existing bug - udevKludgeStorageType() dereferences data->storage.block, and expects it to be non-null. Please touch this up to 'goto out' rather than silently pushing on in spite of allocation failure.
@@ -1294,32 +1266,20 @@ static int udevSetParent(struct udev_device *device, dev = virNodeDeviceFindBySysfsPath(&driverState->devs, parent_sysfs_path); if (dev != NULL) { - def->parent = strdup(dev->def->name); - virNodeDeviceObjUnlock(dev); - - if (def->parent == NULL) { - virReportOOMError(); + if (VIR_STRDUP(def->parent, dev->def->name) < 0) { goto out; + virNodeDeviceObjUnlock(dev);
Umm, that order won't work. Swap those two lines.
@@ -1339,7 +1299,7 @@ static int udevAddOneDevice(struct udev_device *device) goto out; }
- def->sysfs_path = strdup(udev_device_get_syspath(device)); + ignore_value(VIR_STRDUP(def->sysfs_path, udev_device_get_syspath(device)));
Another pre-existing bug where we should 'goto out' instead of leaving sysfs_path NULL, since several places in the rest of the file blindly dereference the field. For that matter, the 'out' label itself is one such place - fix that VIR_DEBUG to use NULLSTR(def->sysfs_path). ACK with the bugs fixed. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org