diff options
Diffstat (limited to 'src/libutil')
-rw-r--r-- | src/libutil/util.cc | 10 | ||||
-rw-r--r-- | src/libutil/util.hh | 4 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc index aa9d99ec3353..f762b79c24da 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -927,6 +927,16 @@ void closeOnExec(int fd) } +void restoreSIGPIPE() +{ + struct sigaction act, oact; + act.sa_handler = SIG_DFL; + act.sa_flags = 0; + sigemptyset(&act.sa_mask); + if (sigaction(SIGPIPE, &act, &oact)) throw SysError("resetting SIGPIPE"); +} + + ////////////////////////////////////////////////////////////////////// diff --git a/src/libutil/util.hh b/src/libutil/util.hh index ad0d377a4f5e..64250c522a52 100644 --- a/src/libutil/util.hh +++ b/src/libutil/util.hh @@ -273,6 +273,10 @@ void closeMostFDs(const set<int> & exceptions); /* Set the close-on-exec flag for the given file descriptor. */ void closeOnExec(int fd); +/* Restore default handling of SIGPIPE, otherwise some programs will + randomly say "Broken pipe". */ +void restoreSIGPIPE(); + /* User interruption. */ |