github.com/goproxy0/go@v0.0.0-20171111080102-49cc0c489d2c/src/time/sys_windows.go (about)

     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  
     5  package time
     6  
     7  import (
     8  	"errors"
     9  	"syscall"
    10  )
    11  
    12  // for testing: whatever interrupts a sleep
    13  func interrupt() {
    14  }
    15  
    16  func open(name string) (uintptr, error) {
    17  	fd, err := syscall.Open(name, syscall.O_RDONLY, 0)
    18  	if err != nil {
    19  		return 0, err
    20  	}
    21  	return uintptr(fd), nil
    22  }
    23  
    24  func read(fd uintptr, buf []byte) (int, error) {
    25  	return syscall.Read(syscall.Handle(fd), buf)
    26  }
    27  
    28  func closefd(fd uintptr) {
    29  	syscall.Close(syscall.Handle(fd))
    30  }
    31  
    32  func preadn(fd uintptr, buf []byte, off int) error {
    33  	whence := seekStart
    34  	if off < 0 {
    35  		whence = seekEnd
    36  	}
    37  	if _, err := syscall.Seek(syscall.Handle(fd), int64(off), whence); err != nil {
    38  		return err
    39  	}
    40  	for len(buf) > 0 {
    41  		m, err := syscall.Read(syscall.Handle(fd), buf)
    42  		if m <= 0 {
    43  			if err == nil {
    44  				return errors.New("short read")
    45  			}
    46  			return err
    47  		}
    48  		buf = buf[m:]
    49  	}
    50  	return nil
    51  }