This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Only use setenv() on Solaris if it is available.
authorAndy Dougherty <doughera@lafayette.edu>
Fri, 25 Jul 2014 17:55:32 +0000 (13:55 -0400)
committerAndy Dougherty <doughera@lafayette.edu>
Fri, 25 Jul 2014 20:08:51 +0000 (16:08 -0400)
This is a followup to 07ad9e0e19891ec129e1a78e40a66ca19b51302d.
util.c:Perl_my_setenv() unconditionally used setenv() if #defined(__sun).
Solaris 8 had neither setenv() nor unsetenv(), so it failed.  Configure
does not currently check for setenv(), but the check for unsetenv()
is sufficient here since Solaris 9 and later have both.

util.c

diff --git a/util.c b/util.c
index 1f9a5b3..98b121f 100644 (file)
--- a/util.c
+++ b/util.c
@@ -2072,7 +2072,11 @@ Perl_my_setenv(pTHX_ const char *nam, const char *val)
         my_setenv_format(environ[i], nam, nlen, val, vlen);
     } else {
 # endif
-#   if defined(__CYGWIN__)|| defined(__SYMBIAN32__) || defined(__riscos__) || defined(__sun)
+    /* This next branch should only be called #if defined(HAS_SETENV), but
+       Configure doesn't test for that yet.  For Solaris, setenv() and unsetenv()
+       were introduced in Solaris 9, so testing for HAS UNSETENV is sufficient.
+    */
+#   if defined(__CYGWIN__)|| defined(__SYMBIAN32__) || defined(__riscos__) || (defined(__sun) && defined(HAS_UNSETENV))
 #       if defined(HAS_UNSETENV)
         if (val == NULL) {
             (void)unsetenv(nam);