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