1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

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()
This commit is contained in:
Michael Gran 2023-07-17 16:07:37 -07:00
parent b9a40cdc18
commit df225a87b9
2 changed files with 7 additions and 1 deletions

View file

@ -516,6 +516,7 @@ AC_CHECK_HEADERS([crt_externs.h])
# sendfile - non-POSIX, found in glibc # sendfile - non-POSIX, found in glibc
# pipe2 - non-POSIX, found in glibc (GNU/Linux and GNU/Hurd) # pipe2 - non-POSIX, found in glibc (GNU/Linux and GNU/Hurd)
# posix_spawn_file_actions_addclosefrom_np - glibc >= 2.34 # 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 \ AC_CHECK_FUNCS([DINFINITY DQNAN cexp chsize clog clog10 ctermid \
fesetround ftime ftruncate fchown fchownat fchmod fchdir readlinkat \ 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 \ strcoll_l strtod_l strtol_l newlocale uselocale utimensat \
fstatat futimens openat \ fstatat futimens openat \
sched_getaffinity sched_setaffinity sendfile pipe2 \ 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. # The newlib C library uses _NL_ prefixed locale langinfo constants.
AC_CHECK_DECLS([_NL_NUMERIC_GROUPING], [], [], [[#include <langinfo.h>]]) AC_CHECK_DECLS([_NL_NUMERIC_GROUPING], [], [], [[#include <langinfo.h>]])

View file

@ -1773,7 +1773,11 @@ SCM_DEFINE (scm_environ, "environ", 0, 1, 0,
{ {
/* Arrange to not use GC-allocated storage for what goes into /* Arrange to not use GC-allocated storage for what goes into
'environ' as libc might reallocate it behind our back. */ 'environ' as libc might reallocate it behind our back. */
#if HAVE_CLEARENV
clearenv (); clearenv ();
#else
environ = NULL;
#endif
while (!scm_is_null (env)) while (!scm_is_null (env))
{ {
scm_putenv (scm_car (env)); scm_putenv (scm_car (env));