mirror of
https://repo.or.cz/socat.git
synced 2025-01-08 22:12:33 +00:00
environ variable from C runtime is not declared on all systems
This commit is contained in:
parent
1f0fc69d60
commit
0ccd377a31
5 changed files with 38 additions and 0 deletions
2
CHANGES
2
CHANGES
|
@ -331,6 +331,8 @@ porting:
|
|||
including <linux/errqueue.h> and a weakness in the conditional code.
|
||||
Thanks to Michel Normand for reporting this issue.
|
||||
|
||||
Use 'environ' variable only when provided by runtime
|
||||
|
||||
new features:
|
||||
added option max-children that limits the number of concurrent child
|
||||
processes. Thanks to Sam Liddicott for providing the patch.
|
||||
|
|
4
compat.h
4
compat.h
|
@ -5,6 +5,10 @@
|
|||
#ifndef __compat_h_included
|
||||
#define __compat_h_included 1
|
||||
|
||||
#if !HAVE_DECL_ENVIRON && HAVE_VAR_ENVIRON
|
||||
extern char **environ;
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
/* I dont like this system dependent part, but it would be quite a challenge
|
||||
for configure */
|
||||
|
|
|
@ -53,6 +53,13 @@
|
|||
/* Define if you have the putenv function. */
|
||||
#undef HAVE_PUTENV
|
||||
|
||||
/* Define if your cc provides char **environ declaration.
|
||||
This implies HAVE_VAR_ENVIRON */
|
||||
#undef HAVE_DECL_ENVIRON
|
||||
|
||||
/* Define if you have the char **environ variable */
|
||||
#undef HAVE_VAR_ENVIRON
|
||||
|
||||
/* Define if you have the select function. */
|
||||
#undef HAVE_SELECT
|
||||
|
||||
|
|
23
configure.in
23
configure.in
|
@ -1916,6 +1916,29 @@ if test -n "$WITH_FIPS"; then
|
|||
fi
|
||||
AC_SUBST(FIPSLD_CC)
|
||||
|
||||
# autoconf does not seem to provide AC_CHECK_VAR or so
|
||||
# thus we have to check by foot
|
||||
AC_MSG_CHECKING(for declaration of environ)
|
||||
AC_CACHE_VAL(sc_cv_decl_environ,
|
||||
[AC_TRY_COMPILE([#include <unistd.h>],[char **s = environ;],
|
||||
[sc_cv_decl_environ=yes],
|
||||
[sc_cv_decl_environ=no])])
|
||||
if test $sc_cv_decl_environ = yes; then
|
||||
AC_DEFINE(HAVE_DECL_ENVIRON)
|
||||
fi
|
||||
AC_MSG_RESULT($sc_cv_decl_environ)
|
||||
|
||||
# on some systems environ exists but not the declaration
|
||||
AC_MSG_CHECKING(for var environ)
|
||||
AC_CACHE_VAL(sc_cv_var_environ,
|
||||
[AC_TRY_COMPILE([],[extern char **environ; char **s = environ;],
|
||||
[sc_cv_var_environ=yes],
|
||||
[sc_cv_var_environ=no])])
|
||||
if test $sc_cv_var_environ = yes; then
|
||||
AC_DEFINE(HAVE_VAR_ENVIRON)
|
||||
fi
|
||||
AC_MSG_RESULT($sc_cv_var_environ)
|
||||
|
||||
# allow BUILD_DATE to be externally set for build reproducibility
|
||||
if test "$BUILD_DATE"; then
|
||||
AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"])
|
||||
|
|
|
@ -1288,6 +1288,7 @@ static int openssl_delete_cert_info(void) {
|
|||
for (i = 0; i < l; ++i) envprefix[i] = toupper(envprefix[i]);
|
||||
strncat(envprefix+l, "_OPENSSL_", XIO_ENVNAMELEN-l-1);
|
||||
|
||||
#if HAVE_VAR_ENVIRON
|
||||
entry = (const char **)environ;
|
||||
while (*entry != NULL) {
|
||||
if (!strncmp(*entry, envprefix, strlen(envprefix))) {
|
||||
|
@ -1299,6 +1300,7 @@ static int openssl_delete_cert_info(void) {
|
|||
++entry;
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_VAR_ENVIRON */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue