diff --git a/doc/progs/run b/doc/progs/run index 9d56049a885..7a6a603bb89 100755 --- a/doc/progs/run +++ b/doc/progs/run @@ -42,9 +42,13 @@ for i in \ $GC $i done +# Write to temporary file to avoid mingw bash bug. +TMPFILE="/tmp/gotest3" + function testit { $LD $1.$O - x=$(echo $(./$O.out $2 2>&1)) # extra echo canonicalizes + ./$O.out $2 2>&1 >"$TMPFILE" || true + x=$(echo $(cat "$TMPFILE")) # extra echo canonicalizes if [ "$x" != "$3" ] then echo $1 failed: '"'$x'"' is not '"'$3'"' @@ -53,7 +57,8 @@ function testit { function testitpipe { $LD $1.$O - x=$(echo $(./$O.out | $2 2>&1)) # extra echo canonicalizes + ./$O.out | $2 2>&1 >"$TMPFILE" || true + x=$(echo $(cat "$TMPFILE")) # extra echo canonicalizes if [ "$x" != "$3" ] then echo $1 failed: '"'$x'"' is not '"'$3'"' @@ -88,4 +93,4 @@ testit server1 "" "" testit eff_bytesize "" "1.00YB 9.09TB" testit eff_sequence "" "[-1 2 6 16 44]" -rm -f $O.out *.$O +rm -f $O.out $O.out.exe *.$O "$TMPFILE" diff --git a/src/cmd/ld/lib.c b/src/cmd/ld/lib.c index 37379e18633..456d41f5a14 100644 --- a/src/cmd/ld/lib.c +++ b/src/cmd/ld/lib.c @@ -70,7 +70,12 @@ libinit(void) // add goroot to the end of the libdir list. libdir[nlibdir++] = smprint("%s/pkg/%s_%s", goroot, goos, goarch); + // Unix doesn't like it when we write to a running (or, sometimes, + // recently run) binary, so remove the output file before writing it. + // On Windows 7, remove() can force the following create() to fail. +#ifndef _WIN32 remove(outfile); +#endif cout = create(outfile, 1, 0775); if(cout < 0) { diag("cannot create %s", outfile);