From 9c3f32def16bd7a72222dce6cd5216a8eef67759 Mon Sep 17 00:00:00 2001 From: upstream svn Date: Wed, 17 Sep 2014 15:00:48 +0000 Subject: [PATCH] Fix compilation if mmap is not reqested --- .svn-revision | 2 +- acinclude.m4 | 10 +++------- config.h.in | 8 +++++--- configure | 20 ++------------------ src/FileArea.cpp | 34 ++++++++++++++++++++-------------- 5 files changed, 31 insertions(+), 43 deletions(-) diff --git a/.svn-revision b/.svn-revision index 2809b4d0..2cf82893 100644 --- a/.svn-revision +++ b/.svn-revision @@ -1 +1 @@ -10842 +10843 diff --git a/acinclude.m4 b/acinclude.m4 index 716a129f..8c7305b5 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -655,10 +655,7 @@ AC_CACHE_CHECK([for working mmap], [ac_cv_func_mmap_fixed_mapped], * how to use it (BSD variants) */ #include - -#ifdef HAVE_SYS_MMAN_H #include -#endif #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); @@ -786,8 +783,10 @@ AC_DEFUN([MULE_CHECK_MMAP], [ MULE_ARG_ENABLE([mmap], [no], [enable using mapped memory if supported]) + AH_TEMPLATE([ENABLE_MMAP], [Define this variable to 1 if using mapped memory was requested. Note that defining it will alone not allow usage of mmap(), but unsetting it will completely disable its usage.]) + MULE_IF_ENABLED([mmap], [ - AC_CHECK_HEADERS([sys/mman.h]) + AC_DEFINE([ENABLE_MMAP], [1]) MULE_FUNC_MMAP AC_CHECK_FUNCS([munmap sysconf]) AS_IF([test $ac_cv_func_sysconf = yes], [ @@ -816,9 +815,6 @@ AC_DEFUN([MULE_CHECK_MMAP], ]) ]) ]) - ], [ - # fake the result of the test for munmap() for the gettext macros - ac_cv_func_munmap=no ]) ]) diff --git a/config.h.in b/config.h.in index 1026cd09..f6d906af 100644 --- a/config.h.in +++ b/config.h.in @@ -18,6 +18,11 @@ /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA +/* Define this variable to 1 if using mapped memory was requested. Note that + defining it will alone not allow usage of mmap(), but unsetting it will + completely disable its usage. */ +#undef ENABLE_MMAP + /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS @@ -357,9 +362,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_MMAN_H - /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MNTENT_H diff --git a/configure b/configure index 641e8901..8f336b57 100755 --- a/configure +++ b/configure @@ -12050,19 +12050,11 @@ fi - if test ${enable_mmap:-no} = yes; then : - for ac_header in sys/mman.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_MMAN_H 1 -_ACEOF -fi + if test ${enable_mmap:-no} = yes; then : -done + $as_echo "#define ENABLE_MMAP 1" >>confdefs.h for ac_func in getpagesize @@ -12113,10 +12105,7 @@ $ac_includes_default * how to use it (BSD variants) */ #include - -#ifdef HAVE_SYS_MMAN_H #include -#endif #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); @@ -12328,11 +12317,6 @@ rm -f core conftest.err conftest.$ac_objext \ fi -else - - # fake the result of the test for munmap() for the gettext macros - ac_cv_func_munmap=no - fi fi diff --git a/src/FileArea.cpp b/src/FileArea.cpp index 1da8b06d..09f2026d 100644 --- a/src/FileArea.cpp +++ b/src/FileArea.cpp @@ -39,23 +39,29 @@ #include "FileArea.h" // Interface declarations. #include "FileAutoClose.h" // Needed for CFileAutoClose -#ifdef HAVE_SYS_MMAN_H -#include +#ifndef ENABLE_MMAP +# define ENABLE_MMAP 0 #endif -#ifdef HAVE_MMAP -# if defined(HAVE_SYSCONF) && defined(HAVE__SC_PAGESIZE) +#define USE_MMAP (ENABLE_MMAP && defined(HAVE_MMAP) && defined(HAVE_SYSCONF) && (defined(HAVE__SC_PAGESIZE) || defined(HAVE__SC_PAGE_SIZE))) + +#if USE_MMAP + +#include + +#if defined(HAVE_SYSCONF) && defined(HAVE__SC_PAGESIZE) static const long gs_pageSize = sysconf(_SC_PAGESIZE); -# elif defined(HAVE_SYSCONF) && defined(HAVE__SC_PAGE_SIZE) +#elif defined(HAVE_SYSCONF) && defined(HAVE__SC_PAGE_SIZE) static const long gs_pageSize = sysconf(_SC_PAGE_SIZE); -# elif defined(HAVE_GETPAGESIZE) +#elif defined(HAVE_GETPAGESIZE) static const int gs_pageSize = getpagesize(); -# else -# error "Should use memory mapped files but don't know how to determine page size!" -# endif +#else +# error "Should use memory mapped files but don't know how to determine page size!" #endif -#if !defined(HAVE_SIGACTION) || !defined(SA_SIGINFO) || !defined(HAVE_MMAP) || defined(__UCLIBC__) +#endif /* USE_MMAP */ + +#if !defined(HAVE_SIGACTION) || !defined(SA_SIGINFO) || !USE_MMAP || defined(__UCLIBC__) class CFileAreaSigHandler { @@ -198,7 +204,7 @@ bool CFileArea::Close() delete[] m_buffer; m_buffer = NULL; } -#ifdef HAVE_MMAP +#if USE_MMAP if (m_mmap_buffer) { munmap(m_mmap_buffer, m_length); @@ -220,7 +226,7 @@ void CFileArea::ReadAt(CFileAutoClose& file, uint64 offset, size_t count) { Close(); -#ifdef HAVE_MMAP +#if USE_MMAP uint64 offEnd = offset + count; if (gs_pageSize > 0 && offEnd < 0x100000000ull) { uint64 offStart = offset & (~((uint64)gs_pageSize-1)); @@ -242,7 +248,7 @@ void CFileArea::ReadAt(CFileAutoClose& file, uint64 offset, size_t count) file.ReadAt(m_buffer, offset, count); } -#ifdef HAVE_MMAP +#if USE_MMAP void CFileArea::StartWriteAt(CFileAutoClose& file, uint64 offset, size_t count) { Close(); @@ -280,7 +286,7 @@ bool CFileArea::FlushAt(CFileAutoClose& file, uint64 offset, size_t count) if (!m_buffer) return false; -#ifdef HAVE_MMAP +#if USE_MMAP if (m_mmap_buffer) { if (msync(m_mmap_buffer, m_length, MS_SYNC)) return false; -- 2.11.4.GIT