From 869b04e89154cd92d2bcfdabcecbe3217864c099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= Date: Tue, 6 Aug 2013 21:19:24 +0300 Subject: libavutil: add avpriv_open() to open files with close-on-exec flag Signed-off-by: Anton Khirnov --- libavutil/file.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'libavutil/file.c') diff --git a/libavutil/file.c b/libavutil/file.c index ce02487f35..add049d24b 100644 --- a/libavutil/file.c +++ b/libavutil/file.c @@ -18,8 +18,10 @@ #include "config.h" #include "file.h" +#include "internal.h" #include "log.h" #include "mem.h" +#include #include #include #if HAVE_UNISTD_H @@ -34,6 +36,27 @@ #include #endif +int avpriv_open(const char *filename, int flags, ...) +{ + int fd; + unsigned int mode = 0; + va_list ap; + + va_start(ap, flags); + if (flags & O_CREAT) + mode = va_arg(ap, unsigned int); + va_end(ap); + +#ifdef O_CLOEXEC + flags |= O_CLOEXEC; +#endif + + fd = open(filename, flags, mode); + if (fd != -1) + fcntl(fd, F_SETFD, FD_CLOEXEC); + return fd; +} + typedef struct { const AVClass *class; int log_offset; @@ -49,7 +72,7 @@ int av_file_map(const char *filename, uint8_t **bufptr, size_t *size, int log_offset, void *log_ctx) { FileLogContext file_log_ctx = { &file_log_ctx_class, log_offset, log_ctx }; - int err, fd = open(filename, O_RDONLY); + int err, fd = avpriv_open(filename, O_RDONLY); struct stat st; av_unused void *ptr; off_t off_size; -- cgit v1.2.3