#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
-#include <sys/fcntl.h>
+#include <fcntl.h>
-#include <systemd/sd-journal.h>
+#include "systemd/sd-journal.h"
#include "util.h"
#include "build.h"
static int arg_priority = LOG_INFO;
static bool arg_level_prefix = true;
-static int help(void) {
-
+static void help(void) {
printf("%s [OPTIONS...] {COMMAND} ...\n\n"
"Execute process with stdout/stderr connected to the journal.\n\n"
" -h --help Show this help\n"
" --version Show package version\n"
" -t --identifier=STRING Set syslog identifier\n"
" -p --priority=PRIORITY Set priority value (0..7)\n"
- " --level-prefix=BOOL Control whether level prefix shall be parsed\n",
- program_invocation_short_name);
-
- return 0;
+ " --level-prefix=BOOL Control whether level prefix shall be parsed\n"
+ , program_invocation_short_name);
}
static int parse_argv(int argc, char *argv[]) {
{ "identifier", required_argument, NULL, 't' },
{ "priority", required_argument, NULL, 'p' },
{ "level-prefix", required_argument, NULL, ARG_LEVEL_PREFIX },
- { NULL, 0, NULL, 0 }
+ {}
};
int c;
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "+ht:p:", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "+ht:p:", options, NULL)) >= 0)
switch (c) {
case ARG_VERSION:
puts(PACKAGE_STRING);
- puts(DISTRIBUTION);
puts(SYSTEMD_FEATURES);
return 0;
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;
break;
}
- default:
- log_error("Unknown option code %c", c);
+ case '?':
return -EINVAL;
+
+ default:
+ assert_not_reached("Unhandled option");
}
- }
return 1;
}
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_errno(fd, "Failed to create stream fd: %m");
r = fd;
goto finish;
}
if (dup3(fd, STDOUT_FILENO, 0) < 0 ||
dup3(fd, STDERR_FILENO, 0) < 0) {
- log_error("Failed to duplicate fd: %m");
+ log_error_errno(errno, "Failed to duplicate fd: %m");
r = -errno;
goto finish;
}
if (fd >= 3)
- close_nointr_nofail(fd);
+ safe_close(fd);
fd = -1;
if (saved_stderr >= 0)
dup3(saved_stderr, STDERR_FILENO, 0);
- log_error("Failed to execute process: %s", strerror(-r));
+ log_error_errno(r, "Failed to execute process: %m");
finish:
- if (fd >= 0)
- close_nointr_nofail(fd);
-
- if (saved_stderr >= 0)
- close_nointr_nofail(saved_stderr);
+ safe_close(fd);
+ safe_close(saved_stderr);
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
}