diff --git a/space.go b/space.go index f7b0d17..4ae0928 100644 --- a/space.go +++ b/space.go @@ -1,5 +1,5 @@ -//go:build !windows -// +build !windows +//go:build linux && !s390x && !netbsd +// +build linux,!s390x,!netbsd package rotatelogs @@ -13,7 +13,7 @@ func GetDiskSize(dir string) (total uint64, avail uint64, err error) { if err != nil { return 0, 0, err } - avail = fs.Bavail * uint64(fs.Frsize) - total = fs.Blocks * uint64(fs.Frsize) + avail = uint64(fs.Bavail) * uint64(fs.Frsize) + total = uint64(fs.Blocks) * uint64(fs.Frsize) return total, avail, nil } diff --git a/space_bsd.go b/space_bsd.go new file mode 100644 index 0000000..aeb3175 --- /dev/null +++ b/space_bsd.go @@ -0,0 +1,19 @@ +//go:build darwin || dragonfly || s390x +// +build darwin dragonfly s390x + +package rotatelogs + +import ( + "golang.org/x/sys/unix" +) + +func GetDiskSize(dir string) (total uint64, avail uint64, err error) { + fs := unix.Statfs_t{} + err = unix.Statfs(dir, &fs) + if err != nil { + return 0, 0, err + } + avail = uint64(fs.Bavail) * uint64(fs.Bsize) + total = uint64(fs.Blocks) * uint64(fs.Bsize) + return total, avail, nil +} diff --git a/space_netbsd.go b/space_netbsd.go new file mode 100644 index 0000000..a4f5f03 --- /dev/null +++ b/space_netbsd.go @@ -0,0 +1,17 @@ +//go:build netbsd +// +build netbsd + +package rotatelogs + +import "golang.org/x/sys/unix" + +func GetDiskSize(dir string) (total uint64, avail uint64, err error) { + fs := unix.Statvfs_t{} + err = unix.Statvfs(dir, &fs) + if err != nil { + return 0, 0, err + } + avail = fs.Bavail * fs.Frsize + total = fs.Blocks * fs.Frsize + return total, avail, nil +} diff --git a/space_openbsd.go b/space_openbsd.go new file mode 100644 index 0000000..7fec577 --- /dev/null +++ b/space_openbsd.go @@ -0,0 +1,17 @@ +//go:build openbsd +// +build openbsd + +package rotatelogs + +import "golang.org/x/sys/unix" + +func GetDiskSize(dir string) (total uint64, avail uint64, err error) { + fs := unix.Statfs_t{} + err = unix.Statfs(dir, &fs) + if err != nil { + return 0, 0, err + } + avail = uint64(fs.F_bavail) * uint64(fs.F_bsize) + total = fs.F_blocks * uint64(fs.F_bsize) + return total, avail, nil +}