diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-08-08 11:07:46 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-08-08 11:07:51 +0200 |
commit | 5f38317e59bdea80e2bb66389b250b985344ebdc (patch) | |
tree | fa1065c9b81036254c7248a61371eaa777553c96 /libavutil | |
parent | 1b2a5817fcd6bef184d6a32ddb62a9df1dd4fd0e (diff) | |
parent | 869b04e89154cd92d2bcfdabcecbe3217864c099 (diff) | |
download | ffmpeg-5f38317e59bdea80e2bb66389b250b985344ebdc.tar.gz |
Merge commit '869b04e89154cd92d2bcfdabcecbe3217864c099'
* commit '869b04e89154cd92d2bcfdabcecbe3217864c099':
libavutil: add avpriv_open() to open files with close-on-exec flag
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavutil')
-rw-r--r-- | libavutil/file.c | 25 | ||||
-rw-r--r-- | libavutil/internal.h | 5 |
2 files changed, 29 insertions, 1 deletions
diff --git a/libavutil/file.c b/libavutil/file.c index 41850f835b..33dcb7864f 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 <stdarg.h> #include <fcntl.h> #include <sys/stat.h> #if HAVE_UNISTD_H @@ -34,6 +36,27 @@ #include <windows.h> #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; diff --git a/libavutil/internal.h b/libavutil/internal.h index 4b85efd867..680d600451 100644 --- a/libavutil/internal.h +++ b/libavutil/internal.h @@ -198,4 +198,9 @@ void avpriv_report_missing_feature(void *avc, void avpriv_request_sample(void *avc, const char *msg, ...) av_printf_format(2, 3); +/** + * A wrapper for open() setting O_CLOEXEC. + */ +int avpriv_open(const char *filename, int flags, ...); + #endif /* AVUTIL_INTERNAL_H */ |