1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-09 01:18:19 +03:00

Merge pull request #19948 from keszybz/set-driver-refactoring

A minor refactoring to sd-device internals
This commit is contained in:
Luca Boccassi 2021-06-16 13:48:18 +01:00 committed by GitHub
commit 798d7d0a8a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 36 deletions

View 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_driver(sd_device *device, const char *driver);
int device_set_usec_initialized(sd_device *device, usec_t when);

View 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. */

View 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) {
@ -956,23 +957,24 @@ _public_ int sd_device_get_devnum(sd_device *device, dev_t *devnum) {
return 0;
}
int device_set_driver(sd_device *device, const char *_driver) {
_cleanup_free_ char *driver = NULL;
int device_set_driver(sd_device *device, const char *driver) {
_cleanup_free_ char *d = NULL;
int r;
assert(device);
assert(_driver);
driver = strdup(_driver);
if (!driver)
return -ENOMEM;
if (driver) {
d = strdup(driver);
if (!d)
return -ENOMEM;
}
r = device_add_property_internal(device, "DRIVER", driver);
r = device_add_property_internal(device, "DRIVER", d);
if (r < 0)
return r;
device->driver_set = true;
return free_and_replace(device->driver, driver);
return free_and_replace(device->driver, d);
}
_public_ int sd_device_get_driver(sd_device *device, const char **ret) {
@ -990,14 +992,14 @@ _public_ int sd_device_get_driver(sd_device *device, const char **ret) {
path = strjoina(syspath, "/driver");
r = readlink_value(path, &driver);
if (r >= 0) {
r = device_set_driver(device, driver);
if (r < 0)
return log_device_debug_errno(device, r, "sd-device: Failed to set driver for %s: %m", device->devpath);
} else if (r == -ENOENT)
device->driver_set = true;
else
return log_device_debug_errno(device, r, "sd-device: Failed to set driver for %s: %m", device->devpath);
if (r < 0 && r != -ENOENT)
return log_device_debug_errno(device, r,
"sd-device: readlink(\"%s\") failed: %m", path);
r = device_set_driver(device, driver);
if (r < 0)
return log_device_debug_errno(device, r,
"sd-device: Failed to set driver \"%s\": %m", driver);
}
if (!device->driver)