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 // This condition solves issue https://go.dev/issue/50248 20 if err == syscall.ERROR_PATH_NOT_FOUND { 21 err = syscall.ENOENT 22 } 23 return 0, err 24 } 25 return uintptr(fd), nil 26} 27 28func read(fd uintptr, buf []byte) (int, error) { 29 return syscall.Read(syscall.Handle(fd), buf) 30} 31 32func closefd(fd uintptr) { 33 syscall.Close(syscall.Handle(fd)) 34} 35 36func preadn(fd uintptr, buf []byte, off int) error { 37 whence := seekStart 38 if off < 0 { 39 whence = seekEnd 40 } 41 if _, err := syscall.Seek(syscall.Handle(fd), int64(off), whence); err != nil { 42 return err 43 } 44 for len(buf) > 0 { 45 m, err := syscall.Read(syscall.Handle(fd), buf) 46 if m <= 0 { 47 if err == nil { 48 return errors.New("short read") 49 } 50 return err 51 } 52 buf = buf[m:] 53 } 54 return nil 55} 56