summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2004-03-21 04:14:06 +0000
committerNick Mathewson <nickm@torproject.org>2004-03-21 04:14:06 +0000
commitb69f5f3e1bdfc07a6b3c78b54f4f16de7ba9e934 (patch)
treee17f2931ef15fc743af2bac981d2488f6f18b1cd
parentf608b85ddf25ab5c48473d9d922fdf420e8a2507 (diff)
downloadtor-b69f5f3e1bdfc07a6b3c78b54f4f16de7ba9e934.tar.gz
tor-b69f5f3e1bdfc07a6b3c78b54f4f16de7ba9e934.zip
Add an autoconf test for whether unaligned int access is permitted.
It works on macos, and works correctly when I twiddle the test code to generate a spurious segfault. Will it work anywhere else? svn:r1329
-rw-r--r--configure.in13
-rw-r--r--src/common/util.c2
-rw-r--r--src/common/util.h2
3 files changed, 15 insertions, 2 deletions
diff --git a/configure.in b/configure.in
index efccf2f7f3..79b30b3144 100644
--- a/configure.in
+++ b/configure.in
@@ -163,6 +163,19 @@ AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(long long)
AC_CHECK_SIZEOF(__int64)
+# Now, let's see about alignment requirements
+AC_CACHE_CHECK([whether unaligned int access is allowed], tor_cv_unaligned_ok,
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[[int main () { char s[] = "A\x00\x00\x00\x00\x00\x00\x00";
+return *(int*)(&s[1]); }]])],
+ [tor_cv_unaligned_ok=yes],
+ [tor_cv_unaligned_ok=no],
+ [tor_cv_unaligned_ok=cross])])
+if test tor_cv_unaligned_ok = yes; then
+ AC_DEFINE([UNALIGNED_INT_ACCESS_OK], 1,
+ [Define to 1 iff unaligned int access is allowed])
+fi
+
# $prefix stores the value of the --prefix command line option, or
# NONE if the option wasn't set. In the case that it wasn't set, make
# it be the default, so that we can use it to expand directories now.
diff --git a/src/common/util.c b/src/common/util.c
index edd785cb87..80299c4e38 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -86,7 +86,7 @@ void tor_strlower(char *s)
}
}
-#ifndef UNALIGNED_ACCESS_OK
+#ifndef UNALIGNED_INT_ACCESS_OK
uint16_t get_uint16(char *cp)
{
uint16_t v;
diff --git a/src/common/util.h b/src/common/util.h
index f05a012b4d..f7ac07fca7 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -43,7 +43,7 @@ char *tor_strndup(const char *s, size_t n);
#define tor_free(p) do {if(p) {free(p); (p)=NULL;}} while(0)
void tor_strlower(char *s);
-#ifdef UNALIGNED_ACCESS_OK
+#ifdef UNALIGNED_INT_ACCESS_OK
/* XXX Not actually used yet, but would probably be faster on non-sun
* hardare.
*/