From: Adam Sutton Date: Tue, 27 Nov 2012 13:28:34 +0000 (+0000) Subject: util: Added new tvh_pipe() helper routine. X-Git-Tag: v3.5~257 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=517d01378a45cdab3a9aa9fe1afe8e740d89a7f9;p=thirdparty%2Ftvheadend.git util: Added new tvh_pipe() helper routine. --- diff --git a/src/tvheadend.h b/src/tvheadend.h index f03ae96d0..0ceb242c6 100644 --- a/src/tvheadend.h +++ b/src/tvheadend.h @@ -440,10 +440,18 @@ static inline const char *tvh_strbegins(const char *s1, const char *s2) return s1; } +typedef struct th_pipe +{ + int rd; + int wr; +} th_pipe_t; + int tvh_open(const char *pathname, int flags, mode_t mode); int tvh_socket(int domain, int type, int protocol); +int tvh_pipe(int flags, th_pipe_t *pipe); + void hexdump(const char *pfx, const uint8_t *data, int len); uint32_t tvh_crc32(uint8_t *data, size_t datalen, uint32_t crc); diff --git a/src/wrappers.c b/src/wrappers.c index ce38af946..fd374ec87 100644 --- a/src/wrappers.c +++ b/src/wrappers.c @@ -1,6 +1,7 @@ #include #include /* See NOTES */ #include +#include #include "tvheadend.h" int @@ -29,3 +30,21 @@ tvh_socket(int domain, int type, int protocol) pthread_mutex_unlock(&fork_lock); return fd; } + +int +tvh_pipe(int flags, th_pipe_t *p) +{ + int fd[2], err; + pthread_mutex_lock(&fork_lock); + err = pipe(fd); + if (err != -1) { + fcntl(fd[0], F_SETFD, fcntl(fd[0], F_GETFD) | FD_CLOEXEC); + fcntl(fd[1], F_SETFD, fcntl(fd[1], F_GETFD) | FD_CLOEXEC); + fcntl(fd[0], F_SETFL, fcntl(fd[0], F_GETFL) | flags); + fcntl(fd[1], F_SETFL, fcntl(fd[1], F_GETFL) | flags); + p->rd = fd[0]; + p->wr = fd[1]; + } + pthread_mutex_unlock(&fork_lock); + return err; +}