udev: move udev_rules_check_timestamp to shared
I want to use this from a bulitin in a subsequent patch.
This commit is contained in:
parent
5ecb28f69e
commit
8e18485284
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue