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