X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjournal%2Fcat.c;h=523a7a2eda39985d00f2cc6b35603ebd0a18b980;hb=56e81f7ca8276e40f8c88c4c30713a5b54009613;hp=6745f1ce0ac18c4ecb3ffa7a5a7d76e301aad49b;hpb=755a02c6800246e7e293897d0594fe7e7531ba59;p=elogind.git diff --git a/src/journal/cat.c b/src/journal/cat.c index 6745f1ce0..523a7a2ed 100644 --- a/src/journal/cat.c +++ b/src/journal/cat.c @@ -6,16 +6,16 @@ Copyright 2012 Lennart Poettering systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. systemd is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + Lesser General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Lesser General Public License along with systemd; If not, see . ***/ @@ -33,7 +33,7 @@ #include "build.h" static char *arg_identifier = NULL; -static char arg_priority = LOG_INFO; +static int arg_priority = LOG_INFO; static bool arg_level_prefix = true; static int help(void) { @@ -59,7 +59,7 @@ static int parse_argv(int argc, char *argv[]) { static const struct option options[] = { { "help", no_argument, NULL, 'h' }, - { "version" , no_argument, NULL, ARG_VERSION }, + { "version", no_argument, NULL, ARG_VERSION }, { "identifier", required_argument, NULL, 't' }, { "priority", required_argument, NULL, 'p' }, { "level-prefix", required_argument, NULL, ARG_LEVEL_PREFIX }, @@ -91,10 +91,8 @@ static int parse_argv(int argc, char *argv[]) { arg_identifier = NULL; else { arg_identifier = strdup(optarg); - if (!arg_identifier) { - log_error("Out of memory."); - return -ENOMEM; - } + if (!arg_identifier) + return log_oom(); } break; @@ -139,7 +137,7 @@ int main(int argc, char *argv[]) { fd = sd_journal_stream_fd(arg_identifier, arg_priority, arg_level_prefix); if (fd < 0) { - log_error("Failed to create stream fd: %s", strerror(fd)); + log_error("Failed to create stream fd: %s", strerror(-fd)); r = fd; goto finish; } @@ -148,7 +146,7 @@ int main(int argc, char *argv[]) { if (dup3(fd, STDOUT_FILENO, 0) < 0 || dup3(fd, STDERR_FILENO, 0) < 0) { - log_error("Failed to duplicate fd: %s", strerror(fd)); + log_error("Failed to duplicate fd: %m"); r = -errno; goto finish; } @@ -163,12 +161,13 @@ int main(int argc, char *argv[]) { else execvp(argv[optind], argv + optind); + r = -errno; + /* Let's try to restore a working stderr, so we can print the error message */ if (saved_stderr >= 0) dup3(saved_stderr, STDERR_FILENO, 0); - log_error("Failed to execute process: %m"); - r = -errno; + log_error("Failed to execute process: %s", strerror(-r)); finish: if (fd >= 0)