summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2016-12-16 12:16:52 -0500
committerNick Mathewson <nickm@torproject.org>2016-12-16 12:16:52 -0500
commit2a00110e5bd3592ff69e659681b9294285a98dd0 (patch)
treed262b5abd118dcebd6a11eb6fc0f3d3aa1f2094c
parent79a24750ba8b3b1efc87c5b43d91229b6478ef82 (diff)
downloadtor-2a00110e5bd3592ff69e659681b9294285a98dd0.tar.gz
tor-2a00110e5bd3592ff69e659681b9294285a98dd0.zip
Revert "Stop checking whether environ is declared."
This reverts commit 954eeda619a59dae76144ad69967f0ed7341b564. Apparently, OpenBSD is what expects you to declare environ yourself. So 19142 is a wontfix.
-rw-r--r--changes/191423
-rw-r--r--configure.ac16
-rw-r--r--src/common/compat.c9
3 files changed, 25 insertions, 3 deletions
diff --git a/changes/19142 b/changes/19142
deleted file mode 100644
index 685bbbcc26..0000000000
--- a/changes/19142
+++ /dev/null
@@ -1,3 +0,0 @@
- o Removed features:
- - We no longer attempt to build on systems where 'environ' is not
- declared in the C headers. Closes ticket 19142.
diff --git a/configure.ac b/configure.ac
index 552465c77c..fea884b2f4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1535,6 +1535,17 @@ int main(int c, char **v) { puts(__FUNCTION__); }])],
tor_cv_have_FUNCTION_macro=yes,
tor_cv_have_FUNCTION_macro=no))
+AC_CACHE_CHECK([whether we have extern char **environ already declared],
+ tor_cv_have_environ_declared,
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <stdlib.h>
+int main(int c, char **v) { char **t = environ; }])],
+ tor_cv_have_environ_declared=yes,
+ tor_cv_have_environ_declared=no))
+
if test "$tor_cv_have_func_macro" = "yes"; then
AC_DEFINE(HAVE_MACRO__func__, 1, [Defined if the compiler supports __func__])
fi
@@ -1548,6 +1559,11 @@ if test "$tor_cv_have_FUNCTION_macro" = "yes"; then
[Defined if the compiler supports __FUNCTION__])
fi
+if test "$tor_cv_have_environ_declared" = "yes"; then
+ AC_DEFINE(HAVE_EXTERN_ENVIRON_DECLARED, 1,
+ [Defined if we have extern char **environ already declared])
+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/compat.c b/src/common/compat.c
index 97d1fafbbb..ebf05f59e1 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -2390,6 +2390,15 @@ make_path_absolute(char *fname)
#endif
}
+#ifndef HAVE__NSGETENVIRON
+#ifndef HAVE_EXTERN_ENVIRON_DECLARED
+/* Some platforms declare environ under some circumstances, others don't. */
+#ifndef RUNNING_DOXYGEN
+extern char **environ;
+#endif
+#endif
+#endif
+
/** Return the current environment. This is a portable replacement for
* 'environ'. */
char **