chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
util: merge change_attr_fd() and chattr_fd()
[elogind.git]
/
src
/
shared
/
conf-files.c
diff --git
a/src/shared/conf-files.c
b/src/shared/conf-files.c
index 52017821834f4663b540371e34561056e51af81d..9ab08355e35cff0819462d4b2494d995643ff5d5 100644
(file)
--- a/
src/shared/conf-files.c
+++ b/
src/shared/conf-files.c
@@
-19,13
+19,10
@@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-#include <assert.h>
#include <string.h>
#include <string.h>
-#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
-#include <sys/stat.h>
#include <dirent.h>
#include "macro.h"
#include <dirent.h>
#include "macro.h"
@@
-37,8
+34,14
@@
#include "hashmap.h"
#include "conf-files.h"
#include "hashmap.h"
#include "conf-files.h"
-static int files_add(Hashmap *h, const char *
dir
path, const char *suffix) {
+static int files_add(Hashmap *h, const char *
root, const char *
path, const char *suffix) {
_cleanup_closedir_ DIR *dir = NULL;
_cleanup_closedir_ DIR *dir = NULL;
+ char *dirpath;
+
+ assert(path);
+ assert(suffix);
+
+ dirpath = strjoina(root ? root : "", path);
dir = opendir(dirpath);
if (!dir) {
dir = opendir(dirpath);
if (!dir) {
@@
-92,7
+95,7
@@
static int base_cmp(const void *a, const void *b) {
}
static int conf_files_list_strv_internal(char ***strv, const char *suffix, const char *root, char **dirs) {
}
static int conf_files_list_strv_internal(char ***strv, const char *suffix, const char *root, char **dirs) {
-
Hashmap *fh
;
+
_cleanup_hashmap_free_ Hashmap *fh = NULL
;
char **files, **p;
int r;
char **files, **p;
int r;
@@
-100,33
+103,30
@@
static int conf_files_list_strv_internal(char ***strv, const char *suffix, const
assert(suffix);
/* This alters the dirs string array */
assert(suffix);
/* This alters the dirs string array */
- if (!path_strv_
canonicalize_absolut
e_uniq(dirs, root))
+ if (!path_strv_
resolv
e_uniq(dirs, root))
return -ENOMEM;
return -ENOMEM;
- fh = hashmap_new(
string_hash_func, string_compare_func
);
+ fh = hashmap_new(
&string_hash_ops
);
if (!fh)
return -ENOMEM;
STRV_FOREACH(p, dirs) {
if (!fh)
return -ENOMEM;
STRV_FOREACH(p, dirs) {
- r = files_add(fh, *p, suffix);
+ r = files_add(fh,
root,
*p, suffix);
if (r == -ENOMEM) {
if (r == -ENOMEM) {
- hashmap_free_free(fh);
return r;
} else if (r < 0)
return r;
} else if (r < 0)
- log_debug
("Failed to search for files in %s: %s
",
-
*p, strerror(-r)
);
+ log_debug
_errno(r, "Failed to search for files in %s: %m
",
+
*p
);
}
files = hashmap_get_strv(fh);
if (files == NULL) {
}
files = hashmap_get_strv(fh);
if (files == NULL) {
- hashmap_free_free(fh);
return -ENOMEM;
}
qsort_safe(files, hashmap_size(fh), sizeof(char *), base_cmp);
*strv = files;
return -ENOMEM;
}
qsort_safe(files, hashmap_size(fh), sizeof(char *), base_cmp);
*strv = files;
- hashmap_free(fh);
return 0;
}
return 0;
}