diff options
author | Tom Gundersen <teg@jklm.no> | 2013-10-26 00:36:49 +0200 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2013-10-26 14:34:31 +0200 |
commit | 8e18485284a8718d4a9111b7c1ed91cb2f9634b0 (patch) | |
tree | 4d12da40f925b3ba15c1d34d11e97f9871b08da5 /src | |
parent | 5ecb28f69ef670c7e194b656b57fda6f8850f0ba (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')
-rw-r--r-- | src/shared/path-util.c | 31 | ||||
-rw-r--r-- | src/shared/path-util.h | 3 | ||||
-rw-r--r-- | src/udev/udev-rules.c | 27 |
3 files changed, 35 insertions, 26 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 */ diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index 9d9529a0fe..58da79b876 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -1718,32 +1718,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) |