From 901976cfc36959384c3088ed0e266308c8b7d599 Mon Sep 17 00:00:00 2001 From: Alex Brainman Date: Mon, 31 May 2010 13:43:40 +0200 Subject: [PATCH] implement os.FileInfo.*time_ns for windows R=golang-dev, adg CC=golang-dev https://golang.org/cl/1145044 --- src/pkg/os/stat_windows.go | 7 +++---- src/pkg/syscall/syscall_windows.go | 11 +++-------- src/pkg/syscall/zsyscall_windows_386.go | 2 +- src/pkg/syscall/ztypes_windows_386.go | 10 ++++++++++ 4 files changed, 17 insertions(+), 13 deletions(-) mode change 100755 => 100644 src/pkg/os/stat_windows.go diff --git a/src/pkg/os/stat_windows.go b/src/pkg/os/stat_windows.go old mode 100755 new mode 100644 index 2d5bf137c0..d7ff6faf4c --- a/src/pkg/os/stat_windows.go +++ b/src/pkg/os/stat_windows.go @@ -39,9 +39,8 @@ func setFileInfo(fi *FileInfo, name string, fa, sizehi, sizelo uint32, ctime, at fi.Size = int64(sizehi)<<32 + int64(sizelo) fi.Name = name fi.FollowedSymlink = false - // TODO(brainman): use ctime atime wtime to prime following FileInfo fields - fi.Atime_ns = 0 - fi.Mtime_ns = 0 - fi.Ctime_ns = 0 + fi.Atime_ns = atime.Microseconds() * 1000 + fi.Mtime_ns = wtime.Microseconds() * 1000 + fi.Ctime_ns = ctime.Microseconds() * 1000 return fi } diff --git a/src/pkg/syscall/syscall_windows.go b/src/pkg/syscall/syscall_windows.go index 984459dae2..5b3fe2d9dd 100644 --- a/src/pkg/syscall/syscall_windows.go +++ b/src/pkg/syscall/syscall_windows.go @@ -369,16 +369,11 @@ func Ftruncate(fd int, length int64) (errno int) { func Gettimeofday(tv *Timeval) (errno int) { var ft Filetime - // 100-nanosecond intervals since January 1, 1601 GetSystemTimeAsFileTime(&ft) - t := uint64(ft.HighDateTime)<<32 + uint64(ft.LowDateTime) - // convert into microseconds - t /= 10 - // change starting time to the Epoch (00:00:00 UTC, January 1, 1970) - t -= 11644473600000000 + ms := ft.Microseconds() // split into sec / usec - tv.Sec = int32(t / 1e6) - tv.Usec = int32(t) - tv.Sec + tv.Sec = int32(ms / 1e6) + tv.Usec = int32(ms) - tv.Sec return 0 } diff --git a/src/pkg/syscall/zsyscall_windows_386.go b/src/pkg/syscall/zsyscall_windows_386.go index 2032c14a65..bbe6b558a4 100644 --- a/src/pkg/syscall/zsyscall_windows_386.go +++ b/src/pkg/syscall/zsyscall_windows_386.go @@ -1,4 +1,4 @@ -// mksyscall_mingw.sh -l32 syscall_mingw.go zsyscall_mingw_386.go +// mksyscall_windows.sh -l32 syscall_windows.go syscall_windows_386.go // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT package syscall diff --git a/src/pkg/syscall/ztypes_windows_386.go b/src/pkg/syscall/ztypes_windows_386.go index d6f2d72090..9898db9361 100644 --- a/src/pkg/syscall/ztypes_windows_386.go +++ b/src/pkg/syscall/ztypes_windows_386.go @@ -113,6 +113,16 @@ type Filetime struct { HighDateTime uint32 } +func (ft *Filetime) Microseconds() int64 { + // 100-nanosecond intervals since January 1, 1601 + ms := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime) + // convert into microseconds + ms /= 10 + // change starting time to the Epoch (00:00:00 UTC, January 1, 1970) + ms -= 11644473600000000 + return ms +} + type Win32finddata struct { FileAttributes uint32 CreationTime Filetime -- 2.50.0