chiark / gitweb /
udev: path_id - skip PCI-only-parents for block devices
[elogind.git] / src / shared / util.c
index ba2456283962574753eaa1670c6f3373bfe1ee46..2bfa2cb4e64a67cc684482a87038b0a4dab76922 100644 (file)
@@ -4877,7 +4877,7 @@ static int files_add(Hashmap *h, const char *path, const char *suffix) {
 
         for (;;) {
                 int k;
-                char *p, *f;
+                char *p;
 
                 k = readdir_r(dir, &buffer, &de);
                 if (k != 0) {
@@ -4896,17 +4896,10 @@ static int files_add(Hashmap *h, const char *path, const char *suffix) {
                         goto finish;
                 }
 
-                f = canonicalize_file_name(p);
-                if (!f) {
-                        log_error("Failed to canonicalize file name '%s': %m", p);
+                if (hashmap_put(h, file_name_from_path(p), p) <= 0) {
+                        log_debug("Skip overridden file: %s.", p);
                         free(p);
-                        continue;
                 }
-                free(p);
-
-                log_debug("found: %s\n", f);
-                if (hashmap_put(h, file_name_from_path(f), f) <= 0)
-                        free(f);
         }
 
 finish:
@@ -4922,29 +4915,13 @@ static int base_cmp(const void *a, const void *b) {
         return strcmp(file_name_from_path(s1), file_name_from_path(s2));
 }
 
-int conf_files_list(char ***strv, const char *suffix, const char *dir, ...) {
+int conf_files_list_strv(char ***strv, const char *suffix, const char **dirs) {
         Hashmap *fh = NULL;
-        char **dirs = NULL;
         char **files = NULL;
-        char **p;
-        va_list ap;
+        const char **p;
         int r = 0;
 
-        va_start(ap, dir);
-        dirs = strv_new_ap(dir, ap);
-        va_end(ap);
-        if (!dirs) {
-                r = -ENOMEM;
-                goto finish;
-        }
-        if (!strv_path_canonicalize(dirs)) {
-                r = -ENOMEM;
-                goto finish;
-        }
-        if (!strv_uniq(dirs)) {
-                r = -ENOMEM;
-                goto finish;
-        }
+        assert(dirs);
 
         fh = hashmap_new(string_hash_func, string_compare_func);
         if (!fh) {
@@ -4966,16 +4943,40 @@ int conf_files_list(char ***strv, const char *suffix, const char *dir, ...) {
                 r = -ENOMEM;
                 goto finish;
         }
-
         qsort(files, hashmap_size(fh), sizeof(char *), base_cmp);
 
 finish:
-        strv_free(dirs);
         hashmap_free(fh);
         *strv = files;
         return r;
 }
 
+int conf_files_list(char ***strv, const char *suffix, const char *dir, ...) {
+        char **dirs = NULL;
+        va_list ap;
+        int r;
+
+        va_start(ap, dir);
+        dirs = strv_new_ap(dir, ap);
+        va_end(ap);
+        if (!dirs) {
+                r = -ENOMEM;
+                goto finish;
+        }
+
+        if (!strv_path_canonicalize(dirs)) {
+                r = -ENOMEM;
+                goto finish;
+        }
+        strv_uniq(dirs);
+
+        r = conf_files_list_strv(strv, suffix, (const char **)dirs);
+
+finish:
+        strv_free(dirs);
+        return r;
+}
+
 int hwclock_is_localtime(void) {
         FILE *f;
         bool local = false;
@@ -5001,7 +5002,6 @@ int hwclock_is_localtime(void) {
                 if (!b)
                         return -EIO;
 
-
                 truncate_nl(line);
                 local = streq(line, "LOCAL");
 
@@ -5136,7 +5136,7 @@ int hwclock_get_time(struct tm *tm) {
         if (ioctl(fd, RTC_RD_TIME, tm) < 0)
                 err = -errno;
 
-        /* We don't now daylight saving, so we reset this in order not
+        /* We don't know daylight saving, so we reset this in order not
          * to confused mktime(). */
         tm->tm_isdst = -1;