blob: 4f4ebc1649ad24108f64805c906acb2cf976285f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
// 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 mmap
import (
"os"
"path"
"syscall"
"time"
)
func fillFileStatFromSys(fs *fileStat, name string) {
fs.name = path.Base(name)
fs.size = fs.sys.Size
fs.modTime = time.Unix(fs.sys.Mtim.Unix())
fs.mode = os.FileMode(fs.sys.Mode & 0777)
switch fs.sys.Mode & syscall.S_IFMT {
case syscall.S_IFBLK:
fs.mode |= os.ModeDevice
case syscall.S_IFCHR:
fs.mode |= os.ModeDevice | os.ModeCharDevice
case syscall.S_IFDIR:
fs.mode |= os.ModeDir
case syscall.S_IFIFO:
fs.mode |= os.ModeNamedPipe
case syscall.S_IFLNK:
fs.mode |= os.ModeSymlink
case syscall.S_IFREG:
// nothing to do
case syscall.S_IFSOCK:
fs.mode |= os.ModeSocket
}
if fs.sys.Mode&syscall.S_ISGID != 0 {
fs.mode |= os.ModeSetgid
}
if fs.sys.Mode&syscall.S_ISUID != 0 {
fs.mode |= os.ModeSetuid
}
if fs.sys.Mode&syscall.S_ISVTX != 0 {
fs.mode |= os.ModeSticky
}
}
// For testing.
func atime(fi os.FileInfo) time.Time {
return time.Unix(fi.Sys().(*syscall.Stat_t).Atim.Unix())
}
|