[release/1.4.14] cmd/utils: don't check for stderr redirect on windows
The redirect check did not work on Go 1.6 and below because Stat
returned an error for stdout and stderr. In Go 1.7 Stat works on stdout
but doesn't return anything meaningful, causing cmd/geth test failures
because the message is printed to stderr only. Fix it by printing to
stdout only.
(cherry picked from commit b04219fdbb)
			
			
This commit is contained in:
		
				
					committed by
					
						
						Péter Szilágyi
					
				
			
			
				
	
			
			
			
						parent
						
							03b2f56485
						
					
				
				
					commit
					25205d64d7
				
			@@ -23,6 +23,7 @@ import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/signal"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"runtime"
 | 
			
		||||
 | 
			
		||||
	"github.com/ethereum/go-ethereum/common"
 | 
			
		||||
	"github.com/ethereum/go-ethereum/core"
 | 
			
		||||
@@ -52,10 +53,16 @@ func openLogFile(Datadir string, filename string) *os.File {
 | 
			
		||||
// is redirected to a different file.
 | 
			
		||||
func Fatalf(format string, args ...interface{}) {
 | 
			
		||||
	w := io.MultiWriter(os.Stdout, os.Stderr)
 | 
			
		||||
	outf, _ := os.Stdout.Stat()
 | 
			
		||||
	errf, _ := os.Stderr.Stat()
 | 
			
		||||
	if outf != nil && errf != nil && os.SameFile(outf, errf) {
 | 
			
		||||
		w = os.Stderr
 | 
			
		||||
	if runtime.GOOS == "windows" {
 | 
			
		||||
		// The SameFile check below doesn't work on Windows.
 | 
			
		||||
		// stdout is unlikely to get redirected though, so just print there.
 | 
			
		||||
		w = os.Stdout
 | 
			
		||||
	} else {
 | 
			
		||||
		outf, _ := os.Stdout.Stat()
 | 
			
		||||
		errf, _ := os.Stderr.Stat()
 | 
			
		||||
		if outf != nil && errf != nil && os.SameFile(outf, errf) {
 | 
			
		||||
			w = os.Stderr
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Fprintf(w, "Fatal: "+format+"\n", args...)
 | 
			
		||||
	logger.Flush()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user