diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-05-24 22:21:34 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-05-24 22:21:34 +0000 |
commit | 5bb92e54b78558ba9e105824b807325c45cd7644 (patch) | |
tree | a17569556c9f8bfb53e143af4d2f41428e34e44b /libgo | |
parent | 657730879110d20c9aa1de4f085a99e0ef6127de (diff) | |
download | gcc-5bb92e54b78558ba9e105824b807325c45cd7644.zip gcc-5bb92e54b78558ba9e105824b807325c45cd7644.tar.gz gcc-5bb92e54b78558ba9e105824b807325c45cd7644.tar.bz2 |
libgo: Make os.setenv_c work on systems without setenv.
From-SVN: r174147
Diffstat (limited to 'libgo')
-rw-r--r-- | libgo/config.h.in | 3 | ||||
-rwxr-xr-x | libgo/configure | 2 | ||||
-rw-r--r-- | libgo/configure.ac | 2 | ||||
-rw-r--r-- | libgo/runtime/go-setenv.c | 24 |
4 files changed, 25 insertions, 6 deletions
diff --git a/libgo/config.h.in b/libgo/config.h.in index 2976e97..d604392 100644 --- a/libgo/config.h.in +++ b/libgo/config.h.in @@ -24,6 +24,9 @@ /* Define to 1 if you have the `random' function. */ #undef HAVE_RANDOM +/* Define to 1 if you have the `setenv' function. */ +#undef HAVE_SETENV + /* Define to 1 if you have the `srandom' function. */ #undef HAVE_SRANDOM diff --git a/libgo/configure b/libgo/configure index 565bc89..4bf5a2e 100755 --- a/libgo/configure +++ b/libgo/configure @@ -14271,7 +14271,7 @@ else 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 : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/libgo/configure.ac b/libgo/configure.ac index 2451214..8a5ffb7 100644 --- a/libgo/configure.ac +++ b/libgo/configure.ac @@ -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) 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_WAIT4, test "$ac_cv_func_wait4" = yes) diff --git a/libgo/runtime/go-setenv.c b/libgo/runtime/go-setenv.c index 20f9939..9c93f52 100644 --- a/libgo/runtime/go-setenv.c +++ b/libgo/runtime/go-setenv.c @@ -4,6 +4,8 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. */ +#include "config.h" + #include <stddef.h> #include <stdlib.h> @@ -25,24 +27,38 @@ setenv_c (struct __go_string k, struct __go_string v) ks = k.__data; kn = NULL; + vs = v.__data; + vn = NULL; + +#ifdef HAVE_SETENV + if (ks[k.__length] != 0) { kn = __go_alloc (k.__length + 1); - __builtin_memcpy (kn, k.__data, k.__length); + __builtin_memcpy (kn, ks, k.__length); ks = kn; } - vs = v.__data; - vn = NULL; if (vs[v.__length] != 0) { vn = __go_alloc (v.__length + 1); - __builtin_memcpy (vn, v.__data, v.__length); + __builtin_memcpy (vn, vs, v.__length); vs = vn; } 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) __go_free (kn); if (vn != NULL) |