No need to canonicalize fixed paths
This commit is contained in:
parent
d8160f21fd
commit
2ad8416dd0
|
@ -305,7 +305,7 @@ int bridge_load(Manager *manager) {
|
|||
while ((bridge = hashmap_first(manager->bridges)))
|
||||
bridge_free(bridge);
|
||||
|
||||
r = conf_files_list_strv(&files, ".netdev", NULL, (const char **)manager->network_dirs);
|
||||
r = conf_files_list_strv(&files, ".netdev", NULL, network_dirs);
|
||||
if (r < 0) {
|
||||
log_error("Failed to enumerate netdev files: %s", strerror(-r));
|
||||
return r;
|
||||
|
|
|
@ -24,6 +24,15 @@
|
|||
#include "libudev-private.h"
|
||||
#include "udev-util.h"
|
||||
|
||||
const char* const network_dirs[] = {
|
||||
"/etc/systemd/network",
|
||||
"/run/systemd/network",
|
||||
"/usr/lib/systemd/network",
|
||||
#ifdef HAVE_SPLIT_USER
|
||||
"/lib/systemd/network",
|
||||
#endif
|
||||
NULL};
|
||||
|
||||
int manager_new(Manager **ret) {
|
||||
_cleanup_manager_free_ Manager *m = NULL;
|
||||
int r;
|
||||
|
@ -60,19 +69,6 @@ int manager_new(Manager **ret) {
|
|||
|
||||
LIST_HEAD_INIT(m->networks);
|
||||
|
||||
m->network_dirs = strv_new("/etc/systemd/network/",
|
||||
"/run/systemd/network/",
|
||||
"/usr/lib/systemd/network",
|
||||
#ifdef HAVE_SPLIT_USER
|
||||
"/lib/systemd/network",
|
||||
#endif
|
||||
NULL);
|
||||
if (!m->network_dirs)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!path_strv_canonicalize_uniq(m->network_dirs))
|
||||
return -ENOMEM;
|
||||
|
||||
*ret = m;
|
||||
m = NULL;
|
||||
|
||||
|
@ -100,7 +96,6 @@ void manager_free(Manager *m) {
|
|||
bridge_free(bridge);
|
||||
hashmap_free(m->bridges);
|
||||
|
||||
strv_free(m->network_dirs);
|
||||
sd_rtnl_unref(m->rtnl);
|
||||
|
||||
free(m);
|
||||
|
@ -110,7 +105,7 @@ int manager_load_config(Manager *m) {
|
|||
int r;
|
||||
|
||||
/* update timestamp */
|
||||
paths_check_timestamp(m->network_dirs, &m->network_dirs_ts_usec, true);
|
||||
paths_check_timestamp(network_dirs, &m->network_dirs_ts_usec, true);
|
||||
|
||||
r = bridge_load(m);
|
||||
if (r < 0)
|
||||
|
@ -124,7 +119,7 @@ int manager_load_config(Manager *m) {
|
|||
}
|
||||
|
||||
bool manager_should_reload(Manager *m) {
|
||||
return paths_check_timestamp(m->network_dirs, &m->network_dirs_ts_usec, false);
|
||||
return paths_check_timestamp(network_dirs, &m->network_dirs_ts_usec, false);
|
||||
}
|
||||
|
||||
static int manager_process_link(Manager *m, struct udev_device *device) {
|
||||
|
|
|
@ -112,7 +112,7 @@ int network_load(Manager *manager) {
|
|||
while ((network = manager->networks))
|
||||
network_free(network);
|
||||
|
||||
r = conf_files_list_strv(&files, ".network", NULL, (const char **)manager->network_dirs);
|
||||
r = conf_files_list_strv(&files, ".network", NULL, network_dirs);
|
||||
if (r < 0) {
|
||||
log_error("Failed to enumerate network files: %s", strerror(-r));
|
||||
return r;
|
||||
|
|
|
@ -178,10 +178,11 @@ struct Manager {
|
|||
Hashmap *bridges;
|
||||
LIST_HEAD(Network, networks);
|
||||
|
||||
char **network_dirs;
|
||||
usec_t network_dirs_ts_usec;
|
||||
};
|
||||
|
||||
extern const char* const network_dirs[];
|
||||
|
||||
/* Manager */
|
||||
|
||||
int manager_new(Manager **ret);
|
||||
|
|
|
@ -464,9 +464,9 @@ int find_binary(const char *name, char **filename) {
|
|||
}
|
||||
}
|
||||
|
||||
bool paths_check_timestamp(char **paths, usec_t *timestamp, bool update) {
|
||||
bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool update) {
|
||||
bool changed = false;
|
||||
char **i;
|
||||
const char* const* i;
|
||||
|
||||
assert(timestamp);
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ 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);
|
||||
bool paths_check_timestamp(const char* const* 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
|
||||
|
|
|
@ -50,10 +50,18 @@ struct link_config_ctx {
|
|||
|
||||
sd_rtnl *rtnl;
|
||||
|
||||
char **link_dirs;
|
||||
usec_t link_dirs_ts_usec;
|
||||
};
|
||||
|
||||
static const char* const link_dirs[] = {
|
||||
"/etc/systemd/network",
|
||||
"/run/systemd/network",
|
||||
"/usr/lib/systemd/network",
|
||||
#ifdef HAVE_SPLIT_USR
|
||||
"/lib/systemd/network",
|
||||
#endif
|
||||
NULL};
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(link_config_ctx*, link_config_ctx_free);
|
||||
#define _cleanup_link_config_ctx_free_ _cleanup_(link_config_ctx_freep)
|
||||
|
||||
|
@ -73,23 +81,6 @@ int link_config_ctx_new(link_config_ctx **ret) {
|
|||
|
||||
ctx->enable_name_policy = true;
|
||||
|
||||
ctx->link_dirs = strv_new("/etc/systemd/network",
|
||||
"/run/systemd/network",
|
||||
"/usr/lib/systemd/network",
|
||||
#ifdef HAVE_SPLIT_USR
|
||||
"/lib/systemd/network",
|
||||
#endif
|
||||
NULL);
|
||||
if (!ctx->link_dirs) {
|
||||
log_error("failed to build link config directory array");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (!path_strv_canonicalize_uniq(ctx->link_dirs)) {
|
||||
log_error("failed to canonicalize link config directories");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
*ret = ctx;
|
||||
ctx = NULL;
|
||||
|
||||
|
@ -140,7 +131,6 @@ void link_config_ctx_free(link_config_ctx *ctx) {
|
|||
|
||||
sd_rtnl_unref(ctx->rtnl);
|
||||
|
||||
strv_free(ctx->link_dirs);
|
||||
link_configs_free(ctx);
|
||||
|
||||
free(ctx);
|
||||
|
@ -224,9 +214,9 @@ int link_config_load(link_config_ctx *ctx) {
|
|||
}
|
||||
|
||||
/* update timestamp */
|
||||
paths_check_timestamp(ctx->link_dirs, &ctx->link_dirs_ts_usec, true);
|
||||
paths_check_timestamp(link_dirs, &ctx->link_dirs_ts_usec, true);
|
||||
|
||||
r = conf_files_list_strv(&files, ".link", NULL, (const char **)ctx->link_dirs);
|
||||
r = conf_files_list_strv(&files, ".link", NULL, link_dirs);
|
||||
if (r < 0) {
|
||||
log_error("failed to enumerate link files: %s", strerror(-r));
|
||||
return r;
|
||||
|
@ -242,7 +232,7 @@ int link_config_load(link_config_ctx *ctx) {
|
|||
}
|
||||
|
||||
bool link_config_should_reload(link_config_ctx *ctx) {
|
||||
return paths_check_timestamp(ctx->link_dirs, &ctx->link_dirs_ts_usec, false);
|
||||
return paths_check_timestamp(link_dirs, &ctx->link_dirs_ts_usec, false);
|
||||
}
|
||||
|
||||
int link_config_get(link_config_ctx *ctx, struct udev_device *device, link_config **ret) {
|
||||
|
|
|
@ -46,9 +46,14 @@ struct uid_gid {
|
|||
};
|
||||
};
|
||||
|
||||
static const char* const rules_dirs[] = {
|
||||
"/etc/udev/rules.d",
|
||||
"/run/udev/rules.d",
|
||||
UDEVLIBEXECDIR "/rules.d",
|
||||
NULL};
|
||||
|
||||
struct udev_rules {
|
||||
struct udev *udev;
|
||||
char **dirs;
|
||||
usec_t dirs_ts_usec;
|
||||
int resolve_names;
|
||||
|
||||
|
@ -1629,23 +1634,9 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names)
|
|||
if (!rules->strbuf)
|
||||
return udev_rules_unref(rules);
|
||||
|
||||
rules->dirs = strv_new("/etc/udev/rules.d",
|
||||
"/run/udev/rules.d",
|
||||
UDEVLIBEXECDIR "/rules.d",
|
||||
NULL);
|
||||
if (!rules->dirs) {
|
||||
log_error("failed to build config directory array");
|
||||
return udev_rules_unref(rules);
|
||||
}
|
||||
if (!path_strv_canonicalize(rules->dirs)) {
|
||||
log_error("failed to canonicalize config directories");
|
||||
return udev_rules_unref(rules);
|
||||
}
|
||||
strv_uniq(rules->dirs);
|
||||
|
||||
udev_rules_check_timestamp(rules);
|
||||
|
||||
r = conf_files_list_strv(&files, ".rules", NULL, (const char **)rules->dirs);
|
||||
r = conf_files_list_strv(&files, ".rules", NULL, rules_dirs);
|
||||
if (r < 0) {
|
||||
log_error("failed to enumerate rules files: %s", strerror(-r));
|
||||
return udev_rules_unref(rules);
|
||||
|
@ -1697,7 +1688,6 @@ struct udev_rules *udev_rules_unref(struct udev_rules *rules)
|
|||
strbuf_cleanup(rules->strbuf);
|
||||
free(rules->uids);
|
||||
free(rules->gids);
|
||||
strv_free(rules->dirs);
|
||||
free(rules);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1707,7 +1697,7 @@ bool udev_rules_check_timestamp(struct udev_rules *rules)
|
|||
if (!rules)
|
||||
return false;
|
||||
|
||||
return paths_check_timestamp(rules->dirs, &rules->dirs_ts_usec, true);
|
||||
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 New Issue