chiark / gitweb /
No need to canonicalize fixed paths
[elogind.git] / src / udev / udev-rules.c
index bbf547222c2f212c40db6f15276be6abd0016893..8d2b057e2f6c4ab0d3726eb51c92c3ed5430e9e1 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;
 
@@ -961,7 +966,7 @@ static int rule_add_key(struct rule_tmp *rule_tmp, enum token_type type,
                 int has_glob;
 
                 has_split = (strchr(value, '|') != NULL);
-                has_glob = (strchr(value, '*') != NULL || strchr(value, '?') != NULL || strchr(value, '[') != NULL);
+                has_glob = string_is_glob(value);
                 if (has_split && has_glob) {
                         glob = GL_SPLIT_GLOB;
                 } else if (has_split) {
@@ -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)