summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2013-10-26 00:36:49 +0200
committerTom Gundersen <teg@jklm.no>2013-10-26 14:34:31 +0200
commit8e18485284a8718d4a9111b7c1ed91cb2f9634b0 (patch)
tree4d12da40f925b3ba15c1d34d11e97f9871b08da5 /src/shared
parent5ecb28f69ef670c7e194b656b57fda6f8850f0ba (diff)
udev: move udev_rules_check_timestamp to shared
I want to use this from a bulitin in a subsequent patch.
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/path-util.c31
-rw-r--r--src/shared/path-util.h3
2 files changed, 34 insertions, 0 deletions
diff --git a/src/shared/path-util.c b/src/shared/path-util.c
index 45099eeda8..def7a7409a 100644
--- a/src/shared/path-util.c
+++ b/src/shared/path-util.c
@@ -473,3 +473,34 @@ int find_binary(const char *name, char **filename) {
return -ENOENT;
}
}
+
+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/shared/path-util.h b/src/shared/path-util.h
index 0a42de7e27..42b4189d77 100644
--- a/src/shared/path-util.h
+++ b/src/shared/path-util.h
@@ -24,6 +24,7 @@
#include <stdbool.h>
#include "macro.h"
+#include "time-util.h"
#ifdef HAVE_SPLIT_USR
# define DEFAULT_PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
@@ -52,6 +53,8 @@ int path_is_os_tree(const char *path);
int find_binary(const char *name, char **filename);
+bool paths_check_timestamp(char **paths, usec_t *paths_ts_usec, bool update);
+
/* Iterates through the path prefixes of the specified path, going up
* the tree, to root. Also returns "" (and not "/"!) for the root
* directory. Excludes the specified directory itself */