diff options
author | Oleksii Shevchuk <alxchk@gmail.com> | 2013-04-05 20:58:04 +0300 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-04-05 20:01:42 +0200 |
commit | 76d14b876a1c286ea62c4e0e4fc5ba3c695e169f (patch) | |
tree | e49e7438692a11be8f25ec64228b05e4dd45db41 | |
parent | 0c20f88d55161be943a6cab47eaa7e22aebc6ef6 (diff) |
systemctl: Add DropIn paths to status message
$ systemctl status null.target
null.target - NYAN
Loaded: loaded (/home/alxchk/.config/systemd/user/null.target; disabled)
Drop-In: /home/alxchk/.config/systemd/user/null.target.d
└─ descr.conf, install-1.conf, install.conf
/etc/systemd/user/null.target.d
└─ test.conf
Active: active since Пт 2013-04-05 20:42:13 EEST; 1min 58s ago
-rw-r--r-- | src/systemctl/systemctl.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index a7c2eef5d4..a7b541dc3f 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -2225,6 +2225,8 @@ typedef struct UnitStatusInfo { const char *source_path; const char *default_control_group; + char **dropin_paths; + const char *load_error; const char *result; @@ -2331,6 +2333,34 @@ static void print_status_info(UnitStatusInfo *i) { printf(" %*s: %s%s%s\n", maxlen, "Loaded", on, strna(i->load_state), off); + if (!strv_isempty(i->dropin_paths)) { + char ** dropin; + char * dir = NULL; + bool last = false; + + STRV_FOREACH(dropin, i->dropin_paths) { + if (! dir || last) { + printf(" %*s ", maxlen, dir ? "" : "Drop-In:"); + + free(dir); + + if (path_get_parent(*dropin, &dir) < 0) { + log_oom(); + return; + } + + printf("%s\n %*s %s ", dir, maxlen, "", + draw_special_char(DRAW_TREE_RIGHT)); + } + + last = ! (*(dropin + 1) && startswith(*(dropin + 1), dir)); + + printf("%s%s", path_get_file_name(*dropin), last ? "\n" : ", "); + } + + free(dir); + } + ss = streq_ptr(i->active_state, i->sub_state) ? NULL : i->sub_state; if (streq_ptr(i->active_state, "failed")) { @@ -2771,6 +2801,11 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn return 0; + } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRING && streq(name, "DropInPaths")) { + int r = bus_parse_strv_iter(iter, &i->dropin_paths); + if (r < 0) + return r; + } else if (dbus_message_iter_get_element_type(iter) == DBUS_TYPE_STRING && streq(name, "Documentation")) { @@ -3106,6 +3141,7 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo } strv_free(info.documentation); + strv_free(info.dropin_paths); strv_free(info.listen); if (!streq_ptr(info.active_state, "active") && |