-static int scandir_filter(const struct dirent *d) {
- assert(d);
-
- if (ignore_file(d->d_name))
- return 0;
-
- if (d->d_type != DT_REG &&
- d->d_type != DT_LNK &&
- d->d_type != DT_UNKNOWN)
- return 0;
-
- return endswith(d->d_name, ".conf");
-}
-
-static int apply_tree(const char *path) {
- struct dirent **de = NULL;
- int n, i, r = 0;
-
- if ((n = scandir(path, &de, scandir_filter, alphasort)) < 0) {
-
- if (errno == ENOENT)
- return 0;
-
- log_error("Failed to enumerate %s files: %m", path);
- return -errno;
- }
-
- for (i = 0; i < n; i++) {
- char *fn;
- int k;
-
- k = asprintf(&fn, "%s/%s", path, de[i]->d_name);
- free(de[i]);
-
- if (k < 0) {
- log_error("Failed to allocate file name.");
-
- if (r == 0)
- r = -ENOMEM;
- continue;
- }
-
- if ((k = apply_file(fn, true)) < 0 && r == 0)
- r = k;
- }
-
- free(de);
-
- return r;
-}
-