From 71cddab0428cad8543d2bf9cd3d518f2eb8e15ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Fri, 3 Jun 2016 18:24:43 +0200 Subject: [PATCH] Rewrite disk type checking in udevProcessStorage Error out on parsing errors and use a local const char pointer instead of chained ifs to check whether we found a match. --- src/node_device/node_device_udev.c | 32 +++++++++++++++++------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index 0e37bade4c..c5d2286d32 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1019,30 +1019,34 @@ static int udevProcessStorage(struct udev_device *device, "ID_TYPE", &data->storage.drive_type) != PROPERTY_FOUND || STREQ(def->caps->data.storage.drive_type, "generic")) { - int tmp_int = 0; + int val = 0; + const char *str = NULL; /* All floppy drives have the ID_DRIVE_FLOPPY prop. This is * needed since legacy floppies don't have a drive_type */ - if (udevGetIntProperty(device, "ID_DRIVE_FLOPPY", - &tmp_int, 0) == PROPERTY_FOUND && - tmp_int == 1) { + if (udevGetIntProperty(device, "ID_DRIVE_FLOPPY", &val, 0) == PROPERTY_ERROR) + goto out; + else if (val == 1) + str = "floppy"; - if (VIR_STRDUP(data->storage.drive_type, "floppy") < 0) + if (!str) { + if (udevGetIntProperty(device, "ID_CDROM", &val, 0) == PROPERTY_ERROR) goto out; - } else if (udevGetIntProperty(device, "ID_CDROM", - &tmp_int, 0) == PROPERTY_FOUND && - tmp_int == 1) { + else if (val == 1) + str = "cd"; + } - if (VIR_STRDUP(data->storage.drive_type, "cd") < 0) + if (!str) { + if (udevGetIntProperty(device, "ID_DRIVE_FLASH_SD", &val, 0) == PROPERTY_ERROR) goto out; - } else if (udevGetIntProperty(device, "ID_DRIVE_FLASH_SD", - &tmp_int, 0) == PROPERTY_FOUND && - tmp_int == 1) { + if (val == 1) + str = "sd"; + } - if (VIR_STRDUP(data->storage.drive_type, "sd") < 0) + if (str) { + if (VIR_STRDUP(data->storage.drive_type, str) < 0) goto out; } else { - /* If udev doesn't have it, perhaps we can guess it. */ if (udevKludgeStorageType(def) != 0) goto out;