Browse Source

Add an autoconf test to make sure that memset(&ptr, 0, sizeof(ptr)) and ptr=NULL are equivalent

svn:r2536
Nick Mathewson 19 years ago
parent
commit
f619c4603e
3 changed files with 23 additions and 2 deletions
  1. 15 0
      configure.in
  2. 4 0
      src/common/util.h
  3. 4 2
      src/win32/orconfig.h

+ 15 - 0
configure.in

@@ -195,6 +195,21 @@ if test $tor_cv_unaligned_ok = yes; then
             [Define to 1 iff unaligned int access is allowed])
 fi
 
+# Now make sure that NULL can be represented as zero bytes.
+AC_CACHE_CHECK([whether memset(0) sets pointers to NULL], tor_cv_null_is_zero,
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[[#include <stdlib.h>
+int main () { char *p1,*p2; p1=NULL; memset(&p2,0,sizeof(p2));
+return memcmp(&p1,&p2,sizeof(char*)); }]])],
+       [tor_cv_null_is_zero=yes],
+       [tor_cv_null_is_zero=no],
+       [tor_cv_null_is_zero=cross])])
+
+if test $tor_cv_null_is_zero = yes; then
+  AC_DEFINE([NULL_REP_IS_ZERO_BYTES], 1,
+            [Define to 1 iff memset(0) sets pointers to NULL])
+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.

+ 4 - 0
src/common/util.h

@@ -20,6 +20,10 @@
 #include <time.h>
 #endif
 
+#ifndef NULL_REP_IS_ZERO_BYTES
+#error "It seems your platform does not represent NULL as zero. We can't cope."
+#endif
+
 #if _MSC_VER > 1300
 #include <winsock2.h>
 #include <ws2tcpip.h>

+ 4 - 2
src/win32/orconfig.h

@@ -124,11 +124,13 @@
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
+/* Define to 1 iff unaligned int access is allowed */
+#define NULL_REP_IS_ZERO_BYTES 1
+
 /* Name of package */
 #define PACKAGE "tor"
 
-/* Def
-ine to the address where bug reports for this package should be sent. */
+/* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
 /* Define to the full name of this package. */