50 lines
1.7 KiB
Diff
50 lines
1.7 KiB
Diff
|
From 90df11b158e4026a73281c4df9b562a74f7045f1 Mon Sep 17 00:00:00 2001
|
||
|
From: Lennart Poettering <lennart@poettering.net>
|
||
|
Date: Tue, 17 Jun 2014 01:56:44 +0200
|
||
|
Subject: [PATCH] conf-files: fix when for --root= logic
|
||
|
|
||
|
This is based on parts of similar patches from Michael Marineau and
|
||
|
Lukas Nykrin, but simply uses strappenda3().
|
||
|
|
||
|
(cherry picked from commit cebed5005b5ede17fc52ab50c054fca73bc938b8)
|
||
|
---
|
||
|
src/shared/conf-files.c | 16 +++++++++++++---
|
||
|
1 file changed, 13 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/src/shared/conf-files.c b/src/shared/conf-files.c
|
||
|
index 52017821..59bc8cee 100644
|
||
|
--- a/src/shared/conf-files.c
|
||
|
+++ b/src/shared/conf-files.c
|
||
|
@@ -37,10 +37,20 @@
|
||
|
#include "hashmap.h"
|
||
|
#include "conf-files.h"
|
||
|
|
||
|
-static int files_add(Hashmap *h, const char *dirpath, const char *suffix) {
|
||
|
+static int files_add(Hashmap *h, const char *dirpath, const char *suffix, const char *root) {
|
||
|
_cleanup_closedir_ DIR *dir = NULL;
|
||
|
|
||
|
- dir = opendir(dirpath);
|
||
|
+ assert(dirpath);
|
||
|
+ assert(suffix);
|
||
|
+
|
||
|
+ if (isempty(root))
|
||
|
+ dir = opendir(dirpath);
|
||
|
+ else {
|
||
|
+ const char *p;
|
||
|
+
|
||
|
+ p = strappenda3(root, "/", dirpath);
|
||
|
+ dir = opendir(p);
|
||
|
+ }
|
||
|
if (!dir) {
|
||
|
if (errno == ENOENT)
|
||
|
return 0;
|
||
|
@@ -108,7 +118,7 @@ static int conf_files_list_strv_internal(char ***strv, const char *suffix, const
|
||
|
return -ENOMEM;
|
||
|
|
||
|
STRV_FOREACH(p, dirs) {
|
||
|
- r = files_add(fh, *p, suffix);
|
||
|
+ r = files_add(fh, *p, suffix, root);
|
||
|
if (r == -ENOMEM) {
|
||
|
hashmap_free_free(fh);
|
||
|
return r;
|