journalctl: add --cursor switch

This commit is contained in:
Lennart Poettering 2012-09-27 23:25:23 +02:00
parent 1b89884ba3
commit 8f14c8327b
2 changed files with 28 additions and 2 deletions

View File

@ -254,6 +254,15 @@
current boot.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--cursor=</option></term>
<term><option>-c</option></term>
<listitem><para>Jump to the location
in the journal specified by the passed
cursor.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--directory=</option></term>
<term><option>-D</option></term>

View File

@ -63,6 +63,7 @@ static bool arg_no_tail = false;
static bool arg_quiet = false;
static bool arg_merge = false;
static bool arg_this_boot = false;
static const char *arg_cursor = NULL;
static const char *arg_directory = NULL;
static int arg_priorities = 0xFF;
static const char *arg_verify_key = NULL;
@ -87,6 +88,7 @@ static int help(void) {
" --version Show package version\n"
" --no-pager Do not pipe output into a pager\n"
" -a --all Show all fields, including long and unprintable\n"
" -c --cursor=CURSOR Jump to the specified cursor\n"
" -f --follow Follow journal\n"
" -n --lines[=INTEGER] Number of journal entries to show\n"
" --no-tail Show all lines, even in follow mode\n"
@ -148,6 +150,7 @@ static int parse_argv(int argc, char *argv[]) {
{ "verify", no_argument, NULL, ARG_VERIFY },
{ "verify-key", required_argument, NULL, ARG_VERIFY_KEY },
{ "disk-usage", no_argument, NULL, ARG_DISK_USAGE },
{ "cursor", no_argument, NULL, 'c' },
{ NULL, 0, NULL, 0 }
};
@ -156,7 +159,7 @@ static int parse_argv(int argc, char *argv[]) {
assert(argc >= 0);
assert(argv);
while ((c = getopt_long(argc, argv, "hfo:an::qmbD:p:", options, NULL)) >= 0) {
while ((c = getopt_long(argc, argv, "hfo:an::qmbD:p:c:", options, NULL)) >= 0) {
switch (c) {
@ -228,6 +231,10 @@ static int parse_argv(int argc, char *argv[]) {
arg_directory = optarg;
break;
case 'c':
arg_cursor = optarg;
break;
case ARG_HEADER:
arg_action = ACTION_PRINT_HEADER;
break;
@ -829,7 +836,16 @@ int main(int argc, char *argv[]) {
}
}
if (arg_lines >= 0) {
if (arg_cursor) {
r = sd_journal_seek_cursor(j, arg_cursor);
if (r < 0) {
log_error("Failed to seek to cursor: %s", strerror(-r));
goto finish;
}
r = sd_journal_next(j);
} else if (arg_lines >= 0) {
r = sd_journal_seek_tail(j);
if (r < 0) {
log_error("Failed to seek to tail: %s", strerror(-r));
@ -837,6 +853,7 @@ int main(int argc, char *argv[]) {
}
r = sd_journal_previous_skip(j, arg_lines);
} else {
r = sd_journal_seek_head(j);
if (r < 0) {