mike121 pushed a commit to branch main
in repository guile.
commit df225a87b91db1785a24fb5bed599286054dcf70
Author: Michael Gran <[email protected]>
AuthorDate: Mon Jul 17 16:07:37 2023 -0700
Test for clearenv function
clearenv() may not be provided by non-glibc systems. As a fallback,
just set environ to NULL.
* libguile/posix.c (scm_environ)[!HAVE_CLEARENV]: add fallback logic
for clearenv()
---
configure.ac | 4 +++-
libguile/posix.c | 4 ++++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index f644dd2c5..d0a2dc79b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -516,6 +516,7 @@ AC_CHECK_HEADERS([crt_externs.h])
# sendfile - non-POSIX, found in glibc
# pipe2 - non-POSIX, found in glibc (GNU/Linux and GNU/Hurd)
# posix_spawn_file_actions_addclosefrom_np - glibc >= 2.34
+#...clearenv - non-POSIX, found in glibc
#
AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid \
fesetround ftime ftruncate fchown fchownat fchmod fchdir readlinkat \
@@ -530,7 +531,8 @@ AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10
ctermid \
strcoll_l strtod_l strtol_l newlocale uselocale utimensat \
fstatat futimens openat \
sched_getaffinity sched_setaffinity sendfile pipe2 \
- posix_spawn_file_actions_addclosefrom_np])
+ posix_spawn_file_actions_addclosefrom_np \
+ clearenv])
# The newlib C library uses _NL_ prefixed locale langinfo constants.
AC_CHECK_DECLS([_NL_NUMERIC_GROUPING], [], [], [[#include <langinfo.h>]])
diff --git a/libguile/posix.c b/libguile/posix.c
index 4ca8d5ff7..6ce78ee18 100644
--- a/libguile/posix.c
+++ b/libguile/posix.c
@@ -1773,7 +1773,11 @@ SCM_DEFINE (scm_environ, "environ", 0, 1, 0,
{
/* Arrange to not use GC-allocated storage for what goes into
'environ' as libc might reallocate it behind our back. */
+#if HAVE_CLEARENV
clearenv ();
+#else
+ environ = NULL;
+#endif
while (!scm_is_null (env))
{
scm_putenv (scm_car (env));