| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- // Log the panic under windows to the log file
- //
- // Code from minix, via
- //
- // http://play.golang.org/p/kLtct7lSUg
- //+build windows
- package tools
- import (
- "log"
- "os"
- "syscall"
- )
- var (
- kernel32 = syscall.MustLoadDLL("kernel32.dll")
- procSetStdHandle = kernel32.MustFindProc("SetStdHandle")
- )
- func setStdHandle(stdhandle int32, handle syscall.Handle) error {
- r0, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0)
- if r0 == 0 {
- if e1 != 0 {
- return error(e1)
- }
- return syscall.EINVAL
- }
- return nil
- }
- // redirectStderr to the file passed in
- func RedirectStderr(f *os.File) {
- err := setStdHandle(syscall.STD_ERROR_HANDLE, syscall.Handle(f.Fd()))
- if err != nil {
- log.Printf("Failed to redirect stderr to file: %v", err)
- }
- // SetStdHandle does not affect prior references to stderr
- os.Stderr = f
- }
|