Skip to content

Commit ec73ec0

Browse files
cmd/utils: fix compilation issue on openbsd (#22511)
1 parent 36b51b8 commit ec73ec0

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

cmd/utils/diskusage.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
// You should have received a copy of the GNU Lesser General Public License
1515
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
1616

17-
// +build !windows
17+
// +build !windows,!openbsd
1818

1919
package utils
2020

cmd/utils/diskusage_openbsd.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Copyright 2021 The go-ethereum Authors
2+
// This file is part of the go-ethereum library.
3+
//
4+
// The go-ethereum library is free software: you can redistribute it and/or modify
5+
// it under the terms of the GNU Lesser General Public License as published by
6+
// the Free Software Foundation, either version 3 of the License, or
7+
// (at your option) any later version.
8+
//
9+
// The go-ethereum library is distributed in the hope that it will be useful,
10+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
// GNU Lesser General Public License for more details.
13+
//
14+
// You should have received a copy of the GNU Lesser General Public License
15+
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
16+
17+
// +build openbsd
18+
19+
package utils
20+
21+
import (
22+
"fmt"
23+
24+
"golang.org/x/sys/unix"
25+
)
26+
27+
func getFreeDiskSpace(path string) (uint64, error) {
28+
var stat unix.Statfs_t
29+
if err := unix.Statfs(path, &stat); err != nil {
30+
return 0, fmt.Errorf("failed to call Statfs: %v", err)
31+
}
32+
33+
// Available blocks * size per block = available space in bytes
34+
var bavail = stat.F_bavail
35+
// Not sure if the following check is necessary for OpenBSD
36+
if stat.F_bavail < 0 {
37+
// FreeBSD can have a negative number of blocks available
38+
// because of the grace limit.
39+
bavail = 0
40+
}
41+
//nolint:unconvert
42+
return uint64(bavail) * uint64(stat.F_bsize), nil
43+
}

0 commit comments

Comments
 (0)