|
|
594167 |
From a2632eca864670f7a88e1a81947a9e726282e531 Mon Sep 17 00:00:00 2001
|
|
|
594167 |
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
|
594167 |
Date: Wed, 2 Mar 2022 17:17:39 +0100
|
|
|
594167 |
Subject: [PATCH] shared/install: consistently use 'lp' as the name for the
|
|
|
594167 |
LookupPaths instance
|
|
|
594167 |
|
|
|
594167 |
Most of the codebase does this. Here we were using 'p' or 'paths'
|
|
|
594167 |
instead. Those names are very generic and not good for a "global-like"
|
|
|
594167 |
object like the LookupPaths instance. And we also have 'path' variable,
|
|
|
594167 |
and it's confusing to have 'path' and 'paths' in the same function that
|
|
|
594167 |
are unrelated.
|
|
|
594167 |
|
|
|
594167 |
Also pass down LookupPaths* lower in the call stack, in preparation for
|
|
|
594167 |
future changes.
|
|
|
594167 |
|
|
|
594167 |
(cherry picked from commit c3e7fba07c19f232f5945c07e7cc730986615adf)
|
|
|
594167 |
|
|
|
594167 |
Related: #2082131
|
|
|
594167 |
---
|
|
|
594167 |
src/shared/install.c | 427 +++++++++++++++++++++----------------------
|
|
|
594167 |
1 file changed, 212 insertions(+), 215 deletions(-)
|
|
|
594167 |
|
|
|
594167 |
diff --git a/src/shared/install.c b/src/shared/install.c
|
|
|
594167 |
index 8f1af755fa..c6cbe96fdb 100644
|
|
|
594167 |
--- a/src/shared/install.c
|
|
|
594167 |
+++ b/src/shared/install.c
|
|
|
594167 |
@@ -98,7 +98,7 @@ static const char *const unit_file_type_table[_UNIT_FILE_TYPE_MAX] = {
|
|
|
594167 |
|
|
|
594167 |
DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(unit_file_type, UnitFileType);
|
|
|
594167 |
|
|
|
594167 |
-static int in_search_path(const LookupPaths *p, const char *path) {
|
|
|
594167 |
+static int in_search_path(const LookupPaths *lp, const char *path) {
|
|
|
594167 |
_cleanup_free_ char *parent = NULL;
|
|
|
594167 |
|
|
|
594167 |
assert(path);
|
|
|
594167 |
@@ -107,19 +107,16 @@ static int in_search_path(const LookupPaths *p, const char *path) {
|
|
|
594167 |
if (!parent)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- return path_strv_contains(p->search_path, parent);
|
|
|
594167 |
+ return path_strv_contains(lp->search_path, parent);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
-static const char* skip_root(const LookupPaths *p, const char *path) {
|
|
|
594167 |
- char *e;
|
|
|
594167 |
-
|
|
|
594167 |
- assert(p);
|
|
|
594167 |
+static const char* skip_root(const char *root_dir, const char *path) {
|
|
|
594167 |
assert(path);
|
|
|
594167 |
|
|
|
594167 |
- if (!p->root_dir)
|
|
|
594167 |
+ if (!root_dir)
|
|
|
594167 |
return path;
|
|
|
594167 |
|
|
|
594167 |
- e = path_startswith(path, p->root_dir);
|
|
|
594167 |
+ const char *e = path_startswith(path, root_dir);
|
|
|
594167 |
if (!e)
|
|
|
594167 |
return NULL;
|
|
|
594167 |
|
|
|
594167 |
@@ -134,52 +131,52 @@ static const char* skip_root(const LookupPaths *p, const char *path) {
|
|
|
594167 |
return e;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
-static int path_is_generator(const LookupPaths *p, const char *path) {
|
|
|
594167 |
+static int path_is_generator(const LookupPaths *lp, const char *path) {
|
|
|
594167 |
_cleanup_free_ char *parent = NULL;
|
|
|
594167 |
|
|
|
594167 |
- assert(p);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(path);
|
|
|
594167 |
|
|
|
594167 |
parent = dirname_malloc(path);
|
|
|
594167 |
if (!parent)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- return path_equal_ptr(parent, p->generator) ||
|
|
|
594167 |
- path_equal_ptr(parent, p->generator_early) ||
|
|
|
594167 |
- path_equal_ptr(parent, p->generator_late);
|
|
|
594167 |
+ return path_equal_ptr(parent, lp->generator) ||
|
|
|
594167 |
+ path_equal_ptr(parent, lp->generator_early) ||
|
|
|
594167 |
+ path_equal_ptr(parent, lp->generator_late);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
-static int path_is_transient(const LookupPaths *p, const char *path) {
|
|
|
594167 |
+static int path_is_transient(const LookupPaths *lp, const char *path) {
|
|
|
594167 |
_cleanup_free_ char *parent = NULL;
|
|
|
594167 |
|
|
|
594167 |
- assert(p);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(path);
|
|
|
594167 |
|
|
|
594167 |
parent = dirname_malloc(path);
|
|
|
594167 |
if (!parent)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- return path_equal_ptr(parent, p->transient);
|
|
|
594167 |
+ return path_equal_ptr(parent, lp->transient);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
-static int path_is_control(const LookupPaths *p, const char *path) {
|
|
|
594167 |
+static int path_is_control(const LookupPaths *lp, const char *path) {
|
|
|
594167 |
_cleanup_free_ char *parent = NULL;
|
|
|
594167 |
|
|
|
594167 |
- assert(p);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(path);
|
|
|
594167 |
|
|
|
594167 |
parent = dirname_malloc(path);
|
|
|
594167 |
if (!parent)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- return path_equal_ptr(parent, p->persistent_control) ||
|
|
|
594167 |
- path_equal_ptr(parent, p->runtime_control);
|
|
|
594167 |
+ return path_equal_ptr(parent, lp->persistent_control) ||
|
|
|
594167 |
+ path_equal_ptr(parent, lp->runtime_control);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
-static int path_is_config(const LookupPaths *p, const char *path, bool check_parent) {
|
|
|
594167 |
+static int path_is_config(const LookupPaths *lp, const char *path, bool check_parent) {
|
|
|
594167 |
_cleanup_free_ char *parent = NULL;
|
|
|
594167 |
|
|
|
594167 |
- assert(p);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(path);
|
|
|
594167 |
|
|
|
594167 |
/* Note that we do *not* have generic checks for /etc or /run in place, since with
|
|
|
594167 |
@@ -193,21 +190,21 @@ static int path_is_config(const LookupPaths *p, const char *path, bool check_par
|
|
|
594167 |
path = parent;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- return path_equal_ptr(path, p->persistent_config) ||
|
|
|
594167 |
- path_equal_ptr(path, p->runtime_config);
|
|
|
594167 |
+ return path_equal_ptr(path, lp->persistent_config) ||
|
|
|
594167 |
+ path_equal_ptr(path, lp->runtime_config);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
-static int path_is_runtime(const LookupPaths *p, const char *path, bool check_parent) {
|
|
|
594167 |
+static int path_is_runtime(const LookupPaths *lp, const char *path, bool check_parent) {
|
|
|
594167 |
_cleanup_free_ char *parent = NULL;
|
|
|
594167 |
const char *rpath;
|
|
|
594167 |
|
|
|
594167 |
- assert(p);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(path);
|
|
|
594167 |
|
|
|
594167 |
/* Everything in /run is considered runtime. On top of that we also add
|
|
|
594167 |
* explicit checks for the various runtime directories, as safety net. */
|
|
|
594167 |
|
|
|
594167 |
- rpath = skip_root(p, path);
|
|
|
594167 |
+ rpath = skip_root(lp->root_dir, path);
|
|
|
594167 |
if (rpath && path_startswith(rpath, "/run"))
|
|
|
594167 |
return true;
|
|
|
594167 |
|
|
|
594167 |
@@ -219,21 +216,21 @@ static int path_is_runtime(const LookupPaths *p, const char *path, bool check_pa
|
|
|
594167 |
path = parent;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- return path_equal_ptr(path, p->runtime_config) ||
|
|
|
594167 |
- path_equal_ptr(path, p->generator) ||
|
|
|
594167 |
- path_equal_ptr(path, p->generator_early) ||
|
|
|
594167 |
- path_equal_ptr(path, p->generator_late) ||
|
|
|
594167 |
- path_equal_ptr(path, p->transient) ||
|
|
|
594167 |
- path_equal_ptr(path, p->runtime_control);
|
|
|
594167 |
+ return path_equal_ptr(path, lp->runtime_config) ||
|
|
|
594167 |
+ path_equal_ptr(path, lp->generator) ||
|
|
|
594167 |
+ path_equal_ptr(path, lp->generator_early) ||
|
|
|
594167 |
+ path_equal_ptr(path, lp->generator_late) ||
|
|
|
594167 |
+ path_equal_ptr(path, lp->transient) ||
|
|
|
594167 |
+ path_equal_ptr(path, lp->runtime_control);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
-static int path_is_vendor_or_generator(const LookupPaths *p, const char *path) {
|
|
|
594167 |
+static int path_is_vendor_or_generator(const LookupPaths *lp, const char *path) {
|
|
|
594167 |
const char *rpath;
|
|
|
594167 |
|
|
|
594167 |
- assert(p);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(path);
|
|
|
594167 |
|
|
|
594167 |
- rpath = skip_root(p, path);
|
|
|
594167 |
+ rpath = skip_root(lp->root_dir, path);
|
|
|
594167 |
if (!rpath)
|
|
|
594167 |
return 0;
|
|
|
594167 |
|
|
|
594167 |
@@ -245,19 +242,19 @@ static int path_is_vendor_or_generator(const LookupPaths *p, const char *path) {
|
|
|
594167 |
return true;
|
|
|
594167 |
#endif
|
|
|
594167 |
|
|
|
594167 |
- if (path_is_generator(p, rpath))
|
|
|
594167 |
+ if (path_is_generator(lp, rpath))
|
|
|
594167 |
return true;
|
|
|
594167 |
|
|
|
594167 |
return path_equal(rpath, SYSTEM_DATA_UNIT_DIR);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
-static const char* config_path_from_flags(const LookupPaths *paths, UnitFileFlags flags) {
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+static const char* config_path_from_flags(const LookupPaths *lp, UnitFileFlags flags) {
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
|
|
|
594167 |
if (FLAGS_SET(flags, UNIT_FILE_PORTABLE))
|
|
|
594167 |
- return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? paths->runtime_attached : paths->persistent_attached;
|
|
|
594167 |
+ return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? lp->runtime_attached : lp->persistent_attached;
|
|
|
594167 |
else
|
|
|
594167 |
- return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? paths->runtime_config : paths->persistent_config;
|
|
|
594167 |
+ return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? lp->runtime_config : lp->persistent_config;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
int unit_file_changes_add(
|
|
|
594167 |
@@ -435,7 +432,7 @@ static bool chroot_symlinks_same(const char *root, const char *wd, const char *a
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
static int create_symlink(
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *old_path,
|
|
|
594167 |
const char *new_path,
|
|
|
594167 |
bool force,
|
|
|
594167 |
@@ -449,7 +446,7 @@ static int create_symlink(
|
|
|
594167 |
assert(old_path);
|
|
|
594167 |
assert(new_path);
|
|
|
594167 |
|
|
|
594167 |
- rp = skip_root(paths, old_path);
|
|
|
594167 |
+ rp = skip_root(lp->root_dir, old_path);
|
|
|
594167 |
if (rp)
|
|
|
594167 |
old_path = rp;
|
|
|
594167 |
|
|
|
594167 |
@@ -487,7 +484,7 @@ static int create_symlink(
|
|
|
594167 |
if (!dirname)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- if (chroot_symlinks_same(paths->root_dir, dirname, dest, old_path)) {
|
|
|
594167 |
+ if (chroot_symlinks_same(lp->root_dir, dirname, dest, old_path)) {
|
|
|
594167 |
log_debug("Symlink %s → %s already exists", new_path, dest);
|
|
|
594167 |
return 1;
|
|
|
594167 |
}
|
|
|
594167 |
@@ -642,7 +639,7 @@ static int remove_marked_symlinks_fd(
|
|
|
594167 |
/* Now, remember the full path (but with the root prefix removed) of
|
|
|
594167 |
* the symlink we just removed, and remove any symlinks to it, too. */
|
|
|
594167 |
|
|
|
594167 |
- rp = skip_root(lp, p);
|
|
|
594167 |
+ rp = skip_root(lp->root_dir, p);
|
|
|
594167 |
q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: p);
|
|
|
594167 |
if (q < 0)
|
|
|
594167 |
return q;
|
|
|
594167 |
@@ -861,7 +858,7 @@ static int find_symlinks(
|
|
|
594167 |
|
|
|
594167 |
static int find_symlinks_in_scope(
|
|
|
594167 |
UnitFileScope scope,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const UnitFileInstallInfo *i,
|
|
|
594167 |
bool match_name,
|
|
|
594167 |
UnitFileState *state) {
|
|
|
594167 |
@@ -872,23 +869,23 @@ static int find_symlinks_in_scope(
|
|
|
594167 |
char **p;
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(i);
|
|
|
594167 |
|
|
|
594167 |
- /* As we iterate over the list of search paths in paths->search_path, we may encounter "same name"
|
|
|
594167 |
+ /* As we iterate over the list of search paths in lp->search_path, we may encounter "same name"
|
|
|
594167 |
* symlinks. The ones which are "below" (i.e. have lower priority) than the unit file itself are
|
|
|
594167 |
* effectively masked, so we should ignore them. */
|
|
|
594167 |
|
|
|
594167 |
- STRV_FOREACH(p, paths->search_path) {
|
|
|
594167 |
+ STRV_FOREACH(p, lp->search_path) {
|
|
|
594167 |
bool same_name_link = false;
|
|
|
594167 |
|
|
|
594167 |
- r = find_symlinks(paths->root_dir, i, match_name, ignore_same_name, *p, &same_name_link);
|
|
|
594167 |
+ r = find_symlinks(lp->root_dir, i, match_name, ignore_same_name, *p, &same_name_link);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0) {
|
|
|
594167 |
/* We found symlinks in this dir? Yay! Let's see where precisely it is enabled. */
|
|
|
594167 |
|
|
|
594167 |
- if (path_equal_ptr(*p, paths->persistent_config)) {
|
|
|
594167 |
+ if (path_equal_ptr(*p, lp->persistent_config)) {
|
|
|
594167 |
/* This is the best outcome, let's return it immediately. */
|
|
|
594167 |
*state = UNIT_FILE_ENABLED;
|
|
|
594167 |
return 1;
|
|
|
594167 |
@@ -900,7 +897,7 @@ static int find_symlinks_in_scope(
|
|
|
594167 |
return 1;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- r = path_is_runtime(paths, *p, false);
|
|
|
594167 |
+ r = path_is_runtime(lp, *p, false);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0)
|
|
|
594167 |
@@ -909,10 +906,10 @@ static int find_symlinks_in_scope(
|
|
|
594167 |
enabled_at_all = true;
|
|
|
594167 |
|
|
|
594167 |
} else if (same_name_link) {
|
|
|
594167 |
- if (path_equal_ptr(*p, paths->persistent_config))
|
|
|
594167 |
+ if (path_equal_ptr(*p, lp->persistent_config))
|
|
|
594167 |
same_name_link_config = true;
|
|
|
594167 |
else {
|
|
|
594167 |
- r = path_is_runtime(paths, *p, false);
|
|
|
594167 |
+ r = path_is_runtime(lp, *p, false);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0)
|
|
|
594167 |
@@ -990,11 +987,11 @@ static UnitFileInstallInfo *install_info_find(InstallContext *c, const char *nam
|
|
|
594167 |
|
|
|
594167 |
static int install_info_may_process(
|
|
|
594167 |
const UnitFileInstallInfo *i,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
assert(i);
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
|
|
|
594167 |
/* Checks whether the loaded unit file is one we should process, or is masked,
|
|
|
594167 |
* transient or generated and thus not subject to enable/disable operations. */
|
|
|
594167 |
@@ -1003,8 +1000,8 @@ static int install_info_may_process(
|
|
|
594167 |
unit_file_changes_add(changes, n_changes, -ERFKILL, i->path, NULL);
|
|
|
594167 |
return -ERFKILL;
|
|
|
594167 |
}
|
|
|
594167 |
- if (path_is_generator(paths, i->path) ||
|
|
|
594167 |
- path_is_transient(paths, i->path)) {
|
|
|
594167 |
+ if (path_is_generator(lp, i->path) ||
|
|
|
594167 |
+ path_is_transient(lp, i->path)) {
|
|
|
594167 |
unit_file_changes_add(changes, n_changes, -EADDRNOTAVAIL, i->path, NULL);
|
|
|
594167 |
return -EADDRNOTAVAIL;
|
|
|
594167 |
}
|
|
|
594167 |
@@ -1339,20 +1336,20 @@ static int unit_file_load_or_readlink(
|
|
|
594167 |
InstallContext *c,
|
|
|
594167 |
UnitFileInstallInfo *info,
|
|
|
594167 |
const char *path,
|
|
|
594167 |
- const char *root_dir,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
SearchFlags flags) {
|
|
|
594167 |
|
|
|
594167 |
_cleanup_free_ char *resolved = NULL;
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
- r = unit_file_load(c, info, path, root_dir, flags);
|
|
|
594167 |
+ r = unit_file_load(c, info, path, lp->root_dir, flags);
|
|
|
594167 |
if (r != -ELOOP || (flags & SEARCH_DROPIN))
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- r = chase_symlinks(path, root_dir, CHASE_WARN | CHASE_NONEXISTENT, &resolved, NULL);
|
|
|
594167 |
+ r = chase_symlinks(path, lp->root_dir, CHASE_WARN | CHASE_NONEXISTENT, &resolved, NULL);
|
|
|
594167 |
if (r >= 0 &&
|
|
|
594167 |
- root_dir &&
|
|
|
594167 |
- path_equal_ptr(path_startswith(resolved, root_dir), "dev/null"))
|
|
|
594167 |
+ lp->root_dir &&
|
|
|
594167 |
+ path_equal_ptr(path_startswith(resolved, lp->root_dir), "dev/null"))
|
|
|
594167 |
/* When looking under root_dir, we can't expect /dev/ to be mounted,
|
|
|
594167 |
* so let's see if the path is a (possibly dangling) symlink to /dev/null. */
|
|
|
594167 |
info->type = UNIT_FILE_TYPE_MASKED;
|
|
|
594167 |
@@ -1402,7 +1399,7 @@ static int unit_file_load_or_readlink(
|
|
|
594167 |
|
|
|
594167 |
if (path_is_absolute(target))
|
|
|
594167 |
/* This is an absolute path, prefix the root so that we always deal with fully qualified paths */
|
|
|
594167 |
- info->symlink_target = path_join(root_dir, target);
|
|
|
594167 |
+ info->symlink_target = path_join(lp->root_dir, target);
|
|
|
594167 |
else
|
|
|
594167 |
/* This is a relative path, take it relative to the dir the symlink is located in. */
|
|
|
594167 |
info->symlink_target = file_in_same_dir(path, target);
|
|
|
594167 |
@@ -1418,7 +1415,7 @@ static int unit_file_load_or_readlink(
|
|
|
594167 |
static int unit_file_search(
|
|
|
594167 |
InstallContext *c,
|
|
|
594167 |
UnitFileInstallInfo *info,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
SearchFlags flags) {
|
|
|
594167 |
|
|
|
594167 |
const char *dropin_dir_name = NULL, *dropin_template_dir_name = NULL;
|
|
|
594167 |
@@ -1429,14 +1426,14 @@ static int unit_file_search(
|
|
|
594167 |
char **p;
|
|
|
594167 |
|
|
|
594167 |
assert(info);
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
|
|
|
594167 |
/* Was this unit already loaded? */
|
|
|
594167 |
if (info->type != _UNIT_FILE_TYPE_INVALID)
|
|
|
594167 |
return 0;
|
|
|
594167 |
|
|
|
594167 |
if (info->path)
|
|
|
594167 |
- return unit_file_load_or_readlink(c, info, info->path, paths->root_dir, flags);
|
|
|
594167 |
+ return unit_file_load_or_readlink(c, info, info->path, lp, flags);
|
|
|
594167 |
|
|
|
594167 |
assert(info->name);
|
|
|
594167 |
|
|
|
594167 |
@@ -1446,14 +1443,14 @@ static int unit_file_search(
|
|
|
594167 |
return r;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- STRV_FOREACH(p, paths->search_path) {
|
|
|
594167 |
+ STRV_FOREACH(p, lp->search_path) {
|
|
|
594167 |
_cleanup_free_ char *path = NULL;
|
|
|
594167 |
|
|
|
594167 |
path = path_join(*p, info->name);
|
|
|
594167 |
if (!path)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- r = unit_file_load_or_readlink(c, info, path, paths->root_dir, flags);
|
|
|
594167 |
+ r = unit_file_load_or_readlink(c, info, path, lp, flags);
|
|
|
594167 |
if (r >= 0) {
|
|
|
594167 |
info->path = TAKE_PTR(path);
|
|
|
594167 |
result = r;
|
|
|
594167 |
@@ -1469,14 +1466,14 @@ static int unit_file_search(
|
|
|
594167 |
* enablement was requested. We will check if it is
|
|
|
594167 |
* possible to load template unit file. */
|
|
|
594167 |
|
|
|
594167 |
- STRV_FOREACH(p, paths->search_path) {
|
|
|
594167 |
+ STRV_FOREACH(p, lp->search_path) {
|
|
|
594167 |
_cleanup_free_ char *path = NULL;
|
|
|
594167 |
|
|
|
594167 |
path = path_join(*p, template);
|
|
|
594167 |
if (!path)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- r = unit_file_load_or_readlink(c, info, path, paths->root_dir, flags);
|
|
|
594167 |
+ r = unit_file_load_or_readlink(c, info, path, lp, flags);
|
|
|
594167 |
if (r >= 0) {
|
|
|
594167 |
info->path = TAKE_PTR(path);
|
|
|
594167 |
result = r;
|
|
|
594167 |
@@ -1498,7 +1495,7 @@ static int unit_file_search(
|
|
|
594167 |
/* Search for drop-in directories */
|
|
|
594167 |
|
|
|
594167 |
dropin_dir_name = strjoina(info->name, ".d");
|
|
|
594167 |
- STRV_FOREACH(p, paths->search_path) {
|
|
|
594167 |
+ STRV_FOREACH(p, lp->search_path) {
|
|
|
594167 |
char *path;
|
|
|
594167 |
|
|
|
594167 |
path = path_join(*p, dropin_dir_name);
|
|
|
594167 |
@@ -1512,7 +1509,7 @@ static int unit_file_search(
|
|
|
594167 |
|
|
|
594167 |
if (template) {
|
|
|
594167 |
dropin_template_dir_name = strjoina(template, ".d");
|
|
|
594167 |
- STRV_FOREACH(p, paths->search_path) {
|
|
|
594167 |
+ STRV_FOREACH(p, lp->search_path) {
|
|
|
594167 |
char *path;
|
|
|
594167 |
|
|
|
594167 |
path = path_join(*p, dropin_template_dir_name);
|
|
|
594167 |
@@ -1532,7 +1529,7 @@ static int unit_file_search(
|
|
|
594167 |
return log_debug_errno(r, "Failed to get list of conf files: %m");
|
|
|
594167 |
|
|
|
594167 |
STRV_FOREACH(p, files) {
|
|
|
594167 |
- r = unit_file_load_or_readlink(c, info, *p, paths->root_dir, flags | SEARCH_DROPIN);
|
|
|
594167 |
+ r = unit_file_load_or_readlink(c, info, *p, lp, flags | SEARCH_DROPIN);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return log_debug_errno(r, "Failed to load conf file %s: %m", *p);
|
|
|
594167 |
}
|
|
|
594167 |
@@ -1543,7 +1540,7 @@ static int unit_file_search(
|
|
|
594167 |
static int install_info_follow(
|
|
|
594167 |
InstallContext *c,
|
|
|
594167 |
UnitFileInstallInfo *i,
|
|
|
594167 |
- const char *root_dir,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
SearchFlags flags,
|
|
|
594167 |
bool ignore_different_name) {
|
|
|
594167 |
|
|
|
594167 |
@@ -1564,7 +1561,7 @@ static int install_info_follow(
|
|
|
594167 |
free_and_replace(i->path, i->symlink_target);
|
|
|
594167 |
i->type = _UNIT_FILE_TYPE_INVALID;
|
|
|
594167 |
|
|
|
594167 |
- return unit_file_load_or_readlink(c, i, i->path, root_dir, flags);
|
|
|
594167 |
+ return unit_file_load_or_readlink(c, i, i->path, lp, flags);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
/**
|
|
|
594167 |
@@ -1574,7 +1571,7 @@ static int install_info_follow(
|
|
|
594167 |
static int install_info_traverse(
|
|
|
594167 |
UnitFileScope scope,
|
|
|
594167 |
InstallContext *c,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
UnitFileInstallInfo *start,
|
|
|
594167 |
SearchFlags flags,
|
|
|
594167 |
UnitFileInstallInfo **ret) {
|
|
|
594167 |
@@ -1583,11 +1580,11 @@ static int install_info_traverse(
|
|
|
594167 |
unsigned k = 0;
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(start);
|
|
|
594167 |
assert(c);
|
|
|
594167 |
|
|
|
594167 |
- r = unit_file_search(c, start, paths, flags);
|
|
|
594167 |
+ r = unit_file_search(c, start, lp, flags);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
@@ -1599,14 +1596,14 @@ static int install_info_traverse(
|
|
|
594167 |
return -ELOOP;
|
|
|
594167 |
|
|
|
594167 |
if (!(flags & SEARCH_FOLLOW_CONFIG_SYMLINKS)) {
|
|
|
594167 |
- r = path_is_config(paths, i->path, true);
|
|
|
594167 |
+ r = path_is_config(lp, i->path, true);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0)
|
|
|
594167 |
return -ELOOP;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_follow(c, i, paths->root_dir, flags, false);
|
|
|
594167 |
+ r = install_info_follow(c, i, lp, flags, false);
|
|
|
594167 |
if (r == -EXDEV) {
|
|
|
594167 |
_cleanup_free_ char *buffer = NULL;
|
|
|
594167 |
const char *bn;
|
|
|
594167 |
@@ -1635,7 +1632,7 @@ static int install_info_traverse(
|
|
|
594167 |
/* We filled in the instance, and the target stayed the same? If so, then let's
|
|
|
594167 |
* honour the link as it is. */
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_follow(c, i, paths->root_dir, flags, true);
|
|
|
594167 |
+ r = install_info_follow(c, i, lp, flags, true);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
@@ -1645,12 +1642,12 @@ static int install_info_traverse(
|
|
|
594167 |
bn = buffer;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_add(c, bn, NULL, paths->root_dir, /* auxiliary= */ false, &i);
|
|
|
594167 |
+ r = install_info_add(c, bn, NULL, lp->root_dir, /* auxiliary= */ false, &i);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
/* Try again, with the new target we found. */
|
|
|
594167 |
- r = unit_file_search(c, i, paths, flags);
|
|
|
594167 |
+ r = unit_file_search(c, i, lp, flags);
|
|
|
594167 |
if (r == -ENOENT)
|
|
|
594167 |
/* Translate error code to highlight this specific case */
|
|
|
594167 |
return -ENOLINK;
|
|
|
594167 |
@@ -1672,7 +1669,7 @@ static int install_info_traverse(
|
|
|
594167 |
*/
|
|
|
594167 |
static int install_info_add_auto(
|
|
|
594167 |
InstallContext *c,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *name_or_path,
|
|
|
594167 |
UnitFileInstallInfo **ret) {
|
|
|
594167 |
|
|
|
594167 |
@@ -1682,17 +1679,17 @@ static int install_info_add_auto(
|
|
|
594167 |
if (path_is_absolute(name_or_path)) {
|
|
|
594167 |
const char *pp;
|
|
|
594167 |
|
|
|
594167 |
- pp = prefix_roota(paths->root_dir, name_or_path);
|
|
|
594167 |
+ pp = prefix_roota(lp->root_dir, name_or_path);
|
|
|
594167 |
|
|
|
594167 |
- return install_info_add(c, NULL, pp, paths->root_dir, /* auxiliary= */ false, ret);
|
|
|
594167 |
+ return install_info_add(c, NULL, pp, lp->root_dir, /* auxiliary= */ false, ret);
|
|
|
594167 |
} else
|
|
|
594167 |
- return install_info_add(c, name_or_path, NULL, paths->root_dir, /* auxiliary= */ false, ret);
|
|
|
594167 |
+ return install_info_add(c, name_or_path, NULL, lp->root_dir, /* auxiliary= */ false, ret);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
static int install_info_discover(
|
|
|
594167 |
UnitFileScope scope,
|
|
|
594167 |
InstallContext *c,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *name,
|
|
|
594167 |
SearchFlags flags,
|
|
|
594167 |
UnitFileInstallInfo **ret,
|
|
|
594167 |
@@ -1703,12 +1700,12 @@ static int install_info_discover(
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
assert(c);
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(name);
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_add_auto(c, paths, name, &i);
|
|
|
594167 |
+ r = install_info_add_auto(c, lp, name, &i);
|
|
|
594167 |
if (r >= 0)
|
|
|
594167 |
- r = install_info_traverse(scope, c, paths, i, flags, ret);
|
|
|
594167 |
+ r = install_info_traverse(scope, c, lp, i, flags, ret);
|
|
|
594167 |
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
unit_file_changes_add(changes, n_changes, r, name, NULL);
|
|
|
594167 |
@@ -1718,7 +1715,7 @@ static int install_info_discover(
|
|
|
594167 |
static int install_info_discover_and_check(
|
|
|
594167 |
UnitFileScope scope,
|
|
|
594167 |
InstallContext *c,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *name,
|
|
|
594167 |
SearchFlags flags,
|
|
|
594167 |
UnitFileInstallInfo **ret,
|
|
|
594167 |
@@ -1727,11 +1724,11 @@ static int install_info_discover_and_check(
|
|
|
594167 |
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_discover(scope, c, paths, name, flags, ret, changes, n_changes);
|
|
|
594167 |
+ r = install_info_discover(scope, c, lp, name, flags, ret, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- return install_info_may_process(ret ? *ret : NULL, paths, changes, n_changes);
|
|
|
594167 |
+ return install_info_may_process(ret ? *ret : NULL, lp, changes, n_changes);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char **ret_dst) {
|
|
|
594167 |
@@ -1812,7 +1809,7 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char *
|
|
|
594167 |
|
|
|
594167 |
static int install_info_symlink_alias(
|
|
|
594167 |
UnitFileInstallInfo *i,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *config_path,
|
|
|
594167 |
bool force,
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
@@ -1822,7 +1819,7 @@ static int install_info_symlink_alias(
|
|
|
594167 |
int r = 0, q;
|
|
|
594167 |
|
|
|
594167 |
assert(i);
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(config_path);
|
|
|
594167 |
|
|
|
594167 |
STRV_FOREACH(s, i->aliases) {
|
|
|
594167 |
@@ -1840,7 +1837,7 @@ static int install_info_symlink_alias(
|
|
|
594167 |
if (!alias_path)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- q = create_symlink(paths, i->path, alias_path, force, changes, n_changes);
|
|
|
594167 |
+ q = create_symlink(lp, i->path, alias_path, force, changes, n_changes);
|
|
|
594167 |
if (r == 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
}
|
|
|
594167 |
@@ -1852,7 +1849,7 @@ static int install_info_symlink_wants(
|
|
|
594167 |
UnitFileScope scope,
|
|
|
594167 |
UnitFileFlags file_flags,
|
|
|
594167 |
UnitFileInstallInfo *i,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *config_path,
|
|
|
594167 |
char **list,
|
|
|
594167 |
const char *suffix,
|
|
|
594167 |
@@ -1866,7 +1863,7 @@ static int install_info_symlink_wants(
|
|
|
594167 |
int r = 0, q;
|
|
|
594167 |
|
|
|
594167 |
assert(i);
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(config_path);
|
|
|
594167 |
|
|
|
594167 |
if (strv_isempty(list))
|
|
|
594167 |
@@ -1889,7 +1886,7 @@ static int install_info_symlink_wants(
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
instance.name = buf;
|
|
|
594167 |
- r = unit_file_search(NULL, &instance, paths, SEARCH_FOLLOW_CONFIG_SYMLINKS);
|
|
|
594167 |
+ r = unit_file_search(NULL, &instance, lp, SEARCH_FOLLOW_CONFIG_SYMLINKS);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
@@ -1943,11 +1940,11 @@ static int install_info_symlink_wants(
|
|
|
594167 |
if (!path)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- q = create_symlink(paths, i->path, path, true, changes, n_changes);
|
|
|
594167 |
+ q = create_symlink(lp, i->path, path, true, changes, n_changes);
|
|
|
594167 |
if (r == 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
|
|
|
594167 |
- if (unit_file_exists(scope, paths, dst) == 0)
|
|
|
594167 |
+ if (unit_file_exists(scope, lp, dst) == 0)
|
|
|
594167 |
unit_file_changes_add(changes, n_changes, UNIT_FILE_DESTINATION_NOT_PRESENT, dst, i->path);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
@@ -1956,7 +1953,7 @@ static int install_info_symlink_wants(
|
|
|
594167 |
|
|
|
594167 |
static int install_info_symlink_link(
|
|
|
594167 |
UnitFileInstallInfo *i,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *config_path,
|
|
|
594167 |
bool force,
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
@@ -1966,11 +1963,11 @@ static int install_info_symlink_link(
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
assert(i);
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(config_path);
|
|
|
594167 |
assert(i->path);
|
|
|
594167 |
|
|
|
594167 |
- r = in_search_path(paths, i->path);
|
|
|
594167 |
+ r = in_search_path(lp, i->path);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0)
|
|
|
594167 |
@@ -1980,14 +1977,14 @@ static int install_info_symlink_link(
|
|
|
594167 |
if (!path)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- return create_symlink(paths, i->path, path, force, changes, n_changes);
|
|
|
594167 |
+ return create_symlink(lp, i->path, path, force, changes, n_changes);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
static int install_info_apply(
|
|
|
594167 |
UnitFileScope scope,
|
|
|
594167 |
UnitFileFlags file_flags,
|
|
|
594167 |
UnitFileInstallInfo *i,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *config_path,
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
@@ -1995,7 +1992,7 @@ static int install_info_apply(
|
|
|
594167 |
int r, q;
|
|
|
594167 |
|
|
|
594167 |
assert(i);
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(config_path);
|
|
|
594167 |
|
|
|
594167 |
if (i->type != UNIT_FILE_TYPE_REGULAR)
|
|
|
594167 |
@@ -2003,17 +2000,17 @@ static int install_info_apply(
|
|
|
594167 |
|
|
|
594167 |
bool force = file_flags & UNIT_FILE_FORCE;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_symlink_alias(i, paths, config_path, force, changes, n_changes);
|
|
|
594167 |
+ r = install_info_symlink_alias(i, lp, config_path, force, changes, n_changes);
|
|
|
594167 |
|
|
|
594167 |
- q = install_info_symlink_wants(scope, file_flags, i, paths, config_path, i->wanted_by, ".wants/", changes, n_changes);
|
|
|
594167 |
+ q = install_info_symlink_wants(scope, file_flags, i, lp, config_path, i->wanted_by, ".wants/", changes, n_changes);
|
|
|
594167 |
if (r == 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
|
|
|
594167 |
- q = install_info_symlink_wants(scope, file_flags, i, paths, config_path, i->required_by, ".requires/", changes, n_changes);
|
|
|
594167 |
+ q = install_info_symlink_wants(scope, file_flags, i, lp, config_path, i->required_by, ".requires/", changes, n_changes);
|
|
|
594167 |
if (r == 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
|
|
|
594167 |
- q = install_info_symlink_link(i, paths, config_path, force, changes, n_changes);
|
|
|
594167 |
+ q = install_info_symlink_link(i, lp, config_path, force, changes, n_changes);
|
|
|
594167 |
/* Do not count links to the unit file towards the "carries_install_info" count */
|
|
|
594167 |
if (r == 0 && q < 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
@@ -2025,7 +2022,7 @@ static int install_context_apply(
|
|
|
594167 |
UnitFileScope scope,
|
|
|
594167 |
UnitFileFlags file_flags,
|
|
|
594167 |
InstallContext *c,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *config_path,
|
|
|
594167 |
SearchFlags flags,
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
@@ -2035,7 +2032,7 @@ static int install_context_apply(
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
assert(c);
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(config_path);
|
|
|
594167 |
|
|
|
594167 |
if (ordered_hashmap_isempty(c->will_process))
|
|
|
594167 |
@@ -2053,7 +2050,7 @@ static int install_context_apply(
|
|
|
594167 |
if (q < 0)
|
|
|
594167 |
return q;
|
|
|
594167 |
|
|
|
594167 |
- q = install_info_traverse(scope, c, paths, i, flags, NULL);
|
|
|
594167 |
+ q = install_info_traverse(scope, c, lp, i, flags, NULL);
|
|
|
594167 |
if (q < 0) {
|
|
|
594167 |
if (i->auxiliary) {
|
|
|
594167 |
q = unit_file_changes_add(changes, n_changes, UNIT_FILE_AUXILIARY_FAILED, NULL, i->name);
|
|
|
594167 |
@@ -2080,7 +2077,7 @@ static int install_context_apply(
|
|
|
594167 |
if (i->type != UNIT_FILE_TYPE_REGULAR)
|
|
|
594167 |
continue;
|
|
|
594167 |
|
|
|
594167 |
- q = install_info_apply(scope, file_flags, i, paths, config_path, changes, n_changes);
|
|
|
594167 |
+ q = install_info_apply(scope, file_flags, i, lp, config_path, changes, n_changes);
|
|
|
594167 |
if (r >= 0) {
|
|
|
594167 |
if (q < 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
@@ -2095,7 +2092,7 @@ static int install_context_apply(
|
|
|
594167 |
static int install_context_mark_for_removal(
|
|
|
594167 |
UnitFileScope scope,
|
|
|
594167 |
InstallContext *c,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
Set **remove_symlinks_to,
|
|
|
594167 |
const char *config_path,
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
@@ -2105,7 +2102,7 @@ static int install_context_mark_for_removal(
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
assert(c);
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(config_path);
|
|
|
594167 |
|
|
|
594167 |
/* Marks all items for removal */
|
|
|
594167 |
@@ -2123,7 +2120,7 @@ static int install_context_mark_for_removal(
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_traverse(scope, c, paths, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL);
|
|
|
594167 |
+ r = install_info_traverse(scope, c, lp, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL);
|
|
|
594167 |
if (r == -ENOLINK) {
|
|
|
594167 |
log_debug_errno(r, "Name %s leads to a dangling symlink, removing name.", i->name);
|
|
|
594167 |
unit_file_changes_add(changes, n_changes, UNIT_FILE_IS_DANGLING, i->path ?: i->name, NULL);
|
|
|
594167 |
@@ -2164,7 +2161,7 @@ int unit_file_mask(
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
const char *config_path;
|
|
|
594167 |
char **i;
|
|
|
594167 |
int r;
|
|
|
594167 |
@@ -2172,11 +2169,11 @@ int unit_file_mask(
|
|
|
594167 |
assert(scope >= 0);
|
|
|
594167 |
assert(scope < _UNIT_FILE_SCOPE_MAX);
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
|
|
|
594167 |
+ config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
|
|
|
594167 |
if (!config_path)
|
|
|
594167 |
return -ENXIO;
|
|
|
594167 |
|
|
|
594167 |
@@ -2194,7 +2191,7 @@ int unit_file_mask(
|
|
|
594167 |
if (!path)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- q = create_symlink(&paths, "/dev/null", path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
|
|
|
594167 |
+ q = create_symlink(&lp, "/dev/null", path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
|
|
|
594167 |
if (q < 0 && r >= 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
}
|
|
|
594167 |
@@ -2210,7 +2207,7 @@ int unit_file_unmask(
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
_cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
|
|
|
594167 |
_cleanup_strv_free_ char **todo = NULL;
|
|
|
594167 |
const char *config_path;
|
|
|
594167 |
@@ -2222,11 +2219,11 @@ int unit_file_unmask(
|
|
|
594167 |
assert(scope >= 0);
|
|
|
594167 |
assert(scope < _UNIT_FILE_SCOPE_MAX);
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
|
|
|
594167 |
+ config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
|
|
|
594167 |
if (!config_path)
|
|
|
594167 |
return -ENXIO;
|
|
|
594167 |
|
|
|
594167 |
@@ -2283,13 +2280,13 @@ int unit_file_unmask(
|
|
|
594167 |
|
|
|
594167 |
unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, path, NULL);
|
|
|
594167 |
|
|
|
594167 |
- rp = skip_root(&paths, path);
|
|
|
594167 |
+ rp = skip_root(lp.root_dir, path);
|
|
|
594167 |
q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: path);
|
|
|
594167 |
if (q < 0)
|
|
|
594167 |
return q;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- q = remove_marked_symlinks(remove_symlinks_to, config_path, &paths, dry_run, changes, n_changes);
|
|
|
594167 |
+ q = remove_marked_symlinks(remove_symlinks_to, config_path, &lp, dry_run, changes, n_changes);
|
|
|
594167 |
if (r >= 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
|
|
|
594167 |
@@ -2304,7 +2301,7 @@ int unit_file_link(
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
_cleanup_strv_free_ char **todo = NULL;
|
|
|
594167 |
const char *config_path;
|
|
|
594167 |
size_t n_todo = 0;
|
|
|
594167 |
@@ -2314,11 +2311,11 @@ int unit_file_link(
|
|
|
594167 |
assert(scope >= 0);
|
|
|
594167 |
assert(scope < _UNIT_FILE_SCOPE_MAX);
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
|
|
|
594167 |
+ config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
|
|
|
594167 |
if (!config_path)
|
|
|
594167 |
return -ENXIO;
|
|
|
594167 |
|
|
|
594167 |
@@ -2334,7 +2331,7 @@ int unit_file_link(
|
|
|
594167 |
if (!unit_name_is_valid(fn, UNIT_NAME_ANY))
|
|
|
594167 |
return -EINVAL;
|
|
|
594167 |
|
|
|
594167 |
- full = path_join(paths.root_dir, *i);
|
|
|
594167 |
+ full = path_join(lp.root_dir, *i);
|
|
|
594167 |
if (!full)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
@@ -2344,7 +2341,7 @@ int unit_file_link(
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- q = in_search_path(&paths, *i);
|
|
|
594167 |
+ q = in_search_path(&lp, *i);
|
|
|
594167 |
if (q < 0)
|
|
|
594167 |
return q;
|
|
|
594167 |
if (q > 0)
|
|
|
594167 |
@@ -2370,7 +2367,7 @@ int unit_file_link(
|
|
|
594167 |
if (!new_path)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- q = create_symlink(&paths, *i, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
|
|
|
594167 |
+ q = create_symlink(&lp, *i, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
|
|
|
594167 |
if (q < 0 && r >= 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
}
|
|
|
594167 |
@@ -2378,23 +2375,23 @@ int unit_file_link(
|
|
|
594167 |
return r;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
-static int path_shall_revert(const LookupPaths *paths, const char *path) {
|
|
|
594167 |
+static int path_shall_revert(const LookupPaths *lp, const char *path) {
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(path);
|
|
|
594167 |
|
|
|
594167 |
/* Checks whether the path is one where the drop-in directories shall be removed. */
|
|
|
594167 |
|
|
|
594167 |
- r = path_is_config(paths, path, true);
|
|
|
594167 |
+ r = path_is_config(lp, path, true);
|
|
|
594167 |
if (r != 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- r = path_is_control(paths, path);
|
|
|
594167 |
+ r = path_is_control(lp, path);
|
|
|
594167 |
if (r != 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- return path_is_transient(paths, path);
|
|
|
594167 |
+ return path_is_transient(lp, path);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
int unit_file_revert(
|
|
|
594167 |
@@ -2405,7 +2402,7 @@ int unit_file_revert(
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
|
|
|
594167 |
_cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
_cleanup_strv_free_ char **todo = NULL;
|
|
|
594167 |
size_t n_todo = 0;
|
|
|
594167 |
char **i;
|
|
|
594167 |
@@ -2422,7 +2419,7 @@ int unit_file_revert(
|
|
|
594167 |
* We remove all that in both the runtime and the persistent directories, if that applies.
|
|
|
594167 |
*/
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
@@ -2433,7 +2430,7 @@ int unit_file_revert(
|
|
|
594167 |
if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
|
|
|
594167 |
return -EINVAL;
|
|
|
594167 |
|
|
|
594167 |
- STRV_FOREACH(p, paths.search_path) {
|
|
|
594167 |
+ STRV_FOREACH(p, lp.search_path) {
|
|
|
594167 |
_cleanup_free_ char *path = NULL, *dropin = NULL;
|
|
|
594167 |
struct stat st;
|
|
|
594167 |
|
|
|
594167 |
@@ -2447,7 +2444,7 @@ int unit_file_revert(
|
|
|
594167 |
return -errno;
|
|
|
594167 |
} else if (S_ISREG(st.st_mode)) {
|
|
|
594167 |
/* Check if there's a vendor version */
|
|
|
594167 |
- r = path_is_vendor_or_generator(&paths, path);
|
|
|
594167 |
+ r = path_is_vendor_or_generator(&lp, path);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0)
|
|
|
594167 |
@@ -2464,7 +2461,7 @@ int unit_file_revert(
|
|
|
594167 |
return -errno;
|
|
|
594167 |
} else if (S_ISDIR(st.st_mode)) {
|
|
|
594167 |
/* Remove the drop-ins */
|
|
|
594167 |
- r = path_shall_revert(&paths, dropin);
|
|
|
594167 |
+ r = path_shall_revert(&lp, dropin);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0) {
|
|
|
594167 |
@@ -2480,7 +2477,7 @@ int unit_file_revert(
|
|
|
594167 |
continue;
|
|
|
594167 |
|
|
|
594167 |
/* OK, there's a vendor version, hence drop all configuration versions */
|
|
|
594167 |
- STRV_FOREACH(p, paths.search_path) {
|
|
|
594167 |
+ STRV_FOREACH(p, lp.search_path) {
|
|
|
594167 |
_cleanup_free_ char *path = NULL;
|
|
|
594167 |
struct stat st;
|
|
|
594167 |
|
|
|
594167 |
@@ -2493,7 +2490,7 @@ int unit_file_revert(
|
|
|
594167 |
if (errno != ENOENT)
|
|
|
594167 |
return -errno;
|
|
|
594167 |
} else if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) {
|
|
|
594167 |
- r = path_is_config(&paths, path, true);
|
|
|
594167 |
+ r = path_is_config(&lp, path, true);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0) {
|
|
|
594167 |
@@ -2534,17 +2531,17 @@ int unit_file_revert(
|
|
|
594167 |
|
|
|
594167 |
unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, *i, NULL);
|
|
|
594167 |
|
|
|
594167 |
- rp = skip_root(&paths, *i);
|
|
|
594167 |
+ rp = skip_root(lp.root_dir, *i);
|
|
|
594167 |
q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: *i);
|
|
|
594167 |
if (q < 0)
|
|
|
594167 |
return q;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- q = remove_marked_symlinks(remove_symlinks_to, paths.runtime_config, &paths, false, changes, n_changes);
|
|
|
594167 |
+ q = remove_marked_symlinks(remove_symlinks_to, lp.runtime_config, &lp, false, changes, n_changes);
|
|
|
594167 |
if (r >= 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
|
|
|
594167 |
- q = remove_marked_symlinks(remove_symlinks_to, paths.persistent_config, &paths, false, changes, n_changes);
|
|
|
594167 |
+ q = remove_marked_symlinks(remove_symlinks_to, lp.persistent_config, &lp, false, changes, n_changes);
|
|
|
594167 |
if (r >= 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
|
|
|
594167 |
@@ -2561,7 +2558,7 @@ int unit_file_add_dependency(
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
_cleanup_(install_context_done) InstallContext c = {};
|
|
|
594167 |
UnitFileInstallInfo *i, *target_info;
|
|
|
594167 |
const char *config_path;
|
|
|
594167 |
@@ -2578,15 +2575,15 @@ int unit_file_add_dependency(
|
|
|
594167 |
if (!unit_name_is_valid(target, UNIT_NAME_ANY))
|
|
|
594167 |
return -EINVAL;
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
|
|
|
594167 |
+ config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
|
|
|
594167 |
if (!config_path)
|
|
|
594167 |
return -ENXIO;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_discover_and_check(scope, &c, &paths, target, SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
+ r = install_info_discover_and_check(scope, &c, &lp, target, SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
&target_info, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
@@ -2596,7 +2593,7 @@ int unit_file_add_dependency(
|
|
|
594167 |
STRV_FOREACH(f, files) {
|
|
|
594167 |
char ***l;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_discover_and_check(scope, &c, &paths, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
+ r = install_info_discover_and_check(scope, &c, &lp, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
&i, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
@@ -2618,7 +2615,7 @@ int unit_file_add_dependency(
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- return install_context_apply(scope, file_flags, &c, &paths, config_path,
|
|
|
594167 |
+ return install_context_apply(scope, file_flags, &c, &lp, config_path,
|
|
|
594167 |
SEARCH_FOLLOW_CONFIG_SYMLINKS, changes, n_changes);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
@@ -2630,7 +2627,7 @@ int unit_file_enable(
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
_cleanup_(install_context_done) InstallContext c = {};
|
|
|
594167 |
const char *config_path;
|
|
|
594167 |
UnitFileInstallInfo *i;
|
|
|
594167 |
@@ -2640,16 +2637,16 @@ int unit_file_enable(
|
|
|
594167 |
assert(scope >= 0);
|
|
|
594167 |
assert(scope < _UNIT_FILE_SCOPE_MAX);
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- config_path = config_path_from_flags(&paths, file_flags);
|
|
|
594167 |
+ config_path = config_path_from_flags(&lp, file_flags);
|
|
|
594167 |
if (!config_path)
|
|
|
594167 |
return -ENXIO;
|
|
|
594167 |
|
|
|
594167 |
STRV_FOREACH(f, files) {
|
|
|
594167 |
- r = install_info_discover_and_check(scope, &c, &paths, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
+ r = install_info_discover_and_check(scope, &c, &lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
&i, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
@@ -2662,7 +2659,7 @@ int unit_file_enable(
|
|
|
594167 |
is useful to determine whether the passed files had any
|
|
|
594167 |
installation data at all. */
|
|
|
594167 |
|
|
|
594167 |
- return install_context_apply(scope, file_flags, &c, &paths, config_path, SEARCH_LOAD, changes, n_changes);
|
|
|
594167 |
+ return install_context_apply(scope, file_flags, &c, &lp, config_path, SEARCH_LOAD, changes, n_changes);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
int unit_file_disable(
|
|
|
594167 |
@@ -2673,7 +2670,7 @@ int unit_file_disable(
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
_cleanup_(install_context_done) InstallContext c = {};
|
|
|
594167 |
_cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
|
|
|
594167 |
const char *config_path;
|
|
|
594167 |
@@ -2683,11 +2680,11 @@ int unit_file_disable(
|
|
|
594167 |
assert(scope >= 0);
|
|
|
594167 |
assert(scope < _UNIT_FILE_SCOPE_MAX);
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- config_path = config_path_from_flags(&paths, flags);
|
|
|
594167 |
+ config_path = config_path_from_flags(&lp, flags);
|
|
|
594167 |
if (!config_path)
|
|
|
594167 |
return -ENXIO;
|
|
|
594167 |
|
|
|
594167 |
@@ -2695,16 +2692,16 @@ int unit_file_disable(
|
|
|
594167 |
if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
|
|
|
594167 |
return -EINVAL;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_add(&c, *i, NULL, paths.root_dir, /* auxiliary= */ false, NULL);
|
|
|
594167 |
+ r = install_info_add(&c, *i, NULL, lp.root_dir, /* auxiliary= */ false, NULL);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- r = install_context_mark_for_removal(scope, &c, &paths, &remove_symlinks_to, config_path, changes, n_changes);
|
|
|
594167 |
+ r = install_context_mark_for_removal(scope, &c, &lp, &remove_symlinks_to, config_path, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- return remove_marked_symlinks(remove_symlinks_to, config_path, &paths, !!(flags & UNIT_FILE_DRY_RUN), changes, n_changes);
|
|
|
594167 |
+ return remove_marked_symlinks(remove_symlinks_to, config_path, &lp, !!(flags & UNIT_FILE_DRY_RUN), changes, n_changes);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
int unit_file_reenable(
|
|
|
594167 |
@@ -2742,7 +2739,7 @@ int unit_file_set_default(
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
_cleanup_(install_context_done) InstallContext c = {};
|
|
|
594167 |
UnitFileInstallInfo *i;
|
|
|
594167 |
const char *new_path;
|
|
|
594167 |
@@ -2757,16 +2754,16 @@ int unit_file_set_default(
|
|
|
594167 |
if (streq(name, SPECIAL_DEFAULT_TARGET))
|
|
|
594167 |
return -EINVAL;
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_discover_and_check(scope, &c, &paths, name, 0, &i, changes, n_changes);
|
|
|
594167 |
+ r = install_info_discover_and_check(scope, &c, &lp, name, 0, &i, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- new_path = strjoina(paths.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
|
|
|
594167 |
- return create_symlink(&paths, i->path, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
|
|
|
594167 |
+ new_path = strjoina(lp.persistent_config, "/" SPECIAL_DEFAULT_TARGET);
|
|
|
594167 |
+ return create_symlink(&lp, i->path, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
int unit_file_get_default(
|
|
|
594167 |
@@ -2774,7 +2771,7 @@ int unit_file_get_default(
|
|
|
594167 |
const char *root_dir,
|
|
|
594167 |
char **name) {
|
|
|
594167 |
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
_cleanup_(install_context_done) InstallContext c = {};
|
|
|
594167 |
UnitFileInstallInfo *i;
|
|
|
594167 |
char *n;
|
|
|
594167 |
@@ -2784,15 +2781,15 @@ int unit_file_get_default(
|
|
|
594167 |
assert(scope < _UNIT_FILE_SCOPE_MAX);
|
|
|
594167 |
assert(name);
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_discover(scope, &c, &paths, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
+ r = install_info_discover(scope, &c, &lp, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
&i, NULL, NULL);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
- r = install_info_may_process(i, &paths, NULL, 0);
|
|
|
594167 |
+ r = install_info_may_process(i, &lp, NULL, 0);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
@@ -2806,7 +2803,7 @@ int unit_file_get_default(
|
|
|
594167 |
|
|
|
594167 |
int unit_file_lookup_state(
|
|
|
594167 |
UnitFileScope scope,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *name,
|
|
|
594167 |
UnitFileState *ret) {
|
|
|
594167 |
|
|
|
594167 |
@@ -2815,13 +2812,13 @@ int unit_file_lookup_state(
|
|
|
594167 |
UnitFileState state;
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(name);
|
|
|
594167 |
|
|
|
594167 |
if (!unit_name_is_valid(name, UNIT_NAME_ANY))
|
|
|
594167 |
return -EINVAL;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_discover(scope, &c, paths, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
+ r = install_info_discover(scope, &c, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
&i, NULL, NULL);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return log_debug_errno(r, "Failed to discover unit %s: %m", name);
|
|
|
594167 |
@@ -2837,7 +2834,7 @@ int unit_file_lookup_state(
|
|
|
594167 |
switch (i->type) {
|
|
|
594167 |
|
|
|
594167 |
case UNIT_FILE_TYPE_MASKED:
|
|
|
594167 |
- r = path_is_runtime(paths, i->path, true);
|
|
|
594167 |
+ r = path_is_runtime(lp, i->path, true);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
@@ -2851,7 +2848,7 @@ int unit_file_lookup_state(
|
|
|
594167 |
break;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- r = path_is_generator(paths, i->path);
|
|
|
594167 |
+ r = path_is_generator(lp, i->path);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0) {
|
|
|
594167 |
@@ -2859,7 +2856,7 @@ int unit_file_lookup_state(
|
|
|
594167 |
break;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- r = path_is_transient(paths, i->path);
|
|
|
594167 |
+ r = path_is_transient(lp, i->path);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0) {
|
|
|
594167 |
@@ -2870,7 +2867,7 @@ int unit_file_lookup_state(
|
|
|
594167 |
/* Check if any of the Alias= symlinks have been created.
|
|
|
594167 |
* We ignore other aliases, and only check those that would
|
|
|
594167 |
* be created by systemctl enable for this unit. */
|
|
|
594167 |
- r = find_symlinks_in_scope(scope, paths, i, true, &state);
|
|
|
594167 |
+ r = find_symlinks_in_scope(scope, lp, i, true, &state);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0)
|
|
|
594167 |
@@ -2878,7 +2875,7 @@ int unit_file_lookup_state(
|
|
|
594167 |
|
|
|
594167 |
/* Check if the file is known under other names. If it is,
|
|
|
594167 |
* it might be in use. Report that as UNIT_FILE_INDIRECT. */
|
|
|
594167 |
- r = find_symlinks_in_scope(scope, paths, i, false, &state);
|
|
|
594167 |
+ r = find_symlinks_in_scope(scope, lp, i, false, &state);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
if (r > 0)
|
|
|
594167 |
@@ -2908,31 +2905,31 @@ int unit_file_get_state(
|
|
|
594167 |
const char *name,
|
|
|
594167 |
UnitFileState *ret) {
|
|
|
594167 |
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
assert(scope >= 0);
|
|
|
594167 |
assert(scope < _UNIT_FILE_SCOPE_MAX);
|
|
|
594167 |
assert(name);
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- return unit_file_lookup_state(scope, &paths, name, ret);
|
|
|
594167 |
+ return unit_file_lookup_state(scope, &lp, name, ret);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
-int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name) {
|
|
|
594167 |
+int unit_file_exists(UnitFileScope scope, const LookupPaths *lp, const char *name) {
|
|
|
594167 |
_cleanup_(install_context_done) InstallContext c = {};
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(name);
|
|
|
594167 |
|
|
|
594167 |
if (!unit_name_is_valid(name, UNIT_NAME_ANY))
|
|
|
594167 |
return -EINVAL;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_discover(scope, &c, paths, name, 0, NULL, NULL, NULL);
|
|
|
594167 |
+ r = install_info_discover(scope, &c, lp, name, 0, NULL, NULL, NULL);
|
|
|
594167 |
if (r == -ENOENT)
|
|
|
594167 |
return 0;
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
@@ -3195,7 +3192,7 @@ static int execute_preset(
|
|
|
594167 |
UnitFileFlags file_flags,
|
|
|
594167 |
InstallContext *plus,
|
|
|
594167 |
InstallContext *minus,
|
|
|
594167 |
- const LookupPaths *paths,
|
|
|
594167 |
+ const LookupPaths *lp,
|
|
|
594167 |
const char *config_path,
|
|
|
594167 |
char **files,
|
|
|
594167 |
UnitFilePresetMode mode,
|
|
|
594167 |
@@ -3206,17 +3203,17 @@ static int execute_preset(
|
|
|
594167 |
|
|
|
594167 |
assert(plus);
|
|
|
594167 |
assert(minus);
|
|
|
594167 |
- assert(paths);
|
|
|
594167 |
+ assert(lp);
|
|
|
594167 |
assert(config_path);
|
|
|
594167 |
|
|
|
594167 |
if (mode != UNIT_FILE_PRESET_ENABLE_ONLY) {
|
|
|
594167 |
_cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
|
|
|
594167 |
|
|
|
594167 |
- r = install_context_mark_for_removal(scope, minus, paths, &remove_symlinks_to, config_path, changes, n_changes);
|
|
|
594167 |
+ r = install_context_mark_for_removal(scope, minus, lp, &remove_symlinks_to, config_path, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- r = remove_marked_symlinks(remove_symlinks_to, config_path, paths, false, changes, n_changes);
|
|
|
594167 |
+ r = remove_marked_symlinks(remove_symlinks_to, config_path, lp, false, changes, n_changes);
|
|
|
594167 |
} else
|
|
|
594167 |
r = 0;
|
|
|
594167 |
|
|
|
594167 |
@@ -3226,7 +3223,7 @@ static int execute_preset(
|
|
|
594167 |
/* Returns number of symlinks that where supposed to be installed. */
|
|
|
594167 |
q = install_context_apply(scope,
|
|
|
594167 |
file_flags | UNIT_FILE_IGNORE_AUXILIARY_FAILURE,
|
|
|
594167 |
- plus, paths, config_path, SEARCH_LOAD, changes, n_changes);
|
|
|
594167 |
+ plus, lp, config_path, SEARCH_LOAD, changes, n_changes);
|
|
|
594167 |
if (r >= 0) {
|
|
|
594167 |
if (q < 0)
|
|
|
594167 |
r = q;
|
|
|
594167 |
@@ -3242,7 +3239,7 @@ static int preset_prepare_one(
|
|
|
594167 |
UnitFileScope scope,
|
|
|
594167 |
InstallContext *plus,
|
|
|
594167 |
InstallContext *minus,
|
|
|
594167 |
- LookupPaths *paths,
|
|
|
594167 |
+ LookupPaths *lp,
|
|
|
594167 |
const char *name,
|
|
|
594167 |
const UnitFilePresets *presets,
|
|
|
594167 |
UnitFileChange **changes,
|
|
|
594167 |
@@ -3256,7 +3253,7 @@ static int preset_prepare_one(
|
|
|
594167 |
if (install_info_find(plus, name) || install_info_find(minus, name))
|
|
|
594167 |
return 0;
|
|
|
594167 |
|
|
|
594167 |
- r = install_info_discover(scope, &tmp, paths, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
+ r = install_info_discover(scope, &tmp, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
&i, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
@@ -3273,20 +3270,20 @@ static int preset_prepare_one(
|
|
|
594167 |
if (instance_name_list) {
|
|
|
594167 |
char **s;
|
|
|
594167 |
STRV_FOREACH(s, instance_name_list) {
|
|
|
594167 |
- r = install_info_discover_and_check(scope, plus, paths, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
+ r = install_info_discover_and_check(scope, plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
&i, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
}
|
|
|
594167 |
} else {
|
|
|
594167 |
- r = install_info_discover_and_check(scope, plus, paths, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
+ r = install_info_discover_and_check(scope, plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
&i, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
} else
|
|
|
594167 |
- r = install_info_discover(scope, minus, paths, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
+ r = install_info_discover(scope, minus, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS,
|
|
|
594167 |
&i, changes, n_changes);
|
|
|
594167 |
|
|
|
594167 |
return r;
|
|
|
594167 |
@@ -3302,7 +3299,7 @@ int unit_file_preset(
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
|
|
|
594167 |
_cleanup_(install_context_done) InstallContext plus = {}, minus = {};
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
_cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
|
|
|
594167 |
const char *config_path;
|
|
|
594167 |
char **i;
|
|
|
594167 |
@@ -3312,11 +3309,11 @@ int unit_file_preset(
|
|
|
594167 |
assert(scope < _UNIT_FILE_SCOPE_MAX);
|
|
|
594167 |
assert(mode < _UNIT_FILE_PRESET_MAX);
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
|
|
|
594167 |
+ config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
|
|
|
594167 |
if (!config_path)
|
|
|
594167 |
return -ENXIO;
|
|
|
594167 |
|
|
|
594167 |
@@ -3325,12 +3322,12 @@ int unit_file_preset(
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
STRV_FOREACH(i, files) {
|
|
|
594167 |
- r = preset_prepare_one(scope, &plus, &minus, &paths, *i, &presets, changes, n_changes);
|
|
|
594167 |
+ r = preset_prepare_one(scope, &plus, &minus, &lp, *i, &presets, changes, n_changes);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- return execute_preset(scope, file_flags, &plus, &minus, &paths, config_path, files, mode, changes, n_changes);
|
|
|
594167 |
+ return execute_preset(scope, file_flags, &plus, &minus, &lp, config_path, files, mode, changes, n_changes);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
int unit_file_preset_all(
|
|
|
594167 |
@@ -3342,7 +3339,7 @@ int unit_file_preset_all(
|
|
|
594167 |
size_t *n_changes) {
|
|
|
594167 |
|
|
|
594167 |
_cleanup_(install_context_done) InstallContext plus = {}, minus = {};
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
_cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
|
|
|
594167 |
const char *config_path = NULL;
|
|
|
594167 |
char **i;
|
|
|
594167 |
@@ -3352,11 +3349,11 @@ int unit_file_preset_all(
|
|
|
594167 |
assert(scope < _UNIT_FILE_SCOPE_MAX);
|
|
|
594167 |
assert(mode < _UNIT_FILE_PRESET_MAX);
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config;
|
|
|
594167 |
+ config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config;
|
|
|
594167 |
if (!config_path)
|
|
|
594167 |
return -ENXIO;
|
|
|
594167 |
|
|
|
594167 |
@@ -3364,7 +3361,7 @@ int unit_file_preset_all(
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- STRV_FOREACH(i, paths.search_path) {
|
|
|
594167 |
+ STRV_FOREACH(i, lp.search_path) {
|
|
|
594167 |
_cleanup_closedir_ DIR *d = NULL;
|
|
|
594167 |
|
|
|
594167 |
d = opendir(*i);
|
|
|
594167 |
@@ -3383,7 +3380,7 @@ int unit_file_preset_all(
|
|
|
594167 |
if (!IN_SET(de->d_type, DT_LNK, DT_REG))
|
|
|
594167 |
continue;
|
|
|
594167 |
|
|
|
594167 |
- r = preset_prepare_one(scope, &plus, &minus, &paths, de->d_name, &presets, changes, n_changes);
|
|
|
594167 |
+ r = preset_prepare_one(scope, &plus, &minus, &lp, de->d_name, &presets, changes, n_changes);
|
|
|
594167 |
if (r < 0 &&
|
|
|
594167 |
!IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT))
|
|
|
594167 |
/* Ignore generated/transient/missing/invalid units when applying preset, propagate other errors.
|
|
|
594167 |
@@ -3392,7 +3389,7 @@ int unit_file_preset_all(
|
|
|
594167 |
}
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
- return execute_preset(scope, file_flags, &plus, &minus, &paths, config_path, NULL, mode, changes, n_changes);
|
|
|
594167 |
+ return execute_preset(scope, file_flags, &plus, &minus, &lp, config_path, NULL, mode, changes, n_changes);
|
|
|
594167 |
}
|
|
|
594167 |
|
|
|
594167 |
static UnitFileList* unit_file_list_free_one(UnitFileList *f) {
|
|
|
594167 |
@@ -3416,7 +3413,7 @@ int unit_file_get_list(
|
|
|
594167 |
char **states,
|
|
|
594167 |
char **patterns) {
|
|
|
594167 |
|
|
|
594167 |
- _cleanup_(lookup_paths_free) LookupPaths paths = {};
|
|
|
594167 |
+ _cleanup_(lookup_paths_free) LookupPaths lp = {};
|
|
|
594167 |
char **dirname;
|
|
|
594167 |
int r;
|
|
|
594167 |
|
|
|
594167 |
@@ -3424,11 +3421,11 @@ int unit_file_get_list(
|
|
|
594167 |
assert(scope < _UNIT_FILE_SCOPE_MAX);
|
|
|
594167 |
assert(h);
|
|
|
594167 |
|
|
|
594167 |
- r = lookup_paths_init(&paths, scope, 0, root_dir);
|
|
|
594167 |
+ r = lookup_paths_init(&lp, scope, 0, root_dir);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
return r;
|
|
|
594167 |
|
|
|
594167 |
- STRV_FOREACH(dirname, paths.search_path) {
|
|
|
594167 |
+ STRV_FOREACH(dirname, lp.search_path) {
|
|
|
594167 |
_cleanup_closedir_ DIR *d = NULL;
|
|
|
594167 |
|
|
|
594167 |
d = opendir(*dirname);
|
|
|
594167 |
@@ -3466,7 +3463,7 @@ int unit_file_get_list(
|
|
|
594167 |
if (!f->path)
|
|
|
594167 |
return -ENOMEM;
|
|
|
594167 |
|
|
|
594167 |
- r = unit_file_lookup_state(scope, &paths, de->d_name, &f->state);
|
|
|
594167 |
+ r = unit_file_lookup_state(scope, &lp, de->d_name, &f->state);
|
|
|
594167 |
if (r < 0)
|
|
|
594167 |
f->state = UNIT_FILE_BAD;
|
|
|
594167 |
|