X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjournal%2Fcat.c;h=02b75642a33ab9fb3de3e30c20fea8607db73909;hb=020d59000f86b3d98be763eaee6a2671f0427e46;hp=6745f1ce0ac18c4ecb3ffa7a5a7d76e301aad49b;hpb=755a02c6800246e7e293897d0594fe7e7531ba59;p=elogind.git diff --git a/src/journal/cat.c b/src/journal/cat.c index 6745f1ce0..02b75642a 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 . ***/ @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include @@ -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,11 +59,11 @@ 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 }, - { NULL, 0, NULL, 0 } + {} }; int c; @@ -76,12 +76,10 @@ static int parse_argv(int argc, char *argv[]) { switch (c) { case 'h': - help(); - return 0; + return help(); case ARG_VERSION: puts(PACKAGE_STRING); - puts(DISTRIBUTION); puts(SYSTEMD_FEATURES); return 0; @@ -91,10 +89,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; @@ -118,9 +114,11 @@ static int parse_argv(int argc, char *argv[]) { break; } - default: - log_error("Unknown option code %c", c); + case '?': return -EINVAL; + + default: + assert_not_reached("Unhandled option"); } } @@ -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)