]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journalctl: fix when --since, --until and --lines are used altogether
authorMike Yuan <me@yhndnzj.com>
Thu, 9 Mar 2023 08:51:24 +0000 (16:51 +0800)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 9 Mar 2023 12:36:12 +0000 (21:36 +0900)
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.

src/journal/journalctl.c

index b2951ed1b15070f8bb38133b6abc082b67a6cdb3..59736143bc0d8cfc450f231af5af9d6627109406 100644 (file)
@@ -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);