Skip to content

Commit 58149ca

Browse files
authored
fs: Statfs_t{} doesn't have a Type field on NetBSD, OpenBSD, or Solaris (#523)
Other projects that import procfs, like node_exporter, apparently build for OSs that don't have Statfs_t.Type. Signed-off-by: Dan Williams <dcbw@redhat.com>
1 parent 7acd99d commit 58149ca

3 files changed

Lines changed: 56 additions & 14 deletions

File tree

fs.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
package procfs
1515

1616
import (
17-
"syscall"
18-
1917
"github.com/prometheus/procfs/internal/fs"
2018
)
2119

@@ -50,15 +48,3 @@ func NewFS(mountPoint string) (FS, error) {
5048

5149
return FS{fs, real}, nil
5250
}
53-
54-
// isRealProc determines whether supplied mountpoint is really a proc filesystem.
55-
func isRealProc(mountPoint string) (bool, error) {
56-
stat := syscall.Statfs_t{}
57-
err := syscall.Statfs(mountPoint, &stat)
58-
if err != nil {
59-
return false, err
60-
}
61-
62-
// 0x9fa0 is PROC_SUPER_MAGIC: https://elixir.bootlin.com/linux/v6.1/source/include/uapi/linux/magic.h#L87
63-
return stat.Type == 0x9fa0, nil
64-
}

fs_statfs_notype.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright 2018 The Prometheus Authors
2+
// Licensed under the Apache License, Version 2.0 (the "License");
3+
// you may not use this file except in compliance with the License.
4+
// You may obtain a copy of the License at
5+
//
6+
// http://www.apache.org/licenses/LICENSE-2.0
7+
//
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
14+
//go:build netbsd || openbsd || solaris
15+
// +build netbsd openbsd solaris
16+
17+
package procfs
18+
19+
// isRealProc returns true on architectures that don't have a Type argument
20+
// in their Statfs_t struct
21+
func isRealProc(mountPoint string) (bool, error) {
22+
return true, nil
23+
}

fs_statfs_type.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2018 The Prometheus Authors
2+
// Licensed under the Apache License, Version 2.0 (the "License");
3+
// you may not use this file except in compliance with the License.
4+
// You may obtain a copy of the License at
5+
//
6+
// http://www.apache.org/licenses/LICENSE-2.0
7+
//
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
14+
//go:build !netbsd && !openbsd && !solaris
15+
// +build !netbsd,!openbsd,!solaris
16+
17+
package procfs
18+
19+
import (
20+
"syscall"
21+
)
22+
23+
// isRealProc determines whether supplied mountpoint is really a proc filesystem.
24+
func isRealProc(mountPoint string) (bool, error) {
25+
stat := syscall.Statfs_t{}
26+
err := syscall.Statfs(mountPoint, &stat)
27+
if err != nil {
28+
return false, err
29+
}
30+
31+
// 0x9fa0 is PROC_SUPER_MAGIC: https://elixir.bootlin.com/linux/v6.1/source/include/uapi/linux/magic.h#L87
32+
return stat.Type == 0x9fa0, nil
33+
}

0 commit comments

Comments
 (0)