diff options
| author | David Forsythe <dforsythe@gmail.com> | 2011-03-29 14:23:36 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2011-03-29 14:23:36 -0400 |
| commit | 85c79ef7cb0cdab34fef9b2bbf8d034eb9883b8e (patch) | |
| tree | a7cab473f785e5c8032c6677c1629d7eb4bcac2d | |
| parent | 04b7da80cc3067d9db25c7d6384ec88878d8e465 (diff) | |
| download | go-85c79ef7cb0cdab34fef9b2bbf8d034eb9883b8e.tar.xz | |
os: fix FileInfo.Name returned by Stat
Fixes #1645.
R=rsc
CC=golang-dev
https://golang.org/cl/4321045
| -rw-r--r-- | src/pkg/os/file_unix.go | 18 | ||||
| -rw-r--r-- | src/pkg/os/stat_darwin.go | 8 | ||||
| -rw-r--r-- | src/pkg/os/stat_freebsd.go | 8 | ||||
| -rw-r--r-- | src/pkg/os/stat_linux.go | 8 |
4 files changed, 21 insertions, 21 deletions
diff --git a/src/pkg/os/file_unix.go b/src/pkg/os/file_unix.go index df5894459e..9edfaddfcd 100644 --- a/src/pkg/os/file_unix.go +++ b/src/pkg/os/file_unix.go @@ -102,3 +102,21 @@ func Truncate(name string, size int64) Error { } return nil } + +// 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 +} diff --git a/src/pkg/os/stat_darwin.go b/src/pkg/os/stat_darwin.go index 8f4e6bafae..0661a6d591 100644 --- a/src/pkg/os/stat_darwin.go +++ b/src/pkg/os/stat_darwin.go @@ -24,13 +24,7 @@ func fileInfoFromStat(name string, fi *FileInfo, lstat, stat *syscall.Stat_t) *F fi.Atime_ns = syscall.TimespecToNsec(stat.Atimespec) fi.Mtime_ns = syscall.TimespecToNsec(stat.Mtimespec) fi.Ctime_ns = syscall.TimespecToNsec(stat.Ctimespec) - for i := len(name) - 1; i >= 0; i-- { - if name[i] == '/' { - name = name[i+1:] - break - } - } - fi.Name = name + fi.Name = basename(name) if isSymlink(lstat) && !isSymlink(stat) { fi.FollowedSymlink = true } diff --git a/src/pkg/os/stat_freebsd.go b/src/pkg/os/stat_freebsd.go index aa15d4b63d..454165d4e0 100644 --- a/src/pkg/os/stat_freebsd.go +++ b/src/pkg/os/stat_freebsd.go @@ -24,13 +24,7 @@ func fileInfoFromStat(name string, fi *FileInfo, lstat, stat *syscall.Stat_t) *F fi.Atime_ns = syscall.TimespecToNsec(stat.Atimespec) fi.Mtime_ns = syscall.TimespecToNsec(stat.Mtimespec) fi.Ctime_ns = syscall.TimespecToNsec(stat.Ctimespec) - for i := len(name) - 1; i >= 0; i-- { - if name[i] == '/' { - name = name[i+1:] - break - } - } - fi.Name = name + fi.Name = basename(name) if isSymlink(lstat) && !isSymlink(stat) { fi.FollowedSymlink = true } diff --git a/src/pkg/os/stat_linux.go b/src/pkg/os/stat_linux.go index ebfa1721c0..7a3cf794d6 100644 --- a/src/pkg/os/stat_linux.go +++ b/src/pkg/os/stat_linux.go @@ -24,13 +24,7 @@ func fileInfoFromStat(name string, fi *FileInfo, lstat, stat *syscall.Stat_t) *F fi.Atime_ns = syscall.TimespecToNsec(stat.Atim) fi.Mtime_ns = syscall.TimespecToNsec(stat.Mtim) fi.Ctime_ns = syscall.TimespecToNsec(stat.Ctim) - for i := len(name) - 1; i >= 0; i-- { - if name[i] == '/' { - name = name[i+1:] - break - } - } - fi.Name = name + fi.Name = basename(name) if isSymlink(lstat) && !isSymlink(stat) { fi.FollowedSymlink = true } |
