util: Added new tvh_pipe() helper routine.

This commit is contained in:
Adam Sutton 2012-11-27 13:28:34 +00:00
parent fa6d71a719
commit 517d01378a
2 changed files with 27 additions and 0 deletions

View file

@ -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);

View file

@ -1,6 +1,7 @@
#include <fcntl.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <unistd.h>
#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;
}