summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/udev/Makefile.am2
-rw-r--r--src/udev/path-util.c57
-rw-r--r--src/udev/path-util.h26
-rw-r--r--src/udev/udev-rules.c27
4 files changed, 86 insertions, 26 deletions
diff --git a/src/udev/Makefile.am b/src/udev/Makefile.am
index d395620abb..bf23ea63d4 100644
--- a/src/udev/Makefile.am
+++ b/src/udev/Makefile.am
@@ -58,6 +58,7 @@ libudev_core_la_SOURCES = \
dev-setup.c \
label.c \
mkdir.c \
+ path-util.c \
smack-util.c
if ENABLE_FIRMWARE
@@ -69,6 +70,7 @@ noinst_HEADERS = \
dev-setup.h \
label.h \
mkdir.h \
+ path-util.h \
smack-util.h
include_HEADERS = \
diff --git a/src/udev/path-util.c b/src/udev/path-util.c
new file mode 100644
index 0000000000..17650be086
--- /dev/null
+++ b/src/udev/path-util.c
@@ -0,0 +1,57 @@
+/***
+ This file is part of eudev, forked from systemd.
+
+ Copyright 2010-2012 Lennart Poettering
+
+ systemd is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "util.h"
+#include "path-util.h"
+
+bool paths_check_timestamp(char **paths, usec_t *paths_ts_usec, bool update)
+{
+ unsigned int i;
+ bool changed = false;
+
+ if (paths == NULL)
+ goto out;
+
+ for (i = 0; paths[i]; i++) {
+ struct stat stats;
+
+ if (stat(paths[i], &stats) < 0)
+ continue;
+
+ if (paths_ts_usec[i] == timespec_load(&stats.st_mtim))
+ continue;
+
+ /* first check */
+ if (paths_ts_usec[i] != 0) {
+ log_debug("reload - timestamp of '%s' changed\n", paths[i]);
+ changed = true;
+ }
+
+ /* update timestamp */
+ if (update)
+ paths_ts_usec[i] = timespec_load(&stats.st_mtim);
+ }
+out:
+ return changed;
+}
diff --git a/src/udev/path-util.h b/src/udev/path-util.h
new file mode 100644
index 0000000000..ceaaded284
--- /dev/null
+++ b/src/udev/path-util.h
@@ -0,0 +1,26 @@
+/***
+ This file is part of eudev, forked from systemd.
+
+ Copyright 2010-2012 Lennart Poettering
+
+ systemd is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdbool.h>
+#include <inttypes.h>
+
+typedef uint64_t usec_t;
+typedef uint64_t nsec_t;
+
+bool paths_check_timestamp(char **paths, usec_t *paths_ts_usec, bool update);
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index c5dff9903c..18749f5edb 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -1723,32 +1723,7 @@ struct udev_rules *udev_rules_unref(struct udev_rules *rules)
bool udev_rules_check_timestamp(struct udev_rules *rules)
{
- unsigned int i;
- bool changed = false;
-
- if (rules == NULL)
- goto out;
-
- for (i = 0; rules->dirs[i]; i++) {
- struct stat stats;
-
- if (stat(rules->dirs[i], &stats) < 0)
- continue;
-
- if (rules->dirs_ts_usec[i] == timespec_load(&stats.st_mtim))
- continue;
-
- /* first check */
- if (rules->dirs_ts_usec[i] != 0) {
- log_debug("reload - timestamp of '%s' changed\n", rules->dirs[i]);
- changed = true;
- }
-
- /* update timestamp */
- rules->dirs_ts_usec[i] = timespec_load(&stats.st_mtim);
- }
-out:
- return changed;
+ return paths_check_timestamp(rules->dirs, rules->dirs_ts_usec, true);
}
static int match_key(struct udev_rules *rules, struct token *token, const char *val)