From 622bcf9d46a763b7aaba75fa8421533bcbe4b981 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sun, 12 Nov 2017 13:11:58 -0500 Subject: exec: Recover from E2BIG --- util.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'util.c') diff --git a/util.c b/util.c index 0e7ec60..79bb2d2 100644 --- a/util.c +++ b/util.c @@ -119,6 +119,24 @@ int dup_cloexec(int fd) { #endif } +int pipe_cloexec(int pipefd[2]) { +#if __linux__ || BSD + return pipe2(pipefd, O_CLOEXEC); +#else + if (pipe(pipefd) != 0) { + return -1; + } + + if (fcntl(pipefd[0], F_SETFD, FD_CLOEXEC) == -1 || fcntl(pipefd[1], F_SETFD, FD_CLOEXEC) == -1) { + close(pipefd[1]); + close(pipefd[0]); + return -1; + } + + return 0; +#endif +} + char *xregerror(int err, const regex_t *regex) { size_t len = regerror(err, regex, NULL, 0); char *str = malloc(len); -- cgit v1.2.3