X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ftmpfiles.c;h=954c3b7cf3152dcd6467899497f0ec064ba66184;hb=88bb8d215aa0f5576eb3f9c77c30cdc4b17783fe;hp=2526d1e915d1aace1598a4238c3251124e75d56c;hpb=bfe95f35bf87c91d63b9d62dde5f029dd38d27a4;p=elogind.git diff --git a/src/tmpfiles.c b/src/tmpfiles.c index 2526d1e91..954c3b7cf 100644 --- a/src/tmpfiles.c +++ b/src/tmpfiles.c @@ -804,20 +804,6 @@ finish: return r; } -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 help(void) { printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n" @@ -912,6 +898,7 @@ static int read_config_file(const char *fn, bool ignore_enoent) { return -errno; } + log_debug("apply: %s\n", fn); for (;;) { char line[LINE_MAX], *l; int k; @@ -974,41 +961,30 @@ int main(int argc, char *argv[]) { r = EXIT_FAILURE; } else { - int n, j; - struct dirent **de = NULL; - - if ((n = scandir("/etc/tmpfiles.d/", &de, scandir_filter, alphasort)) < 0) { - - if (errno != ENOENT) { - log_error("Failed to enumerate /etc/tmpfiles.d/ files: %m"); - r = EXIT_FAILURE; - } - + char **files, **f; + + r = conf_files_list(&files, ".conf", + "/run/tmpfiles.d", + "/etc/tmpfiles.d", + "/usr/local/lib/tmpfiles.d", + "/usr/lib/tmpfiles.d", + NULL); + if (r < 0) { + r = EXIT_FAILURE; + log_error("Failed to enumerate tmpfiles.d files: %s", strerror(-r)); goto finish; } - for (j = 0; j < n; j++) { - int k; - char *fn; - - k = asprintf(&fn, "/etc/tmpfiles.d/%s", de[j]->d_name); - free(de[j]); - - if (k < 0) { - log_error("Failed to allocate file name."); + STRV_FOREACH(f, files) { + if (read_config_file(*f, true) < 0) r = EXIT_FAILURE; - continue; - } - - if (read_config_file(fn, true) < 0) - r = EXIT_FAILURE; - - free(fn); } - free(de); + strv_free(files); } + + HASHMAP_FOREACH(i, globs, iterator) if (process_item(i) < 0) r = EXIT_FAILURE;