mirror of
https://github.com/rclone/rclone.git
synced 2025-08-09 21:57:59 +02:00
Add lib/diskusage to measure used/free on disks
This commit is contained in:
27
lib/diskusage/diskusage_unix.go
Normal file
27
lib/diskusage/diskusage_unix.go
Normal file
@ -0,0 +1,27 @@
|
||||
//go:build aix || android || darwin || dragonfly || freebsd || ios || linux
|
||||
|
||||
package diskusage
|
||||
|
||||
import (
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
// New returns the disk status for dir.
|
||||
//
|
||||
// May return Unsupported error if it doesn't work on this platform.
|
||||
func New(dir string) (info Info, err error) {
|
||||
var statfs unix.Statfs_t
|
||||
err = unix.Statfs(dir, &statfs)
|
||||
if err != nil {
|
||||
return info, err
|
||||
}
|
||||
// Note that these can be different sizes on different OSes so
|
||||
// we upcast them all to uint64
|
||||
//nolint:unconvert
|
||||
info.Free = uint64(statfs.Bfree) * uint64(statfs.Bsize)
|
||||
//nolint:unconvert
|
||||
info.Available = uint64(statfs.Bavail) * uint64(statfs.Bsize)
|
||||
//nolint:unconvert
|
||||
info.Total = uint64(statfs.Blocks) * uint64(statfs.Bsize)
|
||||
return info, nil
|
||||
}
|
Reference in New Issue
Block a user