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.
12 // for testing: whatever interrupts a sleep
16 // readFile reads and returns the content of the named file.
17 // It is a trivial implementation of ioutil.ReadFile, reimplemented
18 // here to avoid depending on io/ioutil or os.
19 // It returns an error if name exceeds maxFileSize bytes.
20 func readFile(name
string) ([]byte, error
) {
21 f
, err
:= syscall
.Open(name
, syscall
.O_RDONLY
, 0)
25 defer syscall
.Close(f
)
32 n
, err
= syscall
.Read(f
, buf
[:])
34 ret
= append(ret
, buf
[:n
]...)
36 if n
== 0 || err
!= nil {
39 if len(ret
) > maxFileSize
{
40 return nil, fileSizeError(name
)
46 func open(name
string) (uintptr, error
) {
47 fd
, err
:= syscall
.Open(name
, syscall
.O_RDONLY
, 0)
51 return uintptr(fd
), nil
54 func closefd(fd
uintptr) {
55 syscall
.Close(syscall
.Handle(fd
))
58 func preadn(fd
uintptr, buf
[]byte, off
int) error
{
63 if _
, err
:= syscall
.Seek(syscall
.Handle(fd
), int64(off
), whence
); err
!= nil {
67 m
, err
:= syscall
.Read(syscall
.Handle(fd
), buf
)
70 return errors
.New("short read")