Commit 5bb92e54 by Ian Lance Taylor

libgo: Make os.setenv_c work on systems without setenv.

From-SVN: r174147
parent 65773087
...@@ -24,6 +24,9 @@ ...@@ -24,6 +24,9 @@
/* Define to 1 if you have the `random' function. */ /* Define to 1 if you have the `random' function. */
#undef HAVE_RANDOM #undef HAVE_RANDOM
/* Define to 1 if you have the `setenv' function. */
#undef HAVE_SETENV
/* Define to 1 if you have the `srandom' function. */ /* Define to 1 if you have the `srandom' function. */
#undef HAVE_SRANDOM #undef HAVE_SRANDOM
......
...@@ -14271,7 +14271,7 @@ else ...@@ -14271,7 +14271,7 @@ else
fi fi
for ac_func in srandom random strerror_r strsignal wait4 mincore for ac_func in srandom random strerror_r strsignal wait4 mincore setenv
do : do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
......
...@@ -431,7 +431,7 @@ esac ...@@ -431,7 +431,7 @@ esac
AC_CHECK_HEADERS(sys/mman.h syscall.h sys/epoll.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h) AC_CHECK_HEADERS(sys/mman.h syscall.h sys/epoll.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h)
AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes) AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
AC_CHECK_FUNCS(srandom random strerror_r strsignal wait4 mincore) AC_CHECK_FUNCS(srandom random strerror_r strsignal wait4 mincore setenv)
AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes) AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes) AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
Use of this source code is governed by a BSD-style Use of this source code is governed by a BSD-style
license that can be found in the LICENSE file. */ license that can be found in the LICENSE file. */
#include "config.h"
#include <stddef.h> #include <stddef.h>
#include <stdlib.h> #include <stdlib.h>
...@@ -25,24 +27,38 @@ setenv_c (struct __go_string k, struct __go_string v) ...@@ -25,24 +27,38 @@ setenv_c (struct __go_string k, struct __go_string v)
ks = k.__data; ks = k.__data;
kn = NULL; kn = NULL;
vs = v.__data;
vn = NULL;
#ifdef HAVE_SETENV
if (ks[k.__length] != 0) if (ks[k.__length] != 0)
{ {
kn = __go_alloc (k.__length + 1); kn = __go_alloc (k.__length + 1);
__builtin_memcpy (kn, k.__data, k.__length); __builtin_memcpy (kn, ks, k.__length);
ks = kn; ks = kn;
} }
vs = v.__data;
vn = NULL;
if (vs[v.__length] != 0) if (vs[v.__length] != 0)
{ {
vn = __go_alloc (v.__length + 1); vn = __go_alloc (v.__length + 1);
__builtin_memcpy (vn, v.__data, v.__length); __builtin_memcpy (vn, vs, v.__length);
vs = vn; vs = vn;
} }
setenv ((const char *) ks, (const char *) vs, 1); setenv ((const char *) ks, (const char *) vs, 1);
#else /* !defined(HAVE_SETENV) */
kn = malloc (k.__length + v.__length + 2);
__builtin_memcpy (kn, ks, k.__length);
kn[k.__length] = '=';
__builtin_memcpy (kn + k.__length + 1, vs, v.__length);
kn[k.__length + v.__length + 1] = '\0';
putenv ((char *) kn);
#endif /* !defined(HAVE_SETENV) */
if (kn != NULL) if (kn != NULL)
__go_free (kn); __go_free (kn);
if (vn != NULL) if (vn != NULL)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment