]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
coredumpctl: Add -r/--reverse option 5331/head
authorNamhyung Kim <namhyung@gmail.com>
Mon, 13 Feb 2017 13:55:25 +0000 (22:55 +0900)
committerNamhyung Kim <namhyung@gmail.com>
Mon, 13 Feb 2017 13:55:25 +0000 (22:55 +0900)
Like journalctl, users sometimes want to see coredump list in reverse
order.

Signed-off-by: Namhyung Kim <namhyung@gmail.com>
src/coredump/coredumpctl.c

index f0c07c3a6c85cd11ac6abda4c3245b5fa0a6ee6b..fcb741b35371e3bf90c509ffaad54c82e43a0d43 100644 (file)
@@ -59,6 +59,7 @@ static bool arg_no_pager = false;
 static int arg_no_legend = false;
 static int arg_one = false;
 static FILE* arg_output = NULL;
+static bool arg_reverse = false;
 
 static Set *new_matches(void) {
         Set *set;
@@ -133,6 +134,7 @@ static void help(void) {
                "     --no-pager      Do not pipe output into a pager\n"
                "     --no-legend     Do not print the column headers.\n"
                "  -1                 Show information about most recent entry only\n"
+               "  -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"
                "  -D --directory=DIR Use journal files from directory\n\n"
@@ -162,13 +164,14 @@ static int parse_argv(int argc, char *argv[], Set *matches) {
                 { "output",       required_argument, NULL, 'o'           },
                 { "field",        required_argument, NULL, 'F'           },
                 { "directory",    required_argument, NULL, 'D'           },
+                { "reverse",      no_argument,       NULL, 'r'           },
                 {}
         };
 
         assert(argc >= 0);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "ho:F:1D:", options, NULL)) >= 0)
+        while ((c = getopt_long(argc, argv, "ho:F:1D:r", options, NULL)) >= 0)
                 switch(c) {
 
                 case 'h':
@@ -216,6 +219,10 @@ static int parse_argv(int argc, char *argv[], Set *matches) {
                         arg_directory = optarg;
                         break;
 
+                case 'r':
+                        arg_reverse = true;
+                        break;
+
                 case '?':
                         return -EINVAL;
 
@@ -602,10 +609,18 @@ static int dump_list(sd_journal *j) {
 
                 return print_entry(j, 0);
         } else {
-                SD_JOURNAL_FOREACH(j) {
-                        r = print_entry(j, n_found++);
-                        if (r < 0)
-                                return r;
+                if (!arg_reverse) {
+                        SD_JOURNAL_FOREACH(j) {
+                                r = print_entry(j, n_found++);
+                                if (r < 0)
+                                        return r;
+                        }
+                } else {
+                        SD_JOURNAL_FOREACH_BACKWARDS(j) {
+                                r = print_entry(j, n_found++);
+                                if (r < 0)
+                                        return r;
+                        }
                 }
 
                 if (!arg_field && n_found <= 0) {