aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Forsythe <dforsythe@gmail.com>2011-03-29 14:23:36 -0400
committerRuss Cox <rsc@golang.org>2011-03-29 14:23:36 -0400
commit85c79ef7cb0cdab34fef9b2bbf8d034eb9883b8e (patch)
treea7cab473f785e5c8032c6677c1629d7eb4bcac2d
parent04b7da80cc3067d9db25c7d6384ec88878d8e465 (diff)
downloadgo-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.go18
-rw-r--r--src/pkg/os/stat_darwin.go8
-rw-r--r--src/pkg/os/stat_freebsd.go8
-rw-r--r--src/pkg/os/stat_linux.go8
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
}