summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2016-11-22 18:29:50 -0500
committerNick Mathewson <nickm@torproject.org>2016-11-22 18:29:50 -0500
commit4614f8e6816d559f8fbe9ae0f42d751d3fb95c77 (patch)
treef463cbcd67ae3350a9142eb81b0da3d7f87eb140
parentc35d481f56284ebeafc2860eed27c9833d631983 (diff)
parent8f465808a06c739d8f81d04f6ed07fad40cacc76 (diff)
downloadtor-4614f8e6816d559f8fbe9ae0f42d751d3fb95c77.tar.gz
tor-4614f8e6816d559f8fbe9ae0f42d751d3fb95c77.zip
Merge remote-tracking branch 'teor/fix-mingw-pagesize'
-rw-r--r--changes/bug205304
-rw-r--r--configure.ac8
-rw-r--r--src/common/compat.c10
3 files changed, 21 insertions, 1 deletions
diff --git a/changes/bug20530 b/changes/bug20530
new file mode 100644
index 0000000000..c21d5fbd34
--- /dev/null
+++ b/changes/bug20530
@@ -0,0 +1,4 @@
+ o Minor Fixes (Windows):
+ - Check for getpagesize before using it to mmap files. This fixes
+ compilation in some MinGW environments. Fixes bug 20530; bugfix on
+ commit bf72878 in tor-0.1.2.1-alpha, reported by "ice".
diff --git a/configure.ac b/configure.ac
index 27d7577a5a..8ee34070a3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1410,6 +1410,14 @@ AC_CHECK_DECLS([mlockall], , , [
#include <sys/mman.h>
#endif])
+# Some MinGW environments don't have getpagesize in unistd.h. We don't use
+# AC_CHECK_FUNCS(getpagesize), because other environments rename getpagesize
+# using macros
+AC_CHECK_DECLS([getpagesize], , , [
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif])
+
# Allow user to specify an alternate syslog facility
AC_ARG_WITH(syslog-facility,
AS_HELP_STRING(--with-syslog-facility=LOG, [syslog facility to use (default=LOG_DAEMON)]),
diff --git a/src/common/compat.c b/src/common/compat.c
index 8d6a491c42..ebf05f59e1 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -204,7 +204,15 @@ tor_rename(const char *path_old, const char *path_new)
sandbox_intern_string(path_new));
}
-#if defined(HAVE_SYS_MMAN_H) || defined(RUNNING_DOXYGEN)
+/* Some MinGW builds have sys/mman.h, but not the corresponding symbols.
+ * Other configs rename the symbols using macros (including getpagesize).
+ * So check for sys/mman.h and unistd.h, and a getpagesize declaration. */
+#if (defined(HAVE_SYS_MMAN_H) && defined(HAVE_UNISTD_H) && \
+ defined(HAVE_DECL_GETPAGESIZE))
+#define COMPAT_HAS_MMAN_AND_PAGESIZE
+#endif
+
+#if defined(COMPAT_HAS_MMAN_AND_PAGESIZE) || defined(RUNNING_DOXYGEN)
/** Try to create a memory mapping for <b>filename</b> and return it. On
* failure, return NULL. Sets errno properly, using ERANGE to mean
* "empty file". */