#include "device-util.h"
#include "fd-util.h"
#include "format-util.h"
-#include "libudev-device-internal.h"
+#include "libudev-private.h"
#include "netlink-util.h"
#include "path-util.h"
#include "process-util.h"
size_t result_len;
} Spawn;
-struct udev_event *udev_event_new(struct udev_device *dev, int exec_delay, sd_netlink *rtnl) {
+struct udev_event *udev_event_new(sd_device *dev, int exec_delay, sd_netlink *rtnl) {
struct udev_event *event;
assert(dev);
return NULL;
*event = (struct udev_event) {
- .dev = dev,
+ .dev = sd_device_ref(dev),
.birth_usec = now(CLOCK_MONOTONIC),
.exec_delay = exec_delay,
.rtnl = sd_netlink_ref(rtnl),
if (!event)
return NULL;
- udev_device_unref(event->dev);
+ sd_device_unref(event->dev);
sd_device_unref(event->dev_db_clone);
sd_netlink_unref(event->rtnl);
while ((p = hashmap_steal_first_key(event->run_list)))
static ssize_t subst_format_var(struct udev_event *event,
const struct subst_map_entry *entry, char *attr,
char *dest, size_t l) {
- sd_device *parent, *dev = event->dev->device;
+ sd_device *parent, *dev = event->dev;
const char *val = NULL;
char *s = dest;
dev_t devnum;
subst_len = subst_format_var(event, entry, attr, s, l);
if (subst_len < 0) {
if (format_dollar)
- log_device_warning_errno(event->dev->device, subst_len, "Failed to substitute variable '$%s', ignoring: %m", entry->name);
+ log_device_warning_errno(event->dev, subst_len, "Failed to substitute variable '$%s', ignoring: %m", entry->name);
else
- log_device_warning_errno(event->dev->device, subst_len, "Failed to apply format '%%%c', ignoring: %m", entry->fmt);
+ log_device_warning_errno(event->dev, subst_len, "Failed to apply format '%%%c', ignoring: %m", entry->fmt);
continue;
}
free_and_replace(argv[0], program);
}
- r = device_get_properties_strv(event->dev->device, &envp);
+ r = device_get_properties_strv(event->dev, &envp);
if (r < 0)
- return log_device_error_errno(event->dev->device, r, "Failed to get device properties");
+ return log_device_error_errno(event->dev, r, "Failed to get device properties");
log_debug("Starting '%s'", cmd);
}
static int rename_netif(struct udev_event *event) {
- sd_device *dev = event->dev->device;
+ sd_device *dev = event->dev;
const char *action, *oldname;
char name[IFNAMSIZ];
int ifindex, r;
}
static int update_devnode(struct udev_event *event) {
- sd_device *dev = event->dev->device;
+ sd_device *dev = event->dev;
const char *action;
bool apply;
int r;
Hashmap *properties_list,
struct udev_rules *rules) {
- sd_device *dev = event->dev->device;
+ sd_device *dev = event->dev;
int r;
r = device_read_db_force(dev);
usec_t timeout_usec, usec_t timeout_warn_usec,
Hashmap *properties_list,
struct udev_rules *rules) {
- sd_device *dev = event->dev->device;
+ sd_device *dev = event->dev;
const char *subsystem, *action;
int r;
udev_event_apply_format(event, cmd, command, sizeof(command), false);
if (builtin_cmd >= 0 && builtin_cmd < _UDEV_BUILTIN_MAX)
- udev_builtin_run(event->dev->device, builtin_cmd, command, false);
+ udev_builtin_run(event->dev, builtin_cmd, command, false);
else {
if (event->exec_delay > 0) {
log_debug("delay execution of '%s'", command);
pid = fork();
switch (pid) {
case 0: {
- struct udev_device *dev = NULL;
+ _cleanup_(udev_device_unrefp) struct udev_device *dev = NULL;
_cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
int fd_monitor;
_cleanup_close_ int fd_signal = -1, fd_ep = -1;
assert(dev);
log_debug("seq %llu running", udev_device_get_seqnum(dev));
- udev_event = udev_event_new(dev, arg_exec_delay, rtnl);
+ udev_event = udev_event_new(dev->device, arg_exec_delay, rtnl);
if (!udev_event) {
r = -ENOMEM;
goto out;
log_error_errno(r, "failed to send result of seq %llu to main daemon: %m",
udev_device_get_seqnum(dev));
- udev_device_unref(dev);
- dev = NULL;
+ dev = udev_device_unref(dev);
/* wait for more device messages from main udevd, or term signal */
while (dev == NULL) {