From df49a7323a5dfb55f3e5270c066601aede1d125d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 3 Jun 2021 18:37:26 +0200 Subject: [PATCH] sd-device: let device_set_subsystem() accept NULL This makes device_shallow_clone() simpler. Follow-up for 2255e8adee37c490bf8cf2daab791b6f746bb0a0. --- src/libsystemd/sd-device/device-internal.h | 2 +- src/libsystemd/sd-device/device-private.c | 17 +++++++---------- src/libsystemd/sd-device/sd-device.c | 17 +++++++++-------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/libsystemd/sd-device/device-internal.h b/src/libsystemd/sd-device/device-internal.h index 19dac5c21f0..a1ba9ba754f 100644 --- a/src/libsystemd/sd-device/device-internal.h +++ b/src/libsystemd/sd-device/device-internal.h @@ -107,7 +107,7 @@ int device_set_devmode(sd_device *device, const char *devmode); int device_set_devname(sd_device *device, const char *devname); int device_set_devtype(sd_device *device, const char *devtype); int device_set_devnum(sd_device *device, const char *major, const char *minor); -int device_set_subsystem(sd_device *device, const char *_subsystem); +int device_set_subsystem(sd_device *device, const char *subsystem); int device_set_drivers_subsystem(sd_device *device); int device_set_driver(sd_device *device, const char *_driver); int device_set_usec_initialized(sd_device *device, usec_t when); diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c index 7ec3f6f0d6b..37c655578c7 100644 --- a/src/libsystemd/sd-device/device-private.c +++ b/src/libsystemd/sd-device/device-private.c @@ -765,18 +765,15 @@ int device_shallow_clone(sd_device *old_device, sd_device **new_device) { if (r < 0) return r; - if (sd_device_get_subsystem(old_device, &val) >= 0) { - r = device_set_subsystem(ret, val); + (void) sd_device_get_subsystem(old_device, &val); + r = device_set_subsystem(ret, val); + if (r < 0) + return r; + if (streq_ptr(val, "drivers")) { + r = free_and_strdup(&ret->driver_subsystem, old_device->driver_subsystem); if (r < 0) return r; - - if (streq(val, "drivers")) { - ret->driver_subsystem = strdup(old_device->driver_subsystem); - if (!ret->driver_subsystem) - return -ENOMEM; - } - } else - ret->subsystem_set = true; + } /* The device may be already removed. Let's copy minimal set of information to make * device_get_device_id() work without uevent file. */ diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index b5e7a1a44d1..200cf56a3fc 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -779,23 +779,24 @@ _public_ int sd_device_get_parent(sd_device *child, sd_device **ret) { return 0; } -int device_set_subsystem(sd_device *device, const char *_subsystem) { - _cleanup_free_ char *subsystem = NULL; +int device_set_subsystem(sd_device *device, const char *subsystem) { + _cleanup_free_ char *s = NULL; int r; assert(device); - assert(_subsystem); - subsystem = strdup(_subsystem); - if (!subsystem) - return -ENOMEM; + if (subsystem) { + s = strdup(subsystem); + if (!s) + return -ENOMEM; + } - r = device_add_property_internal(device, "SUBSYSTEM", subsystem); + r = device_add_property_internal(device, "SUBSYSTEM", s); if (r < 0) return r; device->subsystem_set = true; - return free_and_replace(device->subsystem, subsystem); + return free_and_replace(device->subsystem, s); } int device_set_drivers_subsystem(sd_device *device) { -- 2.47.3