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 5package time 6 7import ( 8 "errors" 9 "syscall" 10) 11 12// for testing: whatever interrupts a sleep 13func interrupt() { 14} 15 16func 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 24func read(fd uintptr, buf []byte) (int, error) { 25 return syscall.Read(syscall.Handle(fd), buf) 26} 27 28func closefd(fd uintptr) { 29 syscall.Close(syscall.Handle(fd)) 30} 31 32func 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} 52