aboutsummaryrefslogtreecommitdiff
path: root/libgo/go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2011-04-22 18:23:47 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2011-04-22 18:23:47 +0000
commit90eadacd1e57a500950b9727b061420d88262d6f (patch)
treea27876eac4e812e9dfce057f5322e9f7179de3c9 /libgo/go
parenteb601ae15ac9daf8381c0312c15bf7ae24b0ee38 (diff)
downloadgcc-90eadacd1e57a500950b9727b061420d88262d6f.zip
gcc-90eadacd1e57a500950b9727b061420d88262d6f.tar.gz
gcc-90eadacd1e57a500950b9727b061420d88262d6f.tar.bz2
re PR go/48503 (http/cgi FAILs if libgcc_s.so.1 isn't in default ld.so.1 search path)
PR go/48503 libgo: Bring over http/cgi environment inheritance patches. From-SVN: r172864
Diffstat (limited to 'libgo/go')
-rw-r--r--libgo/go/http/cgi/host.go34
1 files changed, 31 insertions, 3 deletions
diff --git a/libgo/go/http/cgi/host.go b/libgo/go/http/cgi/host.go
index 2272387..af082e1 100644
--- a/libgo/go/http/cgi/host.go
+++ b/libgo/go/http/cgi/host.go
@@ -25,20 +25,30 @@ import (
"os"
"path/filepath"
"regexp"
+ "runtime"
"strconv"
"strings"
)
var trailingPort = regexp.MustCompile(`:([0-9]+)$`)
+var osDefaultInheritEnv = map[string][]string{
+ "darwin": []string{"DYLD_LIBRARY_PATH"},
+ "freebsd": []string{"LD_LIBRARY_PATH"},
+ "hpux": []string{"LD_LIBRARY_PATH", "SHLIB_PATH"},
+ "linux": []string{"LD_LIBRARY_PATH"},
+ "windows": []string{"SystemRoot", "COMSPEC", "PATHEXT", "WINDIR"},
+}
+
// Handler runs an executable in a subprocess with a CGI environment.
type Handler struct {
Path string // path to the CGI executable
Root string // root URI prefix of handler or empty for "/"
- Env []string // extra environment variables to set, if any
- Logger *log.Logger // optional log for errors or nil to use log.Print
- Args []string // optional arguments to pass to child process
+ Env []string // extra environment variables to set, if any, as "key=value"
+ InheritEnv []string // environment variables to inherit from host, as "key"
+ Logger *log.Logger // optional log for errors or nil to use log.Print
+ Args []string // optional arguments to pass to child process
}
func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
@@ -110,6 +120,24 @@ func (h *Handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
env = append(env, h.Env...)
}
+ path := os.Getenv("PATH")
+ if path == "" {
+ path = "/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin"
+ }
+ env = append(env, "PATH="+path)
+
+ for _, e := range h.InheritEnv {
+ if v := os.Getenv(e); v != "" {
+ env = append(env, e+"="+v)
+ }
+ }
+
+ for _, e := range osDefaultInheritEnv[runtime.GOOS] {
+ if v := os.Getenv(e); v != "" {
+ env = append(env, e+"="+v)
+ }
+ }
+
cwd, pathBase := filepath.Split(h.Path)
if cwd == "" {
cwd = "."