From 422a2887d7edca2103c1d068518269accb198ebb Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Tue, 27 Feb 2024 08:41:46 -0700 Subject: [PATCH] main: Ignore SIGPIPE when printing version In order to do a runtime feature check, `ostree --version` can be piped to `grep` or similar. However, if the read end of the pipe doesn't read all of the output, `ostree` will receive `SIGPIPE` when trying to write output. Ignore it so that `ostree` still exits successfully in that case. --- src/ostree/ot-main.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ostree/ot-main.c b/src/ostree/ot-main.c index d63cbd45ec..fa4eb53f2a 100644 --- a/src/ostree/ot-main.c +++ b/src/ostree/ot-main.c @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -510,6 +511,11 @@ ostree_option_context_parse (GOptionContext *context, const GOptionEntry *main_e if (opt_version) { + /* Ignore SIGPIPE so that piping the output to grep or similar + * doesn't cause the process to fail. */ + if (signal (SIGPIPE, SIG_IGN) == SIG_ERR) + return glnx_throw_errno_prefix (error, "Ignoring SIGPIPE"); + /* This should now be YAML, like `docker version`, so it's both nice to read * possible to parse */ g_auto (GStrv) features = g_strsplit (OSTREE_FEATURES, " ", -1);