aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYasuhiro Matsumoto <mattn.jp@gmail.com>2010-10-19 11:29:31 +1100
committerAndrew Gerrand <adg@golang.org>2010-10-19 11:29:31 +1100
commite64280ecfae776972bfb23103e6adb41b6607b4a (patch)
tree02b6cca5ed00b6b653d606e0d9ad078adca29741
parent91e69efb0d731f20010c9c5093a1cbc036eb9ab1 (diff)
downloadgo-e64280ecfae776972bfb23103e6adb41b6607b4a.tar.gz
go-e64280ecfae776972bfb23103e6adb41b6607b4a.zip
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
-rw-r--r--misc/goplay/goplay.go25
1 files changed, 17 insertions, 8 deletions
diff --git a/misc/goplay/goplay.go b/misc/goplay/goplay.go
index 0214806457..5923360f62 100644
--- a/misc/goplay/goplay.go
+++ b/misc/goplay/goplay.go
@@ -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 {