Exit(0)
        }
 
+       fi, err := Stdin.Stat()
+       if err != nil {
+               t.Fatal(err)
+       }
+       switch mode := fi.Mode(); {
+       case mode&ModeCharDevice != 0:
+       case mode&ModeNamedPipe != 0:
+       default:
+               t.Fatalf("unexpected Stdin mode (%v), want ModeCharDevice or ModeNamedPipe", mode)
+       }
+
        var cmd *osexec.Cmd
        if runtime.GOOS == "windows" {
                cmd = osexec.Command("cmd", "/c", "echo output | "+Args[0]+" -test.run=TestStatStdin")
 
        if err != nil {
                return nil, &PathError{"GetFileType", file.name, err}
        }
-       if ft == syscall.FILE_TYPE_PIPE {
-               return &fileStat{name: basename(file.name), pipe: true}, nil
+       switch ft {
+       case syscall.FILE_TYPE_PIPE, syscall.FILE_TYPE_CHAR:
+               return &fileStat{name: basename(file.name), filetype: ft}, nil
        }
 
        var d syscall.ByHandleFileInformation
                        FileSizeHigh:   d.FileSizeHigh,
                        FileSizeLow:    d.FileSizeLow,
                },
-               vol:   d.VolumeSerialNumber,
-               idxhi: d.FileIndexHigh,
-               idxlo: d.FileIndexLow,
-               pipe:  false,
+               filetype: ft,
+               vol:      d.VolumeSerialNumber,
+               idxhi:    d.FileIndexHigh,
+               idxlo:    d.FileIndexLow,
        }, nil
 }
 
 
 
 // A fileStat is the implementation of FileInfo returned by Stat and Lstat.
 type fileStat struct {
-       name string
-       sys  syscall.Win32FileAttributeData
-       pipe bool
+       name     string
+       sys      syscall.Win32FileAttributeData
+       filetype uint32 // what syscall.GetFileType returns
 
        // used to implement SameFile
        sync.Mutex
        if fs.sys.FileAttributes&syscall.FILE_ATTRIBUTE_REPARSE_POINT != 0 {
                m |= ModeSymlink
        }
-       if fs.pipe {
+       switch fs.filetype {
+       case syscall.FILE_TYPE_PIPE:
                m |= ModeNamedPipe
+       case syscall.FILE_TYPE_CHAR:
+               m |= ModeCharDevice
        }
        return m
 }