Skip to content

Commit d995796

Browse files
authored
Merge pull request moby#5632 from crazy-max/disk-bsd-fix
util(disk): freebsd and netbsd support
2 parents 4c68785 + 5c75264 commit d995796

File tree

4 files changed

+59
-1
lines changed

4 files changed

+59
-1
lines changed

util/disk/disk_freebsd.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//go:build freebsd
2+
3+
package disk
4+
5+
import (
6+
"syscall"
7+
8+
"github.com/pkg/errors"
9+
)
10+
11+
func GetDiskStat(root string) (DiskStat, error) {
12+
var st syscall.Statfs_t
13+
if err := syscall.Statfs(root, &st); err != nil {
14+
return DiskStat{}, errors.Wrapf(err, "could not stat fs at %s", root)
15+
}
16+
17+
return DiskStat{
18+
Total: int64(st.Bsize) * int64(st.Blocks),
19+
Free: int64(st.Bsize) * int64(st.Bfree),
20+
Available: int64(st.Bsize) * int64(st.Bavail),
21+
}, nil
22+
}

util/disk/disk_netbsd.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//go:build netbsd
2+
3+
package disk
4+
5+
import (
6+
"github.com/pkg/errors"
7+
"golang.org/x/sys/unix"
8+
)
9+
10+
func GetDiskStat(root string) (DiskStat, error) {
11+
var st unix.Statvfs_t
12+
if err := unix.Statvfs(root, &st); err != nil {
13+
return DiskStat{}, errors.Wrapf(err, "could not stat fs at %s", root)
14+
}
15+
16+
return DiskStat{
17+
Total: int64(st.Frsize) * int64(st.Blocks),
18+
Free: int64(st.Frsize) * int64(st.Bfree),
19+
Available: int64(st.Frsize) * int64(st.Bavail),
20+
}, nil
21+
}

util/disk/disk_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package disk
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
func TestGetDiskStat(t *testing.T) {
10+
diskStat, err := GetDiskStat("/")
11+
require.NoError(t, err)
12+
require.Greater(t, diskStat.Total, int64(0))
13+
require.GreaterOrEqual(t, diskStat.Free, int64(0))
14+
require.GreaterOrEqual(t, diskStat.Available, int64(0))
15+
}

util/disk/disk_unix.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//go:build !windows && !openbsd
1+
//go:build !windows && !freebsd && !netbsd && !openbsd
22

33
package disk
44

0 commit comments

Comments
 (0)