X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fudev%2Fudevd.c;h=a6258e714ac0d5eb62763133ce293777e37ac9d0;hp=65d086e9eea742c7accd3bd08c46883bbbc4a892;hb=ff49bc3212cb07d850dcfd59940539773a0be26f;hpb=cfe2061add5479710f6597899d632e64c54e62ef diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 65d086e9e..a6258e714 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -54,12 +54,6 @@ #include "dev-setup.h" #include "fileio.h" -void udev_main_log(struct udev *udev, int priority, - const char *file, int line, const char *fn, - const char *format, va_list args) { - log_metav(priority, file, line, fn, format, args); -} - static struct udev_rules *rules; static struct udev_ctrl *udev_ctrl; static struct udev_monitor *monitor; @@ -81,6 +75,7 @@ static sigset_t sigmask_orig; static UDEV_LIST(event_list); static UDEV_LIST(worker_list); static char *udev_cgroup; +static struct udev_list properties_list; static bool udev_exit; enum event_state { @@ -310,9 +305,15 @@ static void worker_new(struct event *event) { udev_event->rtnl = rtnl; /* apply rules, create node, symlinks */ - udev_event_execute_rules(udev_event, arg_event_timeout_usec, arg_event_timeout_warn_usec, rules, &sigmask_orig); + udev_event_execute_rules(udev_event, + arg_event_timeout_usec, arg_event_timeout_warn_usec, + &properties_list, + rules, + &sigmask_orig); - udev_event_execute_run(udev_event, arg_event_timeout_usec, arg_event_timeout_warn_usec, &sigmask_orig); + udev_event_execute_run(udev_event, + arg_event_timeout_usec, arg_event_timeout_warn_usec, + &sigmask_orig); /* in case rtnl was initialized */ rtnl = sd_rtnl_ref(udev_event->rtnl); @@ -644,7 +645,6 @@ static struct udev_ctrl_connection *handle_ctrl_msg(struct udev_ctrl *uctrl) { if (i >= 0) { log_debug("udevd message (SET_LOG_LEVEL) received, log_priority=%i", i); log_set_max_level(i); - udev_set_log_priority(udev, i); worker_kill(udev); } @@ -677,10 +677,10 @@ static struct udev_ctrl_connection *handle_ctrl_msg(struct udev_ctrl *uctrl) { val = &val[1]; if (val[0] == '\0') { log_debug("udevd message (ENV) received, unset '%s'", key); - udev_add_property(udev, key, NULL); + udev_list_entry_add(&properties_list, key, NULL); } else { log_debug("udevd message (ENV) received, set '%s=%s'", key, val); - udev_add_property(udev, key, val); + udev_list_entry_add(&properties_list, key, val); } } else { log_error("wrong key format '%s'", key); @@ -949,7 +949,7 @@ static int systemd_fds(struct udev *udev, int *rctrl, int *rnetlink) { } /* - * read the kernel commandline, in case we need to get into debug mode + * read the kernel command line, in case we need to get into debug mode * udev.log-priority= syslog priority * udev.children-max= events are fully serialized if set to 1 * udev.exec-delay= delay execution of every executed program @@ -961,10 +961,10 @@ static void kernel_cmdline_options(struct udev *udev) { int r; r = proc_cmdline(&line); - if (r < 0) - log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r)); - if (r <= 0) + if (r < 0) { + log_warning_errno(r, "Failed to read /proc/cmdline, ignoring: %m"); return; + } FOREACH_WORD_QUOTED(word, l, line, state) { char *s, *opt, *value; @@ -984,7 +984,6 @@ static void kernel_cmdline_options(struct udev *udev) { prio = util_log_priority(value); log_set_max_level(prio); - udev_set_log_priority(udev, prio); } else if ((value = startswith(opt, "udev.children-max="))) { r = safe_atoi(value, &arg_children_max); if (r < 0) @@ -1120,19 +1119,14 @@ int main(int argc, char *argv[]) { log_parse_environment(); log_open(); - udev_set_log_fn(udev, udev_main_log); - log_set_max_level(udev_get_log_priority(udev)); - r = parse_argv(argc, argv); if (r <= 0) goto exit; kernel_cmdline_options(udev); - if (arg_debug) { + if (arg_debug) log_set_max_level(LOG_DEBUG); - udev_set_log_priority(udev, LOG_DEBUG); - } if (getuid() != 0) { log_error("root privileges required"); @@ -1141,7 +1135,7 @@ int main(int argc, char *argv[]) { r = mac_selinux_init("/dev"); if (r < 0) { - log_error("could not initialize labelling: %s", strerror(-r)); + log_error_errno(r, "could not initialize labelling: %m"); goto exit; } @@ -1154,6 +1148,8 @@ int main(int argc, char *argv[]) { umask(022); + udev_list_init(udev, &properties_list, true); + r = mkdir("/run/udev", 0755); if (r < 0 && errno != EEXIST) { log_error("could not create /run/udev: %m"); @@ -1231,7 +1227,7 @@ int main(int argc, char *argv[]) { udev_monitor_set_receive_buffer_size(monitor, 128 * 1024 * 1024); - log_info("starting version " VERSION "\n"); + log_info("starting version " VERSION); udev_builtin_init(udev); @@ -1243,7 +1239,7 @@ int main(int argc, char *argv[]) { rc = udev_rules_apply_static_dev_perms(rules); if (rc < 0) - log_error("failed to apply permissions on static device nodes - %s", strerror(-rc)); + log_error_errno(rc, "failed to apply permissions on static device nodes - %m"); if (arg_daemonize) { pid_t pid; @@ -1542,6 +1538,7 @@ exit_daemonize: udev_monitor_unref(monitor); udev_ctrl_connection_unref(ctrl_conn); udev_ctrl_unref(udev_ctrl); + udev_list_cleanup(&properties_list); mac_selinux_finish(); udev_unref(udev); log_close();