mirror of
https://github.com/kopia/kopia.git
synced 2026-01-29 00:33:24 -05:00
48 lines
949 B
Go
48 lines
949 B
Go
//go:build openbsd
|
|
// +build openbsd
|
|
|
|
// Package stat provides a cross-platform abstraction for
|
|
// common stat commands.
|
|
package stat
|
|
|
|
import (
|
|
"syscall"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
const (
|
|
diskBlockSize uint64 = 512
|
|
)
|
|
|
|
var errInvalidBlockSize = errors.New("invalid disk block size")
|
|
|
|
// GetFileAllocSize gets the space allocated on disk for the file.
|
|
// 'fname' in bytes.
|
|
func GetFileAllocSize(fname string) (uint64, error) {
|
|
var st syscall.Stat_t
|
|
|
|
err := syscall.Stat(fname, &st)
|
|
if err != nil {
|
|
return 0, err //nolint:wrapcheck
|
|
}
|
|
|
|
return uint64(st.Blocks) * diskBlockSize, nil
|
|
}
|
|
|
|
// GetBlockSize gets the disk block size of the underlying system.
|
|
func GetBlockSize(path string) (uint64, error) {
|
|
var st syscall.Statfs_t
|
|
|
|
err := syscall.Statfs(path, &st)
|
|
if err != nil {
|
|
return 0, err //nolint:wrapcheck
|
|
}
|
|
|
|
if st.F_bsize <= 0 {
|
|
return 0, errors.Wrapf(errInvalidBlockSize, "%d", st.F_bsize)
|
|
}
|
|
|
|
return uint64(st.F_bsize), nil
|
|
}
|