Zbigniew Jędrzejewski-Szmek 696e2f
From f0d72d47f05bbbb851d9ab64df877a3f0e769b4e Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 696e2f
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 696e2f
Date: Sat, 13 Aug 2016 01:21:57 -0400
Zbigniew Jędrzejewski-Szmek 696e2f
Subject: [PATCH] shared/install: move root skipping into create_symlink()
Zbigniew Jędrzejewski-Szmek 696e2f
Zbigniew Jędrzejewski-Szmek 696e2f
No functional change intended.
Zbigniew Jędrzejewski-Szmek 696e2f
Zbigniew Jędrzejewski-Szmek 696e2f
(cherry picked from commit 60bec8e4031367869520280350fa1523625d682b)
Zbigniew Jędrzejewski-Szmek 696e2f
---
Zbigniew Jędrzejewski-Szmek 696e2f
 src/shared/install.c | 33 +++++++++++++--------------------
Zbigniew Jędrzejewski-Szmek 696e2f
 1 file changed, 13 insertions(+), 20 deletions(-)
Zbigniew Jędrzejewski-Szmek 696e2f
Zbigniew Jędrzejewski-Szmek 696e2f
diff --git a/src/shared/install.c b/src/shared/install.c
Zbigniew Jędrzejewski-Szmek 696e2f
index ef5a56391c..8c45725f5a 100644
Zbigniew Jędrzejewski-Szmek 696e2f
--- a/src/shared/install.c
Zbigniew Jędrzejewski-Szmek 696e2f
+++ b/src/shared/install.c
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -394,6 +394,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
Zbigniew Jędrzejewski-Szmek 696e2f
 }
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
 static int create_symlink(
Zbigniew Jędrzejewski-Szmek 696e2f
+                const LookupPaths *paths,
Zbigniew Jędrzejewski-Szmek 696e2f
                 const char *old_path,
Zbigniew Jędrzejewski-Szmek 696e2f
                 const char *new_path,
Zbigniew Jędrzejewski-Szmek 696e2f
                 bool force,
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -401,11 +402,16 @@ static int create_symlink(
Zbigniew Jędrzejewski-Szmek 696e2f
                 unsigned *n_changes) {
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
         _cleanup_free_ char *dest = NULL;
Zbigniew Jędrzejewski-Szmek 696e2f
+        const char *rp;
Zbigniew Jędrzejewski-Szmek 696e2f
         int r;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
         assert(old_path);
Zbigniew Jędrzejewski-Szmek 696e2f
         assert(new_path);
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
+        rp = skip_root(paths, old_path);
Zbigniew Jędrzejewski-Szmek 696e2f
+        if (rp)
Zbigniew Jędrzejewski-Szmek 696e2f
+                old_path = rp;
Zbigniew Jędrzejewski-Szmek 696e2f
+
Zbigniew Jędrzejewski-Szmek 696e2f
         /* Actually create a symlink, and remember that we did. Is
Zbigniew Jędrzejewski-Szmek 696e2f
          * smart enough to check if there's already a valid symlink in
Zbigniew Jędrzejewski-Szmek 696e2f
          * place.
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1486,7 +1492,6 @@ static int install_info_symlink_alias(
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
         STRV_FOREACH(s, i->aliases) {
Zbigniew Jędrzejewski-Szmek 696e2f
                 _cleanup_free_ char *alias_path = NULL, *dst = NULL;
Zbigniew Jędrzejewski-Szmek 696e2f
-                const char *rp;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
                 q = install_full_printf(i, *s, &dst);
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (q < 0)
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1496,9 +1501,7 @@ static int install_info_symlink_alias(
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (!alias_path)
Zbigniew Jędrzejewski-Szmek 696e2f
                         return -ENOMEM;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
-                rp = skip_root(paths, i->path);
Zbigniew Jędrzejewski-Szmek 696e2f
-
Zbigniew Jędrzejewski-Szmek 696e2f
-                q = create_symlink(rp ?: i->path, alias_path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
+                q = create_symlink(paths, i->path, alias_path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (r == 0)
Zbigniew Jędrzejewski-Szmek 696e2f
                         r = q;
Zbigniew Jędrzejewski-Szmek 696e2f
         }
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1542,7 +1545,6 @@ static int install_info_symlink_wants(
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
         STRV_FOREACH(s, list) {
Zbigniew Jędrzejewski-Szmek 696e2f
                 _cleanup_free_ char *path = NULL, *dst = NULL;
Zbigniew Jędrzejewski-Szmek 696e2f
-                const char *rp;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
                 q = install_full_printf(i, *s, &dst);
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (q < 0)
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1557,9 +1559,7 @@ static int install_info_symlink_wants(
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (!path)
Zbigniew Jędrzejewski-Szmek 696e2f
                         return -ENOMEM;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
-                rp = skip_root(paths, i->path);
Zbigniew Jędrzejewski-Szmek 696e2f
-
Zbigniew Jędrzejewski-Szmek 696e2f
-                q = create_symlink(rp ?: i->path, path, true, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
+                q = create_symlink(paths, i->path, path, true, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (r == 0)
Zbigniew Jędrzejewski-Szmek 696e2f
                         r = q;
Zbigniew Jędrzejewski-Szmek 696e2f
         }
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1576,7 +1576,6 @@ static int install_info_symlink_link(
Zbigniew Jędrzejewski-Szmek 696e2f
                 unsigned *n_changes) {
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
         _cleanup_free_ char *path = NULL;
Zbigniew Jędrzejewski-Szmek 696e2f
-        const char *rp;
Zbigniew Jędrzejewski-Szmek 696e2f
         int r;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
         assert(i);
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1594,9 +1593,7 @@ static int install_info_symlink_link(
Zbigniew Jędrzejewski-Szmek 696e2f
         if (!path)
Zbigniew Jędrzejewski-Szmek 696e2f
                 return -ENOMEM;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
-        rp = skip_root(paths, i->path);
Zbigniew Jędrzejewski-Szmek 696e2f
-
Zbigniew Jędrzejewski-Szmek 696e2f
-        return create_symlink(rp ?: i->path, path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
+        return create_symlink(paths, i->path, path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
 }
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
 static int install_info_apply(
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1772,7 +1769,7 @@ int unit_file_mask(
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (!path)
Zbigniew Jędrzejewski-Szmek 696e2f
                         return -ENOMEM;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
-                q = create_symlink("/dev/null", path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
+                q = create_symlink(&paths, "/dev/null", path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (q < 0 && r >= 0)
Zbigniew Jędrzejewski-Szmek 696e2f
                         r = q;
Zbigniew Jędrzejewski-Szmek 696e2f
         }
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -1932,14 +1929,12 @@ int unit_file_link(
Zbigniew Jędrzejewski-Szmek 696e2f
         r = 0;
Zbigniew Jędrzejewski-Szmek 696e2f
         STRV_FOREACH(i, todo) {
Zbigniew Jędrzejewski-Szmek 696e2f
                 _cleanup_free_ char *new_path = NULL;
Zbigniew Jędrzejewski-Szmek 696e2f
-                const char *old_path;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
-                old_path = skip_root(&paths, *i);
Zbigniew Jędrzejewski-Szmek 696e2f
                 new_path = path_make_absolute(basename(*i), config_path);
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (!new_path)
Zbigniew Jędrzejewski-Szmek 696e2f
                         return -ENOMEM;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
-                q = create_symlink(old_path ?: *i, new_path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
+                q = create_symlink(&paths, *i, new_path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
                 if (q < 0 && r >= 0)
Zbigniew Jędrzejewski-Szmek 696e2f
                         r = q;
Zbigniew Jędrzejewski-Szmek 696e2f
         }
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -2318,7 +2313,7 @@ int unit_file_set_default(
Zbigniew Jędrzejewski-Szmek 696e2f
         _cleanup_lookup_paths_free_ LookupPaths paths = {};
Zbigniew Jędrzejewski-Szmek 696e2f
         _cleanup_(install_context_done) InstallContext c = {};
Zbigniew Jędrzejewski-Szmek 696e2f
         UnitFileInstallInfo *i;
Zbigniew Jędrzejewski-Szmek 696e2f
-        const char *new_path, *old_path;
Zbigniew Jędrzejewski-Szmek 696e2f
+        const char *new_path;
Zbigniew Jędrzejewski-Szmek 696e2f
         int r;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
         assert(scope >= 0);
Zbigniew Jędrzejewski-Szmek 696e2f
@@ -2341,10 +2336,8 @@ int unit_file_set_default(
Zbigniew Jędrzejewski-Szmek 696e2f
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 696e2f
                 return r;
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
-        old_path = skip_root(&paths, i->path);
Zbigniew Jędrzejewski-Szmek 696e2f
         new_path = strjoina(paths.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
Zbigniew Jędrzejewski-Szmek 696e2f
-
Zbigniew Jędrzejewski-Szmek 696e2f
-        return create_symlink(old_path ?: i->path, new_path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
+        return create_symlink(&paths, i->path, new_path, force, changes, n_changes);
Zbigniew Jędrzejewski-Szmek 696e2f
 }
Zbigniew Jędrzejewski-Szmek 696e2f
 
Zbigniew Jędrzejewski-Szmek 696e2f
 int unit_file_get_default(