]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-device: let device_set_subsystem() accept NULL
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 3 Jun 2021 16:37:26 +0000 (18:37 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 16 Jun 2021 06:54:16 +0000 (08:54 +0200)
This makes device_shallow_clone() simpler.

Follow-up for 2255e8adee37c490bf8cf2daab791b6f746bb0a0.

src/libsystemd/sd-device/device-internal.h
src/libsystemd/sd-device/device-private.c
src/libsystemd/sd-device/sd-device.c

index 19dac5c21f09927994a04e6ffa6bdfd7ab4feca0..a1ba9ba754f647b3b97a60ed6fab1723fa04305e 100644 (file)
@@ -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);
index 7ec3f6f0d6b87abef0d485575d5a601f8a7eb036..37c655578c73a41e43643ba48c5983ff94b6dbfb 100644 (file)
@@ -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. */
index b5e7a1a44d1014d05a86fb4330d0add0c751547c..200cf56a3fc805bb7775cdf3035f66d8c74f7f74 100644 (file)
@@ -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) {