mirror of
https://github.com/golang/go
synced 2024-11-22 01:44:40 -07:00
syscall: implement windows version of Fsync
R=golang-dev, rsc CC=golang-dev https://golang.org/cl/4158043
This commit is contained in:
parent
e6f9b2f110
commit
5e83d40904
@ -158,6 +158,7 @@ func NewCallback(fn interface{}) uintptr
|
||||
//sys CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, errno int) [failretval==nil] = shell32.CommandLineToArgvW
|
||||
//sys LocalFree(hmem uint32) (handle uint32, errno int) [failretval!=0]
|
||||
//sys SetHandleInformation(handle int32, mask uint32, flags uint32) (ok bool, errno int)
|
||||
//sys FlushFileBuffers(handle int32) (ok bool, errno int)
|
||||
|
||||
// syscall interface implementation for other packages
|
||||
|
||||
@ -478,6 +479,13 @@ func Utimes(path string, tv []Timeval) (errno int) {
|
||||
return 0
|
||||
}
|
||||
|
||||
func Fsync(fd int) (errno int) {
|
||||
if ok, e := FlushFileBuffers(int32(fd)); !ok {
|
||||
return e
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// net api calls
|
||||
|
||||
//sys WSAStartup(verreq uint32, data *WSAData) (sockerrno int) = wsock32.WSAStartup
|
||||
@ -732,9 +740,6 @@ func Chown(path string, uid int, gid int) (errno int) { return EWINDOWS }
|
||||
func Lchown(path string, uid int, gid int) (errno int) { return EWINDOWS }
|
||||
func Fchown(fd int, uid int, gid int) (errno int) { return EWINDOWS }
|
||||
|
||||
// TODO(brainman): use FlushFileBuffers Windows api to implement Fsync.
|
||||
func Fsync(fd int) (errno int) { return EWINDOWS }
|
||||
|
||||
func Getuid() (uid int) { return -1 }
|
||||
func Geteuid() (euid int) { return -1 }
|
||||
func Getgid() (gid int) { return -1 }
|
||||
|
@ -67,6 +67,7 @@ var (
|
||||
procCommandLineToArgvW = getSysProcAddr(modshell32, "CommandLineToArgvW")
|
||||
procLocalFree = getSysProcAddr(modkernel32, "LocalFree")
|
||||
procSetHandleInformation = getSysProcAddr(modkernel32, "SetHandleInformation")
|
||||
procFlushFileBuffers = getSysProcAddr(modkernel32, "FlushFileBuffers")
|
||||
procWSAStartup = getSysProcAddr(modwsock32, "WSAStartup")
|
||||
procWSACleanup = getSysProcAddr(modwsock32, "WSACleanup")
|
||||
procsocket = getSysProcAddr(modwsock32, "socket")
|
||||
@ -883,6 +884,21 @@ func SetHandleInformation(handle int32, mask uint32, flags uint32) (ok bool, err
|
||||
return
|
||||
}
|
||||
|
||||
func FlushFileBuffers(handle int32) (ok bool, errno int) {
|
||||
r0, _, e1 := Syscall(procFlushFileBuffers, 1, uintptr(handle), 0, 0)
|
||||
ok = bool(r0 != 0)
|
||||
if !ok {
|
||||
if e1 != 0 {
|
||||
errno = int(e1)
|
||||
} else {
|
||||
errno = EINVAL
|
||||
}
|
||||
} else {
|
||||
errno = 0
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func WSAStartup(verreq uint32, data *WSAData) (sockerrno int) {
|
||||
r0, _, _ := Syscall(procWSAStartup, 2, uintptr(verreq), uintptr(unsafe.Pointer(data)), 0)
|
||||
sockerrno = int(r0)
|
||||
|
Loading…
Reference in New Issue
Block a user