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);
#include <fcntl.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
+#include <unistd.h>
#include "tvheadend.h"
int
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;
+}