X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsystemctl%2Fsystemctl.c;h=21bf51bb3eb30617751f0d8afb5bcc54cd01cab7;hb=ea6c2dd1f819c3d481fc590849809aeb552c1d48;hp=4690ba08f71e51a8ce056673ce2dd24054f02fed;hpb=b0d14c69b2907798ffde32b49b4f28a90242dbb7;p=elogind.git diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 4690ba08f..21bf51bb3 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -3226,7 +3226,6 @@ static void print_status_info( } if (i->id && arg_transport == BUS_TRANSPORT_LOCAL) { - printf("\n"); show_journal_by_unit(stdout, i->id, arg_output, @@ -3234,7 +3233,7 @@ static void print_status_info( i->inactive_exit_timestamp_monotonic, arg_lines, getuid(), - flags, + flags | OUTPUT_BEGIN_NEWLINE, arg_scope == UNIT_FILE_SYSTEM, ellipsized); } @@ -4062,107 +4061,13 @@ static int show_all( return log_oom(); r = show_one(verb, bus, p, show_properties, new_line, ellipsized); - if (r != 0) + if (r < 0) return r; } return 0; } -static int cat(sd_bus *bus, char **args) { - _cleanup_free_ char *unit = NULL; - _cleanup_strv_free_ char **names = NULL; - char **name; - bool first = true; - int r = 0; - - assert(bus); - assert(args); - - r = expand_names(bus, args + 1, NULL, &names); - if (r < 0) - log_error("Failed to expand names: %s", strerror(-r)); - - pager_open_if_enabled(); - - STRV_FOREACH(name, names) { - _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; - _cleanup_strv_free_ char **dropin_paths = NULL; - _cleanup_free_ char *fragment_path = NULL; - char **path; - - unit = unit_dbus_path_from_name(*name); - if (!unit) - return log_oom(); - - if (need_daemon_reload(bus, *name) > 0) - log_warning("Unit file of %s changed on disk. Run 'systemctl%s daemon-reload'.", - *name, arg_scope == UNIT_FILE_SYSTEM ? "" : " --user"); - - r = sd_bus_get_property_string( - bus, - "org.freedesktop.systemd1", - unit, - "org.freedesktop.systemd1.Unit", - "FragmentPath", - &error, - &fragment_path); - if (r < 0) { - log_warning("Failed to get FragmentPath: %s", bus_error_message(&error, r)); - continue; - } - - r = sd_bus_get_property_strv( - bus, - "org.freedesktop.systemd1", - unit, - "org.freedesktop.systemd1.Unit", - "DropInPaths", - &error, - &dropin_paths); - if (r < 0) { - log_warning("Failed to get DropInPaths: %s", bus_error_message(&error, r)); - continue; - } - - if (first) - first = false; - else - puts(""); - - if (!isempty(fragment_path)) { - printf("%s# %s%s\n", - ansi_highlight_blue(), - fragment_path, - ansi_highlight_off()); - fflush(stdout); - - r = sendfile_full(STDOUT_FILENO, fragment_path); - if (r < 0) { - log_warning("Failed to cat %s: %s", fragment_path, strerror(-r)); - continue; - } - } - - STRV_FOREACH(path, dropin_paths) { - printf("%s%s# %s%s\n", - isempty(fragment_path) && path == dropin_paths ? "" : "\n", - ansi_highlight_blue(), - *path, - ansi_highlight_off()); - fflush(stdout); - - r = sendfile_full(STDOUT_FILENO, *path); - if (r < 0) { - log_warning("Failed to cat %s: %s", *path, strerror(-r)); - continue; - } - } - } - - return r < 0 ? r : 0; -} - static int show_system_status(sd_bus *bus) { char since1[FORMAT_TIMESTAMP_RELATIVE_MAX], since2[FORMAT_TIMESTAMP_MAX]; _cleanup_free_ char *hn = NULL; @@ -4312,6 +4217,100 @@ static int show(sd_bus *bus, char **args) { return ret; } +static int cat(sd_bus *bus, char **args) { + _cleanup_free_ char *unit = NULL; + _cleanup_strv_free_ char **names = NULL; + char **name; + bool first = true; + int r = 0; + + assert(bus); + assert(args); + + r = expand_names(bus, args + 1, NULL, &names); + if (r < 0) + log_error("Failed to expand names: %s", strerror(-r)); + + pager_open_if_enabled(); + + STRV_FOREACH(name, names) { + _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; + _cleanup_strv_free_ char **dropin_paths = NULL; + _cleanup_free_ char *fragment_path = NULL; + char **path; + + unit = unit_dbus_path_from_name(*name); + if (!unit) + return log_oom(); + + if (need_daemon_reload(bus, *name) > 0) + log_warning("Unit file of %s changed on disk. Run 'systemctl%s daemon-reload'.", + *name, arg_scope == UNIT_FILE_SYSTEM ? "" : " --user"); + + r = sd_bus_get_property_string( + bus, + "org.freedesktop.systemd1", + unit, + "org.freedesktop.systemd1.Unit", + "FragmentPath", + &error, + &fragment_path); + if (r < 0) { + log_warning("Failed to get FragmentPath: %s", bus_error_message(&error, r)); + continue; + } + + r = sd_bus_get_property_strv( + bus, + "org.freedesktop.systemd1", + unit, + "org.freedesktop.systemd1.Unit", + "DropInPaths", + &error, + &dropin_paths); + if (r < 0) { + log_warning("Failed to get DropInPaths: %s", bus_error_message(&error, r)); + continue; + } + + if (first) + first = false; + else + puts(""); + + if (!isempty(fragment_path)) { + printf("%s# %s%s\n", + ansi_highlight_blue(), + fragment_path, + ansi_highlight_off()); + fflush(stdout); + + r = sendfile_full(STDOUT_FILENO, fragment_path); + if (r < 0) { + log_warning("Failed to cat %s: %s", fragment_path, strerror(-r)); + continue; + } + } + + STRV_FOREACH(path, dropin_paths) { + printf("%s%s# %s%s\n", + isempty(fragment_path) && path == dropin_paths ? "" : "\n", + ansi_highlight_blue(), + *path, + ansi_highlight_off()); + fflush(stdout); + + r = sendfile_full(STDOUT_FILENO, *path); + if (r < 0) { + log_warning("Failed to cat %s: %s", *path, strerror(-r)); + continue; + } + } + } + + return r < 0 ? r : 0; +} + static int set_property(sd_bus *bus, char **args) { _cleanup_bus_message_unref_ sd_bus_message *m = NULL; _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;