chiark / gitweb /
tmpfiles: add 'a' type to set ACLs
[elogind.git] / src / journal / coredumpctl.c
index a6551ac44b21a027e26c91c51d0d0168f5138996..afb39ad035cb871e67b99e9f423821542bd59c2d 100644 (file)
@@ -26,8 +26,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 
-#include "systemd/sd-journal.h"
-
+#include "sd-journal.h"
 #include "build.h"
 #include "set.h"
 #include "util.h"
@@ -38,6 +37,7 @@
 #include "journal-internal.h"
 #include "copy.h"
 #include "compress.h"
+#include "sigbus.h"
 
 static enum {
         ACTION_NONE,
@@ -50,8 +50,7 @@ static const char* arg_field = NULL;
 static int arg_no_pager = false;
 static int arg_no_legend = false;
 static int arg_one = false;
-
-static FILE* output = NULL;
+static FILE* arg_output = NULL;
 
 static Set *new_matches(void) {
         Set *set;
@@ -184,13 +183,13 @@ static int parse_argv(int argc, char *argv[], Set *matches) {
                         break;
 
                 case 'o':
-                        if (output) {
+                        if (arg_output) {
                                 log_error("cannot set output more than once");
                                 return -EINVAL;
                         }
 
-                        output = fopen(optarg, "we");
-                        if (!output)
+                        arg_output = fopen(optarg, "we");
+                        if (!arg_output)
                                 return log_error_errno(errno, "writing to '%s': %m", optarg);
 
                         break;
@@ -687,14 +686,14 @@ static int dump_core(sd_journal* j) {
         if (r < 0)
                 return r;
 
-        print_info(output ? stdout : stderr, j, false);
+        print_info(arg_output ? stdout : stderr, j, false);
 
-        if (on_tty() && !output) {
+        if (on_tty() && !arg_output) {
                 log_error("Refusing to dump core to tty.");
                 return -ENOTTY;
         }
 
-        r = save_core(j, output ? fileno(output) : STDOUT_FILENO, NULL, NULL);
+        r = save_core(j, arg_output ? fileno(arg_output) : STDOUT_FILENO, NULL, NULL);
         if (r < 0)
                 return log_error_errno(r, "Coredump retrieval failed: %m");
 
@@ -803,6 +802,8 @@ int main(int argc, char *argv[]) {
         if (arg_action == ACTION_NONE)
                 goto end;
 
+        sigbus_install();
+
         r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
         if (r < 0) {
                 log_error_errno(r, "Failed to open journal: %m");
@@ -821,7 +822,7 @@ int main(int argc, char *argv[]) {
                 }
         }
 
-        if (_unlikely_(log_get_max_level() >= LOG_PRI(LOG_DEBUG))) {
+        if (_unlikely_(log_get_max_level() >= LOG_DEBUG)) {
                 _cleanup_free_ char *filter;
 
                 filter = journal_make_match_string(j);
@@ -853,8 +854,8 @@ int main(int argc, char *argv[]) {
 end:
         pager_close();
 
-        if (output)
-                fclose(output);
+        if (arg_output)
+                fclose(arg_output);
 
         return r >= 0 ? r : EXIT_FAILURE;
 }