2018-07-26 19:04:57 +08:00
|
|
|
// +build darwin dragonfly freebsd !android,linux netbsd openbsd solaris aix
|
2015-09-20 10:09:03 +08:00
|
|
|
// +build cgo
|
|
|
|
|
|
|
|
package sftp
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"syscall"
|
2021-04-24 20:28:08 +08:00
|
|
|
|
|
|
|
sshfx "github.com/pkg/sftp/internal/encoding/ssh/filexfer"
|
2015-09-20 10:09:03 +08:00
|
|
|
)
|
|
|
|
|
2021-04-24 20:28:08 +08:00
|
|
|
func attributesFromFileInfo(fi os.FileInfo) sshfx.Attributes {
|
|
|
|
var attrs sshfx.Attributes
|
|
|
|
|
|
|
|
switch sys := fi.Sys().(type) {
|
|
|
|
case *syscall.Stat_t:
|
|
|
|
attrs.SetSize(uint64(sys.Size))
|
|
|
|
attrs.SetUIDGID(sys.Uid, sys.Gid)
|
|
|
|
attrs.SetPermissions(sshfx.FileMode(sys.Mode))
|
|
|
|
attrs.SetACModTime(uint32(sys.Atim.Sec), uint32(sys.Mtim.Sec))
|
|
|
|
|
|
|
|
case *FileStat:
|
|
|
|
attrs.SetSize(sys.Size)
|
|
|
|
attrs.SetUIDGID(sys.UID, sys.GID)
|
|
|
|
attrs.SetPermissions(sshfx.FileMode(sys.Mode))
|
|
|
|
attrs.SetACModTime(sys.Atime, sys.Mtime)
|
|
|
|
|
|
|
|
case *sshfx.Attributes:
|
|
|
|
attrs.SetSize(sys.Size)
|
|
|
|
attrs.SetUIDGID(sys.UID, sys.GID)
|
|
|
|
attrs.SetPermissions(sys.Permissions)
|
|
|
|
attrs.SetACModTime(sys.ATime, sys.MTime)
|
|
|
|
|
|
|
|
default:
|
|
|
|
attrs.SetSize(uint64(fi.Size()))
|
|
|
|
attrs.SetPermissions(fromFileMode(fi.Mode()))
|
|
|
|
|
|
|
|
mtime := uint32(fi.ModTime().Unix())
|
|
|
|
attrs.SetACModTime(mtime, mtime)
|
2015-09-20 10:09:03 +08:00
|
|
|
}
|
2021-04-24 20:28:08 +08:00
|
|
|
|
|
|
|
return attrs
|
2015-09-20 10:09:03 +08:00
|
|
|
}
|