summaryrefslogtreecommitdiff
path: root/vendor/modernc.org/libc/libc_windows_386.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/modernc.org/libc/libc_windows_386.go')
-rw-r--r--vendor/modernc.org/libc/libc_windows_386.go35
1 files changed, 35 insertions, 0 deletions
diff --git a/vendor/modernc.org/libc/libc_windows_386.go b/vendor/modernc.org/libc/libc_windows_386.go
index d50f05fa3..d48e6f65c 100644
--- a/vendor/modernc.org/libc/libc_windows_386.go
+++ b/vendor/modernc.org/libc/libc_windows_386.go
@@ -11,6 +11,7 @@ import (
"unsafe"
"modernc.org/libc/errno"
+ "modernc.org/libc/sys/stat"
"modernc.org/libc/sys/types"
)
@@ -546,3 +547,37 @@ func XDefWindowProcW(t *TLS, _ ...interface{}) int32 {
func XSendMessageTimeoutW(t *TLS, _ ...interface{}) int32 {
panic(todo(""))
}
+
+// int _fstat(
+//
+// int fd,
+// struct __stat *buffer
+//
+// );
+func X_fstat(t *TLS, fd int32, buffer uintptr) int32 {
+ f, ok := fdToFile(fd)
+ if !ok {
+ t.setErrno(EBADF)
+ return -1
+ }
+
+ var d syscall.ByHandleFileInformation
+ err := syscall.GetFileInformationByHandle(f.Handle, &d)
+ if err != nil {
+ t.setErrno(EBADF)
+ return -1
+ }
+
+ var bStat32 = (*stat.X_stat32)(unsafe.Pointer(buffer))
+ var accessTime = int64(d.LastAccessTime.HighDateTime)<<32 + int64(d.LastAccessTime.LowDateTime)
+ bStat32.Fst_atime = int32(WindowsTickToUnixSeconds(accessTime))
+ var modTime = int64(d.LastWriteTime.HighDateTime)<<32 + int64(d.LastWriteTime.LowDateTime)
+ bStat32.Fst_mtime = int32(WindowsTickToUnixSeconds(modTime))
+ var crTime = int64(d.CreationTime.HighDateTime)<<32 + int64(d.CreationTime.LowDateTime)
+ bStat32.Fst_ctime = int32(WindowsTickToUnixSeconds(crTime))
+ var fSz = int64(d.FileSizeHigh)<<32 + int64(d.FileSizeLow)
+ bStat32.Fst_size = int32(fSz)
+ bStat32.Fst_mode = WindowsAttrbiutesToStat(d.FileAttributes)
+
+ return 0
+}