-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#include <dirent.h>
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
-#include <string.h>
#include "conf-files.h"
#include "def.h"
#include "hashmap.h"
#include "log.h"
#include "macro.h"
-#include "missing.h"
#include "path-util.h"
#include "set.h"
#include "sort-util.h"
_cleanup_closedir_ DIR *dir = NULL;
const char *dirpath;
- struct dirent *de;
int r;
assert(h);
/* Is this a masking entry? */
if ((flags & CONF_FILES_FILTER_MASKED))
if (null_or_empty(&st)) {
+ assert(masked);
+
/* Mark this one as masked */
- r = set_put_strdup(masked, de->d_name);
+ r = set_put_strdup(&masked, de->d_name);
if (r < 0)
return r;
if (flags & (CONF_FILES_REGULAR|CONF_FILES_DIRECTORY))
if (!((flags & CONF_FILES_DIRECTORY) && S_ISDIR(st.st_mode)) &&
!((flags & CONF_FILES_REGULAR) && S_ISREG(st.st_mode))) {
- log_debug("Ignoring '%s/%s', as it is not a of the right type.", dirpath, de->d_name);
+ log_debug("Ignoring '%s/%s', as it does not have the right type.", dirpath, de->d_name);
continue;
}
return strcmp(basename(*a), basename(*b));
}
-static int conf_files_list_strv_internal(char ***strv, const char *suffix, const char *root, unsigned flags, char **dirs) {
+static int conf_files_list_strv_internal(
+ char ***ret,
+ const char *suffix,
+ const char *root,
+ unsigned flags,
+ char **dirs) {
+
_cleanup_hashmap_free_ Hashmap *fh = NULL;
_cleanup_set_free_free_ Set *masked = NULL;
- char **files, **p;
+ char **files;
int r;
- assert(strv);
+ assert(ret);
/* This alters the dirs string array */
if (!path_strv_resolve_uniq(dirs, root))
return -ENOMEM;
typesafe_qsort(files, hashmap_size(fh), base_cmp);
- *strv = files;
+ *ret = files;
return 0;
}
int c;
c = base_cmp((char* const*) *strv + i, (char* const*) &path);
- if (c == 0) {
- char **dir;
-
+ if (c == 0)
/* Oh, there already is an entry with a matching name (the last component). */
-
STRV_FOREACH(dir, dirs) {
_cleanup_free_ char *rdir = NULL;
char *p1, *p2;
}
}
- } else if (c > 0)
+ else if (c > 0)
/* Following files have lower priority, let's go insert our
* new entry. */
break;
return r;
}
-int conf_files_list_strv(char ***strv, const char *suffix, const char *root, unsigned flags, const char* const* dirs) {
+int conf_files_list_strv(char ***ret, const char *suffix, const char *root, unsigned flags, const char* const* dirs) {
_cleanup_strv_free_ char **copy = NULL;
- assert(strv);
+ assert(ret);
copy = strv_copy((char**) dirs);
if (!copy)
return -ENOMEM;
- return conf_files_list_strv_internal(strv, suffix, root, flags, copy);
+ return conf_files_list_strv_internal(ret, suffix, root, flags, copy);
}
-int conf_files_list(char ***strv, const char *suffix, const char *root, unsigned flags, const char *dir) {
+int conf_files_list(char ***ret, const char *suffix, const char *root, unsigned flags, const char *dir) {
_cleanup_strv_free_ char **dirs = NULL;
- assert(strv);
+ assert(ret);
dirs = strv_new(dir);
if (!dirs)
return -ENOMEM;
- return conf_files_list_strv_internal(strv, suffix, root, flags, dirs);
+ return conf_files_list_strv_internal(ret, suffix, root, flags, dirs);
}
-int conf_files_list_nulstr(char ***strv, const char *suffix, const char *root, unsigned flags, const char *dirs) {
+int conf_files_list_nulstr(char ***ret, const char *suffix, const char *root, unsigned flags, const char *dirs) {
_cleanup_strv_free_ char **d = NULL;
- assert(strv);
+ assert(ret);
d = strv_split_nulstr(dirs);
if (!d)
return -ENOMEM;
- return conf_files_list_strv_internal(strv, suffix, root, flags, d);
+ return conf_files_list_strv_internal(ret, suffix, root, flags, d);
}
int conf_files_list_with_replacement(
const char *root,
char **config_dirs,
const char *replacement,
- char ***files,
- char **replace_file) {
+ char ***ret_files,
+ char **ret_replace_file) {
_cleanup_strv_free_ char **f = NULL;
_cleanup_free_ char *p = NULL;
int r;
assert(config_dirs);
- assert(files);
- assert(replace_file || !replacement);
+ assert(ret_files);
+ assert(ret_replace_file || !replacement);
r = conf_files_list_strv(&f, ".conf", root, 0, (const char* const*) config_dirs);
if (r < 0)
return log_oom();
}
- *files = TAKE_PTR(f);
- if (replace_file)
- *replace_file = TAKE_PTR(p);
+ *ret_files = TAKE_PTR(f);
+ if (ret_replace_file)
+ *ret_replace_file = TAKE_PTR(p);
+
return 0;
}