diff options
author | Frantisek Sumsal <frantisek@sumsal.cz> | 2020-04-12 20:39:09 +0200 |
---|---|---|
committer | Frantisek Sumsal <frantisek@sumsal.cz> | 2020-04-13 17:10:27 +0200 |
commit | aeb56450820f824785d1d2718064598293e3bd6c (patch) | |
tree | c08a064cb4212d8ab1919742c39d24f5b9da514f /src/coredump | |
parent | b05e122036b35eb16ba33c487bb0440f3985aaa5 (diff) | |
download | systemd-aeb56450820f824785d1d2718064598293e3bd6c.tar.gz |
coredumpctl: support --file=PATH
Let's match journalctl's functionality by throwing --file for
coredumpctl into the mix, so we can work on a single journal file
as well.
Diffstat (limited to 'src/coredump')
-rw-r--r-- | src/coredump/coredumpctl.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/coredump/coredumpctl.c b/src/coredump/coredumpctl.c index ed12464961..a848268177 100644 --- a/src/coredump/coredumpctl.c +++ b/src/coredump/coredumpctl.c @@ -17,6 +17,7 @@ #include "def.h" #include "fd-util.h" #include "fs-util.h" +#include "glob-util.h" #include "journal-internal.h" #include "journal-util.h" #include "log.h" @@ -44,6 +45,7 @@ static usec_t arg_since = USEC_INFINITY, arg_until = USEC_INFINITY; static const char* arg_field = NULL; static const char *arg_debugger = NULL; static const char *arg_directory = NULL; +static char **arg_file = NULL; static PagerFlags arg_pager_flags = 0; static int arg_no_legend = false; static int arg_one = false; @@ -51,6 +53,8 @@ static const char* arg_output = NULL; static bool arg_reverse = false; static bool arg_quiet = false; +STATIC_DESTRUCTOR_REGISTER(arg_file, strv_freep); + static int add_match(sd_journal *j, const char *match) { _cleanup_free_ char *p = NULL; const char* prefix, *pattern; @@ -111,6 +115,10 @@ static int acquire_journal(sd_journal **ret, char **matches) { r = sd_journal_open_directory(&j, arg_directory, 0); if (r < 0) return log_error_errno(r, "Failed to open journals in directory: %s: %m", arg_directory); + } else if (arg_file) { + r = sd_journal_open_files(&j, (const char**)arg_file, 0); + if (r < 0) + return log_error_errno(r, "Failed to open journal files: %m"); } else { r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY); if (r < 0) @@ -164,6 +172,7 @@ static int help(void) { " -r --reverse Show the newest entries first\n" " -F --field=FIELD List all values a certain field takes\n" " -o --output=FILE Write output to FILE\n" + " --file=PATH Use journal file\n" " -D --directory=DIR Use journal files from directory\n\n" " -q --quiet Do not show info messages and privilege warning\n" "\nSee the %s for details.\n" @@ -182,6 +191,7 @@ static int parse_argv(int argc, char *argv[]) { ARG_NO_PAGER, ARG_NO_LEGEND, ARG_DEBUGGER, + ARG_FILE, }; int c, r; @@ -194,6 +204,7 @@ static int parse_argv(int argc, char *argv[]) { { "debugger", required_argument, NULL, ARG_DEBUGGER }, { "output", required_argument, NULL, 'o' }, { "field", required_argument, NULL, 'F' }, + { "file", required_argument, NULL, ARG_FILE }, { "directory", required_argument, NULL, 'D' }, { "reverse", no_argument, NULL, 'r' }, { "since", required_argument, NULL, 'S' }, @@ -225,6 +236,12 @@ static int parse_argv(int argc, char *argv[]) { arg_debugger = optarg; break; + case ARG_FILE: + r = glob_extend(&arg_file, optarg); + if (r < 0) + return log_error_errno(r, "Failed to add paths: %m"); + break; + case 'o': if (arg_output) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), @@ -1096,6 +1113,7 @@ static int run(int argc, char *argv[]) { ansi_highlight_red(), units_active, units_active == 1 ? "unit is running" : "units are running", ansi_normal()); + return r; } |