diff options
Diffstat (limited to 'src/journal')
-rw-r--r-- | src/journal/journalctl.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 3682329e46..65114b2ff8 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -38,6 +38,7 @@ #include <systemd/sd-journal.h> #include "log.h" +#include "logs-show.h" #include "util.h" #include "path-util.h" #include "build.h" @@ -76,7 +77,7 @@ static usec_t arg_interval = DEFAULT_FSS_INTERVAL_USEC; static usec_t arg_since, arg_until; static bool arg_since_set = false, arg_until_set = false; static const char *arg_unit = NULL; -static const char *arg_unit_type = NULL; +static bool arg_unit_system; static const char *arg_field = NULL; static bool arg_catalog = false; static bool arg_reverse = false; @@ -187,8 +188,8 @@ static int parse_argv(int argc, char *argv[]) { { "cursor", required_argument, NULL, 'c' }, { "since", required_argument, NULL, ARG_SINCE }, { "until", required_argument, NULL, ARG_UNTIL }, - { "user-unit", required_argument, NULL, ARG_USER_UNIT }, { "unit", required_argument, NULL, 'u' }, + { "user-unit", required_argument, NULL, ARG_USER_UNIT }, { "field", required_argument, NULL, 'F' }, { "catalog", no_argument, NULL, 'x' }, { "list-catalog", no_argument, NULL, ARG_LIST_CATALOG }, @@ -419,14 +420,14 @@ static int parse_argv(int argc, char *argv[]) { arg_until_set = true; break; - case ARG_USER_UNIT: + case 'u': arg_unit = optarg; - arg_unit_type = "_SYSTEMD_USER_UNIT="; + arg_unit_system = true; break; - case 'u': + case ARG_USER_UNIT: arg_unit = optarg; - arg_unit_type = "_SYSTEMD_UNIT="; + arg_unit_system = false; break; case '?': @@ -604,16 +605,12 @@ static int add_unit(sd_journal *j) { if (!u) return log_oom(); - m = strappend(arg_unit_type, u); - - if (!m) - return log_oom(); - - r = sd_journal_add_match(j, m, strlen(m)); - if (r < 0) { - log_error("Failed to add match: %s", strerror(-r)); + if (arg_unit_system) + r = add_matches_for_unit(j, u); + else + r = add_matches_for_user_unit(j, u, getuid()); + if (r < 0) return r; - } return 0; } |