]> Cypherpunks repositories - gostls13.git/commitdiff
os: fix FileInfo.Name returned by Stat
authorDavid Forsythe <dforsythe@gmail.com>
Tue, 29 Mar 2011 18:23:36 +0000 (14:23 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 29 Mar 2011 18:23:36 +0000 (14:23 -0400)
Fixes #1645.

R=rsc
CC=golang-dev
https://golang.org/cl/4321045

src/pkg/os/file_unix.go
src/pkg/os/stat_darwin.go
src/pkg/os/stat_freebsd.go
src/pkg/os/stat_linux.go

index df5894459ee141fb433d5203a151d69e41a644b8..9edfaddfcdc2504020fc81385c106090cccb7f9a 100644 (file)
@@ -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
+}
index 8f4e6bafae3c1e8a00b962121a9034c388840ffd..0661a6d59142e2754b9a3e0a426db80c61fc62bc 100644 (file)
@@ -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
        }
index aa15d4b63d8273c6d291ff5b70640a7156e99792..454165d4e0fe5002df56ca5ac09f71816b085b38 100644 (file)
@@ -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
        }
index ebfa1721c0aad78b9edbd1e56f723c2d7c160bee..7a3cf794d69568f1ebf66be96d917c6c53803b42 100644 (file)
@@ -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
        }