From 4737387d288d1e87e7c7df6203a42d6b1e88231e Mon Sep 17 00:00:00 2001 From: Marton Balint Date: Thu, 6 Sep 2018 20:46:16 +0200 Subject: [PATCH] avutil/file: allow mapping 0 byte files with av_file_map Signed-off-by: Marton Balint --- libavutil/file.c | 8 ++++++++ libavutil/file.h | 2 ++ libavutil/version.h | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libavutil/file.c b/libavutil/file.c index 24a86c3f35..d946085b28 100644 --- a/libavutil/file.c +++ b/libavutil/file.c @@ -85,6 +85,11 @@ int av_file_map(const char *filename, uint8_t **bufptr, size_t *size, } *size = off_size; + if (!*size) { + *bufptr = NULL; + goto out; + } + #if HAVE_MMAP ptr = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0); if (ptr == MAP_FAILED) { @@ -126,12 +131,15 @@ int av_file_map(const char *filename, uint8_t **bufptr, size_t *size, read(fd, *bufptr, *size); #endif +out: close(fd); return 0; } void av_file_unmap(uint8_t *bufptr, size_t size) { + if (!size) + return; #if HAVE_MMAP munmap(bufptr, size); #elif HAVE_MAPVIEWOFFILE diff --git a/libavutil/file.h b/libavutil/file.h index 8666c7b1d5..3ef4a6022c 100644 --- a/libavutil/file.h +++ b/libavutil/file.h @@ -33,6 +33,8 @@ * allocated buffer or map it with mmap() when available. * In case of success set *bufptr to the read or mmapped buffer, and * *size to the size in bytes of the buffer in *bufptr. + * Unlike mmap this function succeeds with zero sized files, in this + * case *bufptr will be set to NULL and *size will be set to 0. * The returned buffer must be released with av_file_unmap(). * * @param log_offset loglevel offset used for logging diff --git a/libavutil/version.h b/libavutil/version.h index 84409b1d69..f84ec89154 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -80,7 +80,7 @@ #define LIBAVUTIL_VERSION_MAJOR 56 #define LIBAVUTIL_VERSION_MINOR 19 -#define LIBAVUTIL_VERSION_MICRO 100 +#define LIBAVUTIL_VERSION_MICRO 101 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \