summaryrefslogtreecommitdiff
path: root/src/systemctl
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemctl')
-rw-r--r--src/systemctl/systemctl.c156
1 files changed, 78 insertions, 78 deletions
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 20bc3bdf1c..d16c673dcd 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -2278,6 +2278,84 @@ static void warn_unit_file_changed(const char *name) {
arg_scope == UNIT_FILE_SYSTEM ? "" : " --user");
}
+static int unit_file_find_path(LookupPaths *lp, const char *unit_name, char **unit_path) {
+ char **p;
+
+ assert(lp);
+ assert(unit_name);
+ assert(unit_path);
+
+ STRV_FOREACH(p, lp->unit_path) {
+ char *path;
+
+ path = path_join(arg_root, *p, unit_name);
+ if (!path)
+ return log_oom();
+
+ if (access(path, F_OK) == 0) {
+ *unit_path = path;
+ return 1;
+ }
+
+ free(path);
+ }
+
+ return 0;
+}
+
+static int unit_find_path(sd_bus *bus, const char *unit_name, const char *template, bool avoid_bus_cache, LookupPaths *lp, char **path) {
+ int r;
+
+ assert(unit_name);
+ assert(path);
+ assert(lp);
+
+ if (!avoid_bus_cache && !unit_name_is_template(unit_name)) {
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_free_ char *unit = NULL;
+ _cleanup_free_ char *tmp_path = NULL;
+
+ unit = unit_dbus_path_from_name(unit_name);
+ if (!unit)
+ return log_oom();
+
+ if (need_daemon_reload(bus, unit_name) > 0) {
+ warn_unit_file_changed(unit_name);
+ return 0;
+ }
+
+ r = sd_bus_get_property_string(
+ bus,
+ "org.freedesktop.systemd1",
+ unit,
+ "org.freedesktop.systemd1.Unit",
+ "FragmentPath",
+ &error,
+ &tmp_path);
+ if (r < 0) {
+ log_warning("Failed to get FragmentPath: %s", bus_error_message(&error, r));
+ return 0;
+ }
+
+ if (isempty(tmp_path)) {
+ log_warning("%s ignored: not found", template);
+ return 0;
+ }
+
+ *path = tmp_path;
+ tmp_path = NULL;
+
+ return 1;
+ } else {
+ r = unit_file_find_path(lp, template, path);
+ if (r == 0)
+ log_warning("%s ignored: not found", template);
+ return r;
+ }
+
+ return 0;
+}
+
typedef struct WaitData {
Set *set;
@@ -5719,31 +5797,6 @@ static int is_system_running(sd_bus *bus, char **args) {
return streq(state, "running") ? EXIT_SUCCESS : EXIT_FAILURE;
}
-static int unit_file_find_path(LookupPaths *lp, const char *unit_name, char **unit_path) {
- char **p;
-
- assert(lp);
- assert(unit_name);
- assert(unit_path);
-
- STRV_FOREACH(p, lp->unit_path) {
- char *path;
-
- path = path_join(arg_root, *p, unit_name);
- if (!path)
- return log_oom();
-
- if (access(path, F_OK) == 0) {
- *unit_path = path;
- return 1;
- }
-
- free(path);
- }
-
- return 0;
-}
-
static int create_edit_temp_file(const char *new_path, const char *original_path, char **ret_tmp_fn) {
char *t;
int r;
@@ -6041,59 +6094,6 @@ static int run_editor(char **paths) {
return r;
}
-static int unit_find_path(sd_bus *bus, const char *unit_name, const char *template, bool avoid_bus_cache, LookupPaths *lp, char **path) {
- int r;
-
- assert(unit_name);
- assert(path);
- assert(lp);
-
- if (!avoid_bus_cache && !unit_name_is_template(unit_name)) {
- _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
- _cleanup_free_ char *unit = NULL;
- _cleanup_free_ char *tmp_path = NULL;
-
- unit = unit_dbus_path_from_name(unit_name);
- if (!unit)
- return log_oom();
-
- if (need_daemon_reload(bus, unit_name) > 0) {
- warn_unit_file_changed(unit_name);
- return 0;
- }
-
- r = sd_bus_get_property_string(
- bus,
- "org.freedesktop.systemd1",
- unit,
- "org.freedesktop.systemd1.Unit",
- "FragmentPath",
- &error,
- &tmp_path);
- if (r < 0) {
- log_warning("Failed to get FragmentPath: %s", bus_error_message(&error, r));
- return 0;
- }
-
- if (isempty(tmp_path)) {
- log_warning("%s ignored: not found", template);
- return 0;
- }
-
- *path = tmp_path;
- tmp_path = NULL;
-
- return 1;
- } else {
- r = unit_file_find_path(lp, template, path);
- if (r == 0)
- log_warning("%s ignored: not found", template);
- return r;
- }
-
- return 0;
-}
-
static int find_paths_to_edit(sd_bus *bus, char **names, char ***paths) {
_cleanup_free_ char *user_home = NULL;
_cleanup_free_ char *user_runtime = NULL;