X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fudev%2Fudev-event.c;h=a883edca075914d5b1499182c12826600858d267;hb=ec3281d3b681b002dfe1a4bea0532a504e37557a;hp=6ad80d51aa4a08f93a4e04ea6202c5454c75baa4;hpb=dd5eddd28a74a49607a8fffcaf960040dba98479;p=elogind.git diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 6ad80d51a..a883edca0 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -34,8 +34,7 @@ #include "udev.h" #include "rtnl-util.h" -struct udev_event *udev_event_new(struct udev_device *dev) -{ +struct udev_event *udev_event_new(struct udev_device *dev) { struct udev *udev = udev_device_get_udev(dev); struct udev_event *event; @@ -51,10 +50,10 @@ struct udev_event *udev_event_new(struct udev_device *dev) return event; } -void udev_event_unref(struct udev_event *event) -{ +void udev_event_unref(struct udev_event *event) { if (event == NULL) return; + sd_rtnl_unref(event->rtnl); udev_list_cleanup(&event->run_list); udev_list_cleanup(&event->seclabel_list); free(event->program_result); @@ -62,8 +61,7 @@ void udev_event_unref(struct udev_event *event) free(event); } -size_t udev_event_apply_format(struct udev_event *event, const char *src, char *dest, size_t size) -{ +size_t udev_event_apply_format(struct udev_event *event, const char *src, char *dest, size_t size) { struct udev_device *dev = event->dev; enum subst_type { SUBST_UNKNOWN, @@ -377,8 +375,7 @@ out: static int spawn_exec(struct udev_event *event, const char *cmd, char *const argv[], char **envp, const sigset_t *sigmask, - int fd_stdout, int fd_stderr) -{ + int fd_stdout, int fd_stderr) { int err; int fd; @@ -424,8 +421,7 @@ static void spawn_read(struct udev_event *event, usec_t timeout_usec, const char *cmd, int fd_stdout, int fd_stderr, - char *result, size_t ressize) -{ + char *result, size_t ressize) { size_t respos = 0; int fd_ep = -1; struct epoll_event ep_outpipe, ep_errpipe; @@ -623,8 +619,7 @@ out: return err; } -int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]) -{ +int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]) { int i = 0; char *pos; @@ -750,33 +745,26 @@ out: return err; } -static int rename_netif(struct udev_event *event) -{ +static int rename_netif(struct udev_event *event) { struct udev_device *dev = event->dev; - _cleanup_rtnl_unref_ sd_rtnl *rtnl = NULL; char name[IFNAMSIZ]; const char *oldname; int r; oldname = udev_device_get_sysname(dev); - log_debug("changing net interface name from '%s' to '%s'", - oldname, event->name); - strscpy(name, IFNAMSIZ, event->name); - r = sd_rtnl_open(&rtnl, 0); - if (r < 0) + r = rtnl_set_link_name(&event->rtnl, udev_device_get_ifindex(dev), name); + if (r < 0) { + log_error("error changing net interface name '%s' to '%s': %s", + oldname, name, strerror(-r)); return r; + } - r = rtnl_set_link_name(rtnl, udev_device_get_ifindex(dev), name); - if (r < 0) - log_error("error changing net interface name %s to %s: %s", - oldname, name, strerror(-r)); - else - print_kmsg("renamed network interface %s to %s\n", oldname, name); + log_debug("renamed network interface '%s' to '%s'\n", oldname, name); - return r; + return 0; } void udev_event_execute_rules(struct udev_event *event, @@ -812,6 +800,22 @@ void udev_event_execute_rules(struct udev_event *event, udev_watch_end(event->udev, event->dev_db); } + if (major(udev_device_get_devnum(dev)) == 0 && + streq(udev_device_get_action(dev), "move")) { + struct udev_list_entry *entry; + + for ((entry = udev_device_get_properties_list_entry(event->dev_db)); entry; entry = udev_list_entry_get_next(entry)) { + const char *key, *value; + struct udev_list_entry *property; + + key = udev_list_entry_get_name(entry); + value = udev_list_entry_get_value(entry); + + property = udev_device_add_property(event->dev, key, value); + udev_list_entry_set_num(property, true); + } + } + udev_rules_apply_to_event(rules, event, timeout_usec, sigmask); /* rename a new network interface, if needed */ @@ -823,8 +827,6 @@ void udev_event_execute_rules(struct udev_event *event, r = rename_netif(event); if (r >= 0) { - log_debug("renamed netif to '%s'", event->name); - /* remember old name */ udev_device_add_property(dev, "INTERFACE_OLD", udev_device_get_sysname(dev));