summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--lib/dpkg/parse.c6
-rw-r--r--m4/dpkg-funcs.m416
3 files changed, 21 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index 6e8c6b9bb..bf9a7b4ef 100644
--- a/configure.ac
+++ b/configure.ac
@@ -127,6 +127,8 @@ DPKG_CHECK_COMPAT_FUNCS([getopt getopt_long obstack_free \
AC_CHECK_FUNCS([strtoul isascii bcopy memcpy lchown setsid getdtablesize \
posix_fadvise])
+DPKG_MMAP
+
AC_DEFINE(LIBDPKG_VOLATILE_API, 1, [Acknowledge the volatility of the API.])
DPKG_COMPILER_WARNINGS
DPKG_COMPILER_OPTIMISATIONS
diff --git a/lib/dpkg/parse.c b/lib/dpkg/parse.c
index c439a7f57..b8ee07a7c 100644
--- a/lib/dpkg/parse.c
+++ b/lib/dpkg/parse.c
@@ -23,7 +23,7 @@
#include <sys/types.h>
#include <sys/stat.h>
-#ifdef HAVE_MMAP
+#ifdef USE_MMAP
#include <sys/mman.h>
#endif
@@ -121,7 +121,7 @@ int parsedb(const char *filename, enum parsedbflags flags,
ohshite(_("can't stat package info file `%.255s'"),filename);
if (st.st_size > 0) {
-#ifdef HAVE_MMAP
+#ifdef USE_MMAP
dataptr = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
if (dataptr == MAP_FAILED)
ohshite(_("can't mmap package info file `%.255s'"),filename);
@@ -386,7 +386,7 @@ int parsedb(const char *filename, enum parsedbflags flags,
ps.lno++;
}
if (data != NULL) {
-#ifdef HAVE_MMAP
+#ifdef USE_MMAP
munmap(data, st.st_size);
#else
free(data);
diff --git a/m4/dpkg-funcs.m4 b/m4/dpkg-funcs.m4
index 188fa6bd8..3f0cf5261 100644
--- a/m4/dpkg-funcs.m4
+++ b/m4/dpkg-funcs.m4
@@ -68,6 +68,22 @@ AS_IF([test "x$dpkg_cv_c99_snprintf" = "xyes"],
AM_CONDITIONAL(HAVE_C99_SNPRINTF, [test "x$dpkg_cv_c99_snprintf" = "xyes"])
])# DPKG_FUNC_C99_SNPRINTF
+# DPKG_MMAP
+# ---------
+# Define USE_MMAP if mmap() is available and it was requested
+AC_DEFUN([DPKG_MMAP],
+[
+ AC_ARG_ENABLE([mmap],
+ AS_HELP_STRING([--enable-mmap],
+ [enable usage of unrealiable mmap if available]),
+ [
+ AC_CHECK_FUNCS([mmap])
+ AC_DEFINE(USE_MMAP, 1, [Use unreliable mmap support])
+ ],
+ []
+ )
+])
+
# DPKG_FUNC_ASYNC_SYNC
# --------------------
# Define HAVE_ASYNC_SYNC if sync() is asynchronous