X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fconf-files.c;h=34b86293d3a246b9703a36eab41f8f020de4ff38;hb=3f98659cce700fea91959312297950f15011b07b;hp=487c9a5e6861f966f769185fa49adad1961de207;hpb=9eb977db5b89b44f254ab40c1876a76b7d7ea2d0;p=elogind.git diff --git a/src/shared/conf-files.c b/src/shared/conf-files.c index 487c9a5e6..34b86293d 100644 --- a/src/shared/conf-files.c +++ b/src/shared/conf-files.c @@ -39,7 +39,6 @@ static int files_add(Hashmap *h, const char *path, const char *suffix) { DIR *dir; - struct dirent buffer, *de; int r = 0; dir = opendir(path); @@ -50,10 +49,12 @@ static int files_add(Hashmap *h, const char *path, const char *suffix) { } for (;;) { + struct dirent *de; + union dirent_storage buf; int k; char *p; - k = readdir_r(dir, &buffer, &de); + k = readdir_r(dir, &buf.de, &de); if (k != 0) { r = -k; goto finish; @@ -93,7 +94,7 @@ int conf_files_list_strv(char ***strv, const char *suffix, const char **dirs) { Hashmap *fh = NULL; char **files = NULL; const char **p; - int r = 0; + int r; assert(dirs); @@ -104,11 +105,10 @@ int conf_files_list_strv(char ***strv, const char *suffix, const char **dirs) { } STRV_FOREACH(p, dirs) { - if (files_add(fh, *p, suffix) < 0) { - log_error("Failed to search for files."); - r = -EINVAL; - goto finish; - } + r = files_add(fh, *p, suffix); + if (r < 0) + log_warning("Failed to search for files in %s: %s", + *p, strerror(-r)); } files = hashmap_get_strv(fh); @@ -118,6 +118,7 @@ int conf_files_list_strv(char ***strv, const char *suffix, const char **dirs) { goto finish; } qsort(files, hashmap_size(fh), sizeof(char *), base_cmp); + r = 0; finish: hashmap_free(fh);