From 0d372687ebd1a04228ebf7d8733a5f3e1cae9562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Fri, 3 Jun 2016 15:25:22 +0200 Subject: [PATCH] =?UTF-8?q?Do=20not=C2=A0VIR=5FSTRDUP=C2=A0the=20string=20?= =?UTF-8?q?in=20udevGetDeviceProperty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two out of three callers free it right after converting it to a number. Also change the comment at the beginning of the function, because the comment inside the function told me to. --- src/node_device/node_device_udev.c | 72 ++++++++++-------------------- 1 file changed, 23 insertions(+), 49 deletions(-) diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index b1e733b204..5d7852719f 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -58,36 +58,16 @@ struct _udevPrivate { }; -/* This function allocates memory from the heap for the property - * value. That memory must be later freed by some other code. */ -static int udevGetDeviceProperty(struct udev_device *udev_device, - const char *property_key, - char **property_value) +static const char *udevGetDeviceProperty(struct udev_device *udev_device, + const char *property_key) { - const char *udev_value = NULL; - int ret = PROPERTY_FOUND; + const char *ret = NULL; - udev_value = udev_device_get_property_value(udev_device, property_key); - if (udev_value == NULL) { - VIR_DEBUG("udev reports device '%s' does not have property '%s'", - udev_device_get_sysname(udev_device), property_key); - ret = PROPERTY_MISSING; - goto out; - } + ret = udev_device_get_property_value(udev_device, property_key); - /* If this allocation is changed, the comment at the beginning - * of the function must also be changed. */ - if (VIR_STRDUP(*property_value, udev_value) < 0) { - ret = PROPERTY_ERROR; - goto out; - } + VIR_DEBUG("Found property key '%s' value '%s' for device with sysname '%s'", + property_key, NULLSTR(ret), udev_device_get_sysname(udev_device)); - VIR_DEBUG("Found property key '%s' value '%s' " - "for device with sysname '%s'", - property_key, *property_value, - udev_device_get_sysname(udev_device)); - - out: return ret; } @@ -96,7 +76,11 @@ static int udevGetStringProperty(struct udev_device *udev_device, const char *property_key, char **value) { - return udevGetDeviceProperty(udev_device, property_key, value); + if (VIR_STRDUP(*value, + udevGetDeviceProperty(udev_device, property_key)) < 0) + return PROPERTY_ERROR; + + return *value == NULL ? PROPERTY_MISSING : PROPERTY_FOUND; } @@ -105,20 +89,15 @@ static int udevGetIntProperty(struct udev_device *udev_device, int *value, int base) { - char *udev_value = NULL; - int ret = PROPERTY_FOUND; + const char *str = NULL; - ret = udevGetDeviceProperty(udev_device, property_key, &udev_value); + str = udevGetDeviceProperty(udev_device, property_key); - if (ret == PROPERTY_FOUND) { - if (virStrToLong_i(udev_value, NULL, base, value) < 0) { - VIR_ERROR(_("Failed to convert '%s' to int"), udev_value); - ret = PROPERTY_ERROR; - } + if (str && virStrToLong_i(str, NULL, base, value) < 0) { + VIR_ERROR(_("Failed to convert '%s' to int"), str); + return PROPERTY_ERROR; } - - VIR_FREE(udev_value); - return ret; + return str == NULL ? PROPERTY_MISSING : PROPERTY_FOUND; } @@ -127,20 +106,15 @@ static int udevGetUintProperty(struct udev_device *udev_device, unsigned int *value, int base) { - char *udev_value = NULL; - int ret = PROPERTY_FOUND; + const char *str = NULL; - ret = udevGetDeviceProperty(udev_device, property_key, &udev_value); + str = udevGetDeviceProperty(udev_device, property_key); - if (ret == PROPERTY_FOUND) { - if (virStrToLong_ui(udev_value, NULL, base, value) < 0) { - VIR_ERROR(_("Failed to convert '%s' to unsigned int"), udev_value); - ret = PROPERTY_ERROR; - } + if (str && virStrToLong_ui(str, NULL, base, value) < 0) { + VIR_ERROR(_("Failed to convert '%s' to int"), str); + return PROPERTY_ERROR; } - - VIR_FREE(udev_value); - return ret; + return str == NULL ? PROPERTY_MISSING : PROPERTY_FOUND; }