1
0
mirror of https://github.com/golang/go synced 2024-11-21 21:14:47 -07:00

goplay: fix to run under windows.

Fixes #1204.

R=golang-dev, brainman, Joe Poirier, alex.brainman, adg
CC=golang-dev, math-nuts
https://golang.org/cl/2532041
This commit is contained in:
Yasuhiro Matsumoto 2010-10-19 11:29:31 +11:00 committed by Andrew Gerrand
parent 91e69efb0d
commit e64280ecfa

View File

@ -74,15 +74,21 @@ func FrontPage(w http.ResponseWriter, req *http.Request) {
// and sends the program's output as the HTTP response.
func Compile(w http.ResponseWriter, req *http.Request) {
// x is the base name for .go, .6, executable files
x := "/tmp/compile" + strconv.Itoa(<-uniq)
x := os.TempDir() + "/compile" + strconv.Itoa(<-uniq)
src := x + ".go"
obj := x + "." + archChar
bin := x
if runtime.GOOS == "windows" {
bin += ".exe"
}
// write request Body to x.go
f, err := os.Open(x+".go", os.O_CREAT|os.O_WRONLY|os.O_TRUNC, 0666)
f, err := os.Open(src, os.O_CREAT|os.O_WRONLY|os.O_TRUNC, 0666)
if err != nil {
error(w, nil, err)
return
}
defer os.Remove(x + ".go")
defer os.Remove(src)
defer f.Close()
_, err = io.Copy(f, req.Body)
if err != nil {
@ -92,23 +98,23 @@ func Compile(w http.ResponseWriter, req *http.Request) {
f.Close()
// build x.go, creating x.6
out, err := run(archChar+"g", "-o", x+"."+archChar, x+".go")
defer os.Remove(x + "." + archChar)
out, err := run(archChar+"g", "-o", obj, src)
defer os.Remove(obj)
if err != nil {
error(w, out, err)
return
}
// link x.6, creating x (the program binary)
out, err = run(archChar+"l", "-o", x, x+"."+archChar)
defer os.Remove(x)
out, err = run(archChar+"l", "-o", bin, obj)
defer os.Remove(bin)
if err != nil {
error(w, out, err)
return
}
// run x
out, err = run(x)
out, err = run(bin)
if err != nil {
error(w, out, err)
}
@ -150,6 +156,9 @@ func run(cmd ...string) ([]byte, os.Error) {
io.Copy(&buf, p.Stdout)
w, err := p.Wait(0)
p.Close()
if err != nil {
return nil, err
}
// set the error return value if the program had a non-zero exit status
if !w.Exited() || w.ExitStatus() != 0 {