summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libudev/libudev-hwdb.c1
-rw-r--r--src/udev/udev-event.c17
-rw-r--r--src/udev/udev-rules.c1
-rw-r--r--src/udev/udev.h11
-rw-r--r--src/udev/udevadm-test.c6
-rw-r--r--src/udev/udevd.c12
-rw-r--r--test/test-udev.c10
7 files changed, 44 insertions, 14 deletions
diff --git a/src/libudev/libudev-hwdb.c b/src/libudev/libudev-hwdb.c
index 5eecd56f80..3773f8f868 100644
--- a/src/libudev/libudev-hwdb.c
+++ b/src/libudev/libudev-hwdb.c
@@ -360,6 +360,7 @@ bool udev_hwdb_validate(struct udev_hwdb *hwdb) {
return false;
if (stat("/etc/udev/hwdb.bin", &st) < 0)
return true;
+
if (timespec_load(&hwdb->st.st_mtim) != timespec_load(&st.st_mtim))
return true;
return false;
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
index 317a593f2b..fc4a2ec848 100644
--- a/src/udev/udev-event.c
+++ b/src/udev/udev-event.c
@@ -847,9 +847,10 @@ static int rename_netif(struct udev_event *event) {
}
void udev_event_execute_rules(struct udev_event *event,
- usec_t timeout_usec,
- usec_t timeout_warn_usec,
- struct udev_rules *rules, const sigset_t *sigmask) {
+ usec_t timeout_usec, usec_t timeout_warn_usec,
+ struct udev_list *properties_list,
+ struct udev_rules *rules,
+ const sigset_t *sigmask) {
struct udev_device *dev = event->dev;
if (udev_device_get_subsystem(dev) == NULL)
@@ -863,7 +864,10 @@ void udev_event_execute_rules(struct udev_event *event,
if (major(udev_device_get_devnum(dev)) != 0)
udev_watch_end(event->udev, dev);
- udev_rules_apply_to_event(rules, event,timeout_usec, timeout_warn_usec, sigmask);
+ udev_rules_apply_to_event(rules, event,
+ timeout_usec, timeout_warn_usec,
+ properties_list,
+ sigmask);
if (major(udev_device_get_devnum(dev)) != 0)
udev_node_remove(dev);
@@ -897,7 +901,10 @@ void udev_event_execute_rules(struct udev_event *event,
}
}
- udev_rules_apply_to_event(rules, event, timeout_usec, timeout_warn_usec, sigmask);
+ udev_rules_apply_to_event(rules, event,
+ timeout_usec, timeout_warn_usec,
+ properties_list,
+ sigmask);
/* rename a new network interface, if needed */
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index 40707ff731..be33777fe9 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -1945,6 +1945,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
struct udev_event *event,
usec_t timeout_usec,
usec_t timeout_warn_usec,
+ struct udev_list *properties_list,
const sigset_t *sigmask) {
struct token *cur;
struct token *rule;
diff --git a/src/udev/udev.h b/src/udev/udev.h
index 86f4b98911..fae0408672 100644
--- a/src/udev/udev.h
+++ b/src/udev/udev.h
@@ -71,7 +71,9 @@ struct udev_rules;
struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names);
struct udev_rules *udev_rules_unref(struct udev_rules *rules);
bool udev_rules_check_timestamp(struct udev_rules *rules);
-int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec,
+int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event,
+ usec_t timeout_usec, usec_t timeout_warn_usec,
+ struct udev_list *properties_list,
const sigset_t *sigmask);
int udev_rules_apply_static_dev_perms(struct udev_rules *rules);
@@ -86,8 +88,11 @@ int udev_event_spawn(struct udev_event *event,
usec_t timeout_warn_usec,
const char *cmd, char **envp, const sigset_t *sigmask,
char *result, size_t ressize);
-void udev_event_execute_rules(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec,
- struct udev_rules *rules, const sigset_t *sigset);
+void udev_event_execute_rules(struct udev_event *event,
+ usec_t timeout_usec, usec_t timeout_warn_usec,
+ struct udev_list *properties_list,
+ struct udev_rules *rules,
+ const sigset_t *sigset);
void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, const sigset_t *sigset);
int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]);
diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c
index 4738b611c3..d9d61b42d5 100644
--- a/src/udev/udevadm-test.c
+++ b/src/udev/udevadm-test.c
@@ -136,7 +136,11 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) {
goto out;
}
- udev_event_execute_rules(event, 60 * USEC_PER_SEC, 20 * USEC_PER_SEC, rules, &sigmask_orig);
+ udev_event_execute_rules(event,
+ 60 * USEC_PER_SEC, 20 * USEC_PER_SEC,
+ NULL,
+ rules,
+ &sigmask_orig);
udev_list_entry_foreach(entry, udev_device_get_properties_list_entry(dev))
printf("%s=%s\n", udev_list_entry_get_name(entry), udev_list_entry_get_value(entry));
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 510712a1b9..f5e116623e 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -300,9 +300,15 @@ static void worker_new(struct event *event) {
}
/* 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_run(udev_event, arg_event_timeout_usec, arg_event_timeout_warn_usec, &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);
/* apply/restore inotify watch */
if (udev_event->inotify_watch) {
diff --git a/test/test-udev.c b/test/test-udev.c
index 92ea765f2f..b59a7969ad 100644
--- a/test/test-udev.c
+++ b/test/test-udev.c
@@ -160,8 +160,14 @@ int main(int argc, char *argv[]) {
}
}
- udev_event_execute_rules(event, 3 * USEC_PER_SEC, USEC_PER_SEC, rules, &sigmask_orig);
- udev_event_execute_run(event, 3 * USEC_PER_SEC, USEC_PER_SEC, NULL);
+ udev_event_execute_rules(event,
+ 3 * USEC_PER_SEC, USEC_PER_SEC,
+ NULL,
+ rules,
+ &sigmask_orig);
+ udev_event_execute_run(event,
+ 3 * USEC_PER_SEC, USEC_PER_SEC,
+ NULL);
out:
if (event != NULL && event->fd_signal >= 0)
close(event->fd_signal);