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 b1e733b..5d78527 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;
}
--
2.7.3