chiark / gitweb /
No need to canonicalize fixed paths
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 8 Jan 2014 22:41:41 +0000 (17:41 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 9 Jan 2014 03:15:27 +0000 (22:15 -0500)
src/network/networkd-bridge.c
src/network/networkd-manager.c
src/network/networkd-network.c
src/network/networkd.h
src/shared/path-util.c
src/shared/path-util.h
src/udev/net/link-config.c
src/udev/udev-rules.c

index ac71cf3..1b05bf1 100644 (file)
@@ -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;
index 4e2cf45..c9ce1d6 100644 (file)
 #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) {
index 0326fe6..1606042 100644 (file)
@@ -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;
index 75309a9..bfa01a9 100644 (file)
@@ -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);
index 2cc2b2d..fc42a70 100644 (file)
@@ -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);
 
index 4b74fe0..178bed5 100644 (file)
@@ -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
index a31c121..bd97cd8 100644 (file)
@@ -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) {
index 52634f1..8d2b057 100644 (file)
@@ -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)