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);
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. */
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) {