|
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(
|