sys_windows.go 996 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Copyright 2011 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package time
  5. import (
  6. "errors"
  7. "syscall"
  8. )
  9. // for testing: whatever interrupts a sleep
  10. func interrupt() {
  11. }
  12. func open(name string) (uintptr, error) {
  13. fd, err := syscall.Open(name, syscall.O_RDONLY, 0)
  14. if err != nil {
  15. return 0, err
  16. }
  17. return uintptr(fd), nil
  18. }
  19. func read(fd uintptr, buf []byte) (int, error) {
  20. return syscall.Read(syscall.Handle(fd), buf)
  21. }
  22. func closefd(fd uintptr) {
  23. syscall.Close(syscall.Handle(fd))
  24. }
  25. func preadn(fd uintptr, buf []byte, off int) error {
  26. whence := seekStart
  27. if off < 0 {
  28. whence = seekEnd
  29. }
  30. if _, err := syscall.Seek(syscall.Handle(fd), int64(off), whence); err != nil {
  31. return err
  32. }
  33. for len(buf) > 0 {
  34. m, err := syscall.Read(syscall.Handle(fd), buf)
  35. if m <= 0 {
  36. if err == nil {
  37. return errors.New("short read")
  38. }
  39. return err
  40. }
  41. buf = buf[m:]
  42. }
  43. return nil
  44. }