mirror of
https://github.com/golang/go
synced 2024-10-03 21:21:22 -06:00
d88261fb65
The time package has never depended on the io package until a recent change during Go 1.7 to use the io.Seek* constants. The go/build dependency check didn't catch this because "time" was allowed to depend on meta package group "L0", which included "io". Adding the "io" package broke one of Dmitry's tools. The tool is fixable, but it's also not necessary for us to depend on "io" at all for some constants. Mirror the constants instead, and change deps_test.go to prevent an io dependency in the future. Change-Id: I74325228565279a74fa4a2f419643f5710e3e09f Reviewed-on: https://go-review.googlesource.com/22960 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
79 lines
1.6 KiB
Go
79 lines
1.6 KiB
Go
// Copyright 2011 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
|
|
|
|
package time
|
|
|
|
import (
|
|
"errors"
|
|
"syscall"
|
|
)
|
|
|
|
// for testing: whatever interrupts a sleep
|
|
func interrupt() {
|
|
syscall.Kill(syscall.Getpid(), syscall.SIGCHLD)
|
|
}
|
|
|
|
// readFile reads and returns the content of the named file.
|
|
// It is a trivial implementation of ioutil.ReadFile, reimplemented
|
|
// here to avoid depending on io/ioutil or os.
|
|
func readFile(name string) ([]byte, error) {
|
|
f, err := syscall.Open(name, syscall.O_RDONLY, 0)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer syscall.Close(f)
|
|
var (
|
|
buf [4096]byte
|
|
ret []byte
|
|
n int
|
|
)
|
|
for {
|
|
n, err = syscall.Read(f, buf[:])
|
|
if n > 0 {
|
|
ret = append(ret, buf[:n]...)
|
|
}
|
|
if n == 0 || err != nil {
|
|
break
|
|
}
|
|
}
|
|
return ret, err
|
|
}
|
|
|
|
func open(name string) (uintptr, error) {
|
|
fd, err := syscall.Open(name, syscall.O_RDONLY, 0)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return uintptr(fd), nil
|
|
}
|
|
|
|
func closefd(fd uintptr) {
|
|
syscall.Close(int(fd))
|
|
}
|
|
|
|
func preadn(fd uintptr, buf []byte, off int) error {
|
|
whence := seekStart
|
|
if off < 0 {
|
|
whence = seekEnd
|
|
}
|
|
if _, err := syscall.Seek(int(fd), int64(off), whence); err != nil {
|
|
return err
|
|
}
|
|
for len(buf) > 0 {
|
|
m, err := syscall.Read(int(fd), buf)
|
|
if m <= 0 {
|
|
if err == nil {
|
|
return errors.New("short read")
|
|
}
|
|
return err
|
|
}
|
|
buf = buf[m:]
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func isNotExist(err error) bool { return err == syscall.ENOENT }
|