server_statvfs_impl.go 642 B

123456789101112131415161718192021222324252627282930
  1. //go:build darwin || linux
  2. // +build darwin linux
  3. // fill in statvfs structure with OS specific values
  4. // Statfs_t is different per-kernel, and only exists on some unixes (not Solaris for instance)
  5. package sftp
  6. import (
  7. "syscall"
  8. )
  9. func (p *sshFxpExtendedPacketStatVFS) respond(svr *Server) responsePacket {
  10. retPkt, err := getStatVFSForPath(p.Path)
  11. if err != nil {
  12. return statusFromError(p.ID, err)
  13. }
  14. retPkt.ID = p.ID
  15. return retPkt
  16. }
  17. func getStatVFSForPath(name string) (*StatVFS, error) {
  18. var stat syscall.Statfs_t
  19. if err := syscall.Statfs(name, &stat); err != nil {
  20. return nil, err
  21. }
  22. return statvfsFromStatfst(&stat)
  23. }