aboutsummaryrefslogtreecommitdiff
path: root/src/os/stat_windows.go
diff options
context:
space:
mode:
authorYasuhiro Matsumoto <mattn.jp@gmail.com>2016-03-18 13:00:26 +0900
committerAlex Brainman <alex.brainman@gmail.com>2016-03-24 09:22:33 +0000
commitebd67ba588eabd5bf968b5bd14dff21a1a1b1be4 (patch)
tree4491c8cae3ed0687bec8dc96a9b4f3a1473645d9 /src/os/stat_windows.go
parentddcf8d402a0f8b7556dad49005ff578244baa11c (diff)
downloadgo-ebd67ba588eabd5bf968b5bd14dff21a1a1b1be4.tar.xz
os: fix Stdin.Stat() on windows
If name is /dev/{stdin,stdout,stderr}, return fileInfo. Fixes #14853. Change-Id: Ibf7d1ae7b9f3dc43f6ed7c905ea2c5102e1971cc Reviewed-on: https://go-review.googlesource.com/20845 Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Diffstat (limited to 'src/os/stat_windows.go')
-rw-r--r--src/os/stat_windows.go16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/os/stat_windows.go b/src/os/stat_windows.go
index d65c58200f..b8f97ad60a 100644
--- a/src/os/stat_windows.go
+++ b/src/os/stat_windows.go
@@ -25,10 +25,19 @@ func (file *File) Stat() (FileInfo, error) {
if file.name == DevNull {
return &devNullStat, nil
}
+
+ ft, err := syscall.GetFileType(file.fd)
+ 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
+ }
+
var d syscall.ByHandleFileInformation
- e := syscall.GetFileInformationByHandle(syscall.Handle(file.fd), &d)
- if e != nil {
- return nil, &PathError{"GetFileInformationByHandle", file.name, e}
+ err = syscall.GetFileInformationByHandle(syscall.Handle(file.fd), &d)
+ if err != nil {
+ return nil, &PathError{"GetFileInformationByHandle", file.name, err}
}
return &fileStat{
name: basename(file.name),
@@ -43,6 +52,7 @@ func (file *File) Stat() (FileInfo, error) {
vol: d.VolumeSerialNumber,
idxhi: d.FileIndexHigh,
idxlo: d.FileIndexLow,
+ pipe: false,
}, nil
}