#include "missing.h"
#include "log.h"
#include "strv.h"
+#include "path-util.h"
#include "hashmap.h"
#include "conf-files.h"
static int files_add(Hashmap *h, const char *path, const char *suffix) {
DIR *dir;
- struct dirent buffer, *de;
int r = 0;
dir = opendir(path);
}
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;
goto finish;
}
- if (hashmap_put(h, file_name_from_path(p), p) <= 0) {
+ if (hashmap_put(h, path_get_file_name(p), p) <= 0) {
log_debug("Skip overridden file: %s.", p);
free(p);
}
s1 = *(char * const *)a;
s2 = *(char * const *)b;
- return strcmp(file_name_from_path(s1), file_name_from_path(s2));
+ return strcmp(path_get_file_name(s1), path_get_file_name(s2));
}
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);
}
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);
goto finish;
}
qsort(files, hashmap_size(fh), sizeof(char *), base_cmp);
+ r = 0;
finish:
hashmap_free(fh);
goto finish;
}
- if (!strv_path_canonicalize(dirs)) {
+ if (!path_strv_canonicalize(dirs)) {
r = -ENOMEM;
goto finish;
}