summaryrefslogtreecommitdiff
path: root/src/pkg/os/stat_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/os/stat_linux.go')
-rw-r--r--src/pkg/os/stat_linux.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/pkg/os/stat_linux.go b/src/pkg/os/stat_linux.go
new file mode 100644
index 000000000..7a3cf794d
--- /dev/null
+++ b/src/pkg/os/stat_linux.go
@@ -0,0 +1,32 @@
+// Copyright 2009 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.
+
+package os
+
+import "syscall"
+
+func isSymlink(stat *syscall.Stat_t) bool {
+ return stat.Mode&syscall.S_IFMT == syscall.S_IFLNK
+}
+
+func fileInfoFromStat(name string, fi *FileInfo, lstat, stat *syscall.Stat_t) *FileInfo {
+ fi.Dev = stat.Dev
+ fi.Ino = stat.Ino
+ fi.Nlink = uint64(stat.Nlink)
+ fi.Mode = stat.Mode
+ fi.Uid = int(stat.Uid)
+ fi.Gid = int(stat.Gid)
+ fi.Rdev = stat.Rdev
+ fi.Size = stat.Size
+ fi.Blksize = int64(stat.Blksize)
+ fi.Blocks = stat.Blocks
+ fi.Atime_ns = syscall.TimespecToNsec(stat.Atim)
+ fi.Mtime_ns = syscall.TimespecToNsec(stat.Mtim)
+ fi.Ctime_ns = syscall.TimespecToNsec(stat.Ctim)
+ fi.Name = basename(name)
+ if isSymlink(lstat) && !isSymlink(stat) {
+ fi.FollowedSymlink = true
+ }
+ return fi
+}