From: Mike Yuan Date: Thu, 9 Mar 2023 08:51:24 +0000 (+0800) Subject: journalctl: fix when --since, --until and --lines are used altogether X-Git-Tag: v254-rc1~1082 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5d2ab010dff42ccd5281c2b7ff60c4551fbcfbdf;p=thirdparty%2Fsystemd.git journalctl: fix when --since, --until and --lines are used altogether This is a follow-up for #26669 (81fb5375b3b3bfc22d023d7908ad9eee4b3c1ffb). After the mentioned commit, we stopped checking if the entry is within the range of --until if --lines is used. However, when --since, --until and --lines=N are used altogether, and the number of lines between --since and --until is smaller than N, we would seek to --since later (f58269510727964cb5c10e7d2f9849c442ea1f80). This breaks the assumption that if --lines is set, the boundary is never exceeded because the counter of outputs gets us covered. --- diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index b2951ed1b15..59736143bc0 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -2567,7 +2567,12 @@ static int run(int argc, char *argv[]) { break; } - if (arg_until_set && !arg_reverse && arg_lines < 0) { + if (arg_until_set && !arg_reverse && (arg_lines < 0 || arg_since_set)) { + /* If --lines= is set, we usually rely on the n_shown to tell us + * when to stop. However, if --since= is set too, we may end up + * having less than --lines= to output. In this case let's also + * check if the entry is in range. */ + usec_t usec; r = sd_journal_get_realtime_usec(j, &usec);