From e7b87a704f1616eafec52da67ec0b03c5844086b Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Sat, 20 May 2023 08:57:39 -0500 Subject: [PATCH] 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 --- fs.go | 14 -------------- fs_statfs_notype.go | 23 +++++++++++++++++++++++ fs_statfs_type.go | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 fs_statfs_notype.go create mode 100644 fs_statfs_type.go diff --git a/fs.go b/fs.go index df9044e4..60c551e0 100644 --- a/fs.go +++ b/fs.go @@ -14,8 +14,6 @@ package procfs import ( - "syscall" - "github.com/prometheus/procfs/internal/fs" ) @@ -50,15 +48,3 @@ func NewFS(mountPoint string) (FS, error) { return FS{fs, real}, nil } - -// isRealProc determines whether supplied mountpoint is really a proc filesystem. -func isRealProc(mountPoint string) (bool, error) { - stat := syscall.Statfs_t{} - err := syscall.Statfs(mountPoint, &stat) - if err != nil { - return false, err - } - - // 0x9fa0 is PROC_SUPER_MAGIC: https://elixir.bootlin.com/linux/v6.1/source/include/uapi/linux/magic.h#L87 - return stat.Type == 0x9fa0, nil -} diff --git a/fs_statfs_notype.go b/fs_statfs_notype.go new file mode 100644 index 00000000..446a85db --- /dev/null +++ b/fs_statfs_notype.go @@ -0,0 +1,23 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build netbsd || openbsd || solaris +// +build netbsd openbsd solaris + +package procfs + +// isRealProc returns true on architectures that don't have a Type argument +// in their Statfs_t struct +func isRealProc(mountPoint string) (bool, error) { + return true, nil +} diff --git a/fs_statfs_type.go b/fs_statfs_type.go new file mode 100644 index 00000000..6f5af28f --- /dev/null +++ b/fs_statfs_type.go @@ -0,0 +1,33 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !netbsd && !openbsd && !solaris +// +build !netbsd,!openbsd,!solaris + +package procfs + +import ( + "syscall" +) + +// isRealProc determines whether supplied mountpoint is really a proc filesystem. +func isRealProc(mountPoint string) (bool, error) { + stat := syscall.Statfs_t{} + err := syscall.Statfs(mountPoint, &stat) + if err != nil { + return false, err + } + + // 0x9fa0 is PROC_SUPER_MAGIC: https://elixir.bootlin.com/linux/v6.1/source/include/uapi/linux/magic.h#L87 + return stat.Type == 0x9fa0, nil +}