]> granicus.if.org Git - libevent/commitdiff
Add check of mmap64 function and use it when available rather that mmap
authorDmitry Ilyin <dima@doty.ru>
Sun, 7 Aug 2022 10:51:48 +0000 (13:51 +0300)
committerAzat Khuzhin <azat@libevent.org>
Mon, 8 Aug 2022 22:18:10 +0000 (00:18 +0200)
There can be issues on 32-bit architectures to mmap 2+GiB file, and to
make this portable between different version of glibc, mmap64 was
prefered over _FILE_OFFSET_BITS

CMakeLists.txt
buffer.c
configure.ac
event-config.h.cmake

index a4529032faaa3e1d12e8d5383c82a3f784487aed..5016840ca27752cfb655d9e2a65b140dd7fcab6d 100644 (file)
@@ -545,6 +545,7 @@ else()
         unsetenv
         setrlimit
         gethostbyname_r
+        mmap64
     )
     if (APPLE)
         list(APPEND SYMBOLS_TO_CHECK mach_absolute_time)
index fcbcba3c2614bd614051c4c38dc8f8f91ae11277..825f6a29e8af8ed4d6fe597197e7a8b7f1e92563 100644 (file)
--- a/buffer.c
+++ b/buffer.c
@@ -3080,7 +3080,11 @@ evbuffer_file_segment_materialize(struct evbuffer_file_segment *seg)
                        offset_leftover = offset % page_size;
                        offset_rounded = offset - offset_leftover;
                }
+#if defined(EVENT__HAVE_MMAP64)
+               mapped = mmap64(NULL, length + offset_leftover,
+#else
                mapped = mmap(NULL, length + offset_leftover,
+#endif
                    PROT_READ,
 #ifdef MAP_NOCACHE
                    MAP_NOCACHE | /* ??? */
index f90f2105cdb357a07c2378cde62c8762a22b70bd..0d7e098ce16f6051bd3faa21dc242600716d56d0 100644 (file)
@@ -272,7 +272,7 @@ dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_INLINE
 
 dnl Checks for library functions.
-AC_CHECK_FUNCS([accept4 arc4random arc4random_buf arc4random_addrandom eventfd epoll_create1 fcntl getegid geteuid getifaddrs gettimeofday issetugid mach_absolute_time mmap nanosleep pipe pipe2 putenv sendfile setenv setrlimit sigaction signal strsignal strlcpy strsep strtok_r strtoll sysctl timerfd_create umask unsetenv usleep getrandom ])
+AC_CHECK_FUNCS([accept4 arc4random arc4random_buf arc4random_addrandom eventfd epoll_create1 fcntl getegid geteuid getifaddrs gettimeofday issetugid mach_absolute_time mmap nanosleep pipe pipe2 putenv sendfile setenv setrlimit sigaction signal strsignal strlcpy strsep strtok_r strtoll sysctl timerfd_create umask unsetenv usleep getrandom mmap64])
 
 AS_IF([test "$bwin32" = "true"],
   AC_CHECK_FUNCS(_gmtime64_s, , [AC_CHECK_FUNCS(_gmtime64)])
index 4a6267017c958926b6de55a094fae9a1e7363d36..a52e7136ea9dd9d1396c68e21ee30e64e5736bd4 100644 (file)
 /* Define to 1 if you have the `mmap' function. */
 #cmakedefine EVENT__HAVE_MMAP 1
 
+/* Define to 1 if you have the `mmap64' function. */
+#cmakedefine EVENT__HAVE_MMAP64 1
+
 /* Define to 1 if you have the `nanosleep' function. */
 #cmakedefine EVENT__HAVE_NANOSLEEP 1