mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
os: consolidate files
Code movement only. If someone finds function 'foo' in "foo_linux.go", they will expect that the Window version of 'foo' exists in "foo_windows.go". Current code doesn't follow this manner. For example, 'sameFile' exists in "file_unix.go", "stat_plan9.go" and "types_windows.go". The CL address that problem by following rules: * readdir family => dir.go, dir_$GOOS.go * stat family => stat.go, stat_$GOOS.go * path-functions => path_$GOOS.go * sameFile => types.go, types_$GOOS.go * process-functions => exec.go, exec_$GOOS.go * hostname => sys.go, sys_$GOOS.go Change-Id: Ic3c64663ce0b2a364d7a414351cd3c772e70187b Reviewed-on: https://go-review.googlesource.com/27035 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
c307e1628c
commit
664c4a1f87
15 changed files with 426 additions and 403 deletions
|
|
@ -11,10 +11,6 @@ import (
|
|||
"syscall"
|
||||
)
|
||||
|
||||
func sameFile(fs1, fs2 *fileStat) bool {
|
||||
return fs1.sys.Dev == fs2.sys.Dev && fs1.sys.Ino == fs2.sys.Ino
|
||||
}
|
||||
|
||||
func rename(oldname, newname string) error {
|
||||
e := syscall.Rename(oldname, newname)
|
||||
if e != nil {
|
||||
|
|
@ -147,69 +143,6 @@ func (file *file) close() error {
|
|||
return err
|
||||
}
|
||||
|
||||
// Stat returns the FileInfo structure describing file.
|
||||
// If there is an error, it will be of type *PathError.
|
||||
func (f *File) Stat() (FileInfo, error) {
|
||||
if f == nil {
|
||||
return nil, ErrInvalid
|
||||
}
|
||||
var fs fileStat
|
||||
err := syscall.Fstat(f.fd, &fs.sys)
|
||||
if err != nil {
|
||||
return nil, &PathError{"stat", f.name, err}
|
||||
}
|
||||
fillFileStatFromSys(&fs, f.name)
|
||||
return &fs, nil
|
||||
}
|
||||
|
||||
// Stat returns a FileInfo describing the named file.
|
||||
// If there is an error, it will be of type *PathError.
|
||||
func Stat(name string) (FileInfo, error) {
|
||||
var fs fileStat
|
||||
err := syscall.Stat(name, &fs.sys)
|
||||
if err != nil {
|
||||
return nil, &PathError{"stat", name, err}
|
||||
}
|
||||
fillFileStatFromSys(&fs, name)
|
||||
return &fs, nil
|
||||
}
|
||||
|
||||
// Lstat returns a FileInfo describing the named file.
|
||||
// If the file is a symbolic link, the returned FileInfo
|
||||
// describes the symbolic link. Lstat makes no attempt to follow the link.
|
||||
// If there is an error, it will be of type *PathError.
|
||||
func Lstat(name string) (FileInfo, error) {
|
||||
var fs fileStat
|
||||
err := syscall.Lstat(name, &fs.sys)
|
||||
if err != nil {
|
||||
return nil, &PathError{"lstat", name, err}
|
||||
}
|
||||
fillFileStatFromSys(&fs, name)
|
||||
return &fs, nil
|
||||
}
|
||||
|
||||
func (f *File) readdir(n int) (fi []FileInfo, err error) {
|
||||
dirname := f.name
|
||||
if dirname == "" {
|
||||
dirname = "."
|
||||
}
|
||||
names, err := f.Readdirnames(n)
|
||||
fi = make([]FileInfo, 0, len(names))
|
||||
for _, filename := range names {
|
||||
fip, lerr := lstat(dirname + "/" + filename)
|
||||
if IsNotExist(lerr) {
|
||||
// File disappeared between readdir + stat.
|
||||
// Just treat it as if it didn't exist.
|
||||
continue
|
||||
}
|
||||
if lerr != nil {
|
||||
return fi, lerr
|
||||
}
|
||||
fi = append(fi, fip)
|
||||
}
|
||||
return fi, err
|
||||
}
|
||||
|
||||
// Darwin and FreeBSD can't read or write 2GB+ at a time,
|
||||
// even on 64-bit systems. See golang.org/issue/7812.
|
||||
// Use 1GB instead of, say, 2GB-1, to keep subsequent
|
||||
|
|
@ -324,24 +257,6 @@ func Remove(name string) error {
|
|||
return &PathError{"remove", name, e}
|
||||
}
|
||||
|
||||
// basename removes trailing slashes and the leading directory name from path name
|
||||
func basename(name string) string {
|
||||
i := len(name) - 1
|
||||
// Remove trailing slashes
|
||||
for ; i > 0 && name[i] == '/'; i-- {
|
||||
name = name[:i]
|
||||
}
|
||||
// Remove leading directory name
|
||||
for i--; i >= 0; i-- {
|
||||
if name[i] == '/' {
|
||||
name = name[i+1:]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return name
|
||||
}
|
||||
|
||||
// TempDir returns the default directory to use for temporary files.
|
||||
func TempDir() string {
|
||||
dir := Getenv("TMPDIR")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue