From cb0734d53f42cd6dfc4800cfaed5f070433b5da7 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 1 Mar 2024 14:45:37 +0100 Subject: [PATCH] hostnamed: in get_hardware_firmware_data() don't dup a string if we shan't return it --- src/hostname/hostnamed.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index ee2df8f2ff1..25e7b193cd1 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -249,7 +249,6 @@ static int get_hardware_model(char **ret) { static int get_hardware_firmware_data(const char *sysattr, char **ret) { _cleanup_(sd_device_unrefp) sd_device *device = NULL; - _cleanup_free_ char *b = NULL; const char *s = NULL; int r; @@ -263,16 +262,24 @@ static int get_hardware_firmware_data(const char *sysattr, char **ret) { return log_debug_errno(r, "Failed to open /sys/class/dmi/id device, ignoring: %m"); (void) sd_device_get_sysattr_value(device, sysattr, &s); - if (!isempty(s)) { - b = strdup(s); - if (!b) - return -ENOMEM; - } - if (ret) - *ret = TAKE_PTR(b); + bool empty = isempty(s); + + if (ret) { + if (empty) + *ret = NULL; + else { + _cleanup_free_ char *b = NULL; + + b = strdup(s); + if (!b) + return -ENOMEM; + + *ret = TAKE_PTR(b); + } + } - return !isempty(s); + return !empty; } static int get_hardware_serial(char **ret) { -- 2.47.3