mirror of
https://github.com/systemd/systemd.git
synced 2025-01-06 17:18:12 +03:00
udev: move device_rename() from device-private.c
The function is used only by udevd.
This commit is contained in:
parent
1de6a49721
commit
ff88b94953
@ -618,51 +618,6 @@ int device_get_devlink_priority(sd_device *device, int *ret) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int device_rename(sd_device *device, const char *name) {
|
||||
_cleanup_free_ char *new_syspath = NULL;
|
||||
const char *s;
|
||||
int r;
|
||||
|
||||
assert(device);
|
||||
assert(name);
|
||||
|
||||
if (!filename_is_valid(name))
|
||||
return -EINVAL;
|
||||
|
||||
r = sd_device_get_syspath(device, &s);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = path_extract_directory(s, &new_syspath);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (!path_extend(&new_syspath, name))
|
||||
return -ENOMEM;
|
||||
|
||||
if (!path_is_safe(new_syspath))
|
||||
return -EINVAL;
|
||||
|
||||
/* At the time this is called, the renamed device may not exist yet. Hence, we cannot validate
|
||||
* the new syspath. */
|
||||
r = device_set_syspath(device, new_syspath, /* verify = */ false);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_device_get_property_value(device, "INTERFACE", &s);
|
||||
if (r == -ENOENT)
|
||||
return 0;
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* like DEVPATH_OLD, INTERFACE_OLD is not saved to the db, but only stays around for the current event */
|
||||
r = device_add_property_internal(device, "INTERFACE_OLD", s);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return device_add_property_internal(device, "INTERFACE", name);
|
||||
}
|
||||
|
||||
static int device_shallow_clone(sd_device *device, sd_device **ret) {
|
||||
_cleanup_(sd_device_unrefp) sd_device *dest = NULL;
|
||||
const char *val = NULL;
|
||||
|
@ -53,7 +53,6 @@ int device_properties_prepare(sd_device *device);
|
||||
int device_get_properties_nulstr(sd_device *device, const char **ret_nulstr, size_t *ret_len);
|
||||
int device_get_properties_strv(sd_device *device, char ***ret);
|
||||
|
||||
int device_rename(sd_device *device, const char *name);
|
||||
int device_clone_with_db(sd_device *device, sd_device **ret);
|
||||
|
||||
int device_tag_index(sd_device *dev, sd_device *dev_old, bool add);
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "sd-event.h"
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "device-internal.h"
|
||||
#include "device-private.h"
|
||||
#include "device-util.h"
|
||||
#include "fd-util.h"
|
||||
@ -859,6 +860,51 @@ int udev_event_spawn(
|
||||
return r; /* 0 for success, and positive if the program failed */
|
||||
}
|
||||
|
||||
static int device_rename(sd_device *device, const char *name) {
|
||||
_cleanup_free_ char *new_syspath = NULL;
|
||||
const char *s;
|
||||
int r;
|
||||
|
||||
assert(device);
|
||||
assert(name);
|
||||
|
||||
if (!filename_is_valid(name))
|
||||
return -EINVAL;
|
||||
|
||||
r = sd_device_get_syspath(device, &s);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = path_extract_directory(s, &new_syspath);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (!path_extend(&new_syspath, name))
|
||||
return -ENOMEM;
|
||||
|
||||
if (!path_is_safe(new_syspath))
|
||||
return -EINVAL;
|
||||
|
||||
/* At the time this is called, the renamed device may not exist yet. Hence, we cannot validate
|
||||
* the new syspath. */
|
||||
r = device_set_syspath(device, new_syspath, /* verify = */ false);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_device_get_property_value(device, "INTERFACE", &s);
|
||||
if (r == -ENOENT)
|
||||
return 0;
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* like DEVPATH_OLD, INTERFACE_OLD is not saved to the db, but only stays around for the current event */
|
||||
r = device_add_property_internal(device, "INTERFACE_OLD", s);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return device_add_property_internal(device, "INTERFACE", name);
|
||||
}
|
||||
|
||||
static int rename_netif(UdevEvent *event) {
|
||||
const char *oldname;
|
||||
sd_device *dev;
|
||||
|
Loading…
Reference in New Issue
Block a user