mirror of
https://github.com/shirou/gopsutil.git
synced 2025-04-28 13:48:49 +08:00
Add disk partitions support for NetBSD
This commit is contained in:
parent
302751d509
commit
7df86f0f6a
@ -15,22 +15,40 @@ import (
|
|||||||
func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, error) {
|
func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, error) {
|
||||||
var ret []PartitionStat
|
var ret []PartitionStat
|
||||||
|
|
||||||
|
flag := uint64(1) // ST_WAIT/MNT_WAIT, see sys/fstypes.h
|
||||||
|
|
||||||
// get required buffer size
|
// get required buffer size
|
||||||
r, _, err = unix.Syscall6(
|
r, _, err = unix.Syscall6(
|
||||||
483, // SYS___getvfsstat90 syscall
|
483, // SYS___getvfsstat90 syscall
|
||||||
nil,
|
nil,
|
||||||
0,
|
0,
|
||||||
1, // ST_WAIT/MNT_WAIT, see sys/fstypes.h
|
uintptr(unsafe.Pointer(&flag)),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ret, err
|
return ret, err
|
||||||
}
|
}
|
||||||
mountedFsCount := uint64(r)
|
mountedFsCount := uint64(r)
|
||||||
|
|
||||||
|
// calculate the buffer size
|
||||||
|
bufSize := sizeOfStatvfs * mountedFsCount
|
||||||
|
buf := make([]Statvfs, bufSize)
|
||||||
|
|
||||||
|
// request agian to get desired mount data
|
||||||
|
_, _, err = unix.Syscall6(
|
||||||
|
483,
|
||||||
|
uintptr(unsafe.Pointer(&buf[0])),
|
||||||
|
uintptr(unsafe.Pointer(&bufSize)),
|
||||||
|
uintptr(unsafe.Pointer(&flag)),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, stat := range buf {
|
||||||
d := PartitionStat{
|
d := PartitionStat{
|
||||||
Device: common.ByteToString(stat.F_mntfromname[:]),
|
Device: common.ByteToString([]byte(stat.Mntfromname[:])),
|
||||||
Mountpoint: common.ByteToString(stat.F_mntonname[:]),
|
Mountpoint: common.ByteToString([]byte(stat.Mntonname[:])),
|
||||||
Fstype: common.ByteToString(stat.F_fstypename[:]),
|
Fstype: common.ByteToString([]byte(stat.Fstypename[:])),
|
||||||
Opts: opts,
|
Opts: opts,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
38
disk/disk_netbsd_arm64.go
Normal file
38
disk/disk_netbsd_arm64.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
|
// cgo -godefs types_netbsd.go
|
||||||
|
|
||||||
|
package disk
|
||||||
|
|
||||||
|
const (
|
||||||
|
sizeOfStatvfs = 0xce0
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
Statvfs struct {
|
||||||
|
Flag uint64
|
||||||
|
Bsize uint64
|
||||||
|
Frsize uint64
|
||||||
|
Iosize uint64
|
||||||
|
Blocks uint64
|
||||||
|
Bfree uint64
|
||||||
|
Bavail uint64
|
||||||
|
Bresvd uint64
|
||||||
|
Files uint64
|
||||||
|
Ffree uint64
|
||||||
|
Favail uint64
|
||||||
|
Fresvd uint64
|
||||||
|
Syncreads uint64
|
||||||
|
Syncwrites uint64
|
||||||
|
Asyncreads uint64
|
||||||
|
Asyncwrites uint64
|
||||||
|
Fsidx _Ctype_struct___0
|
||||||
|
Fsid uint64
|
||||||
|
Namemax uint64
|
||||||
|
Owner uint32
|
||||||
|
Spare [4]uint64
|
||||||
|
Fstypename [32]uint8
|
||||||
|
Mntonname [1024]uint8
|
||||||
|
Mntfromname [1024]uint8
|
||||||
|
Mntfromlabel [1024]uint8
|
||||||
|
}
|
||||||
|
)
|
30
disk/types_netbsd.go
Normal file
30
disk/types_netbsd.go
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
//go:build ignore
|
||||||
|
// +build ignore
|
||||||
|
|
||||||
|
// Hand writing: _Ctype_struct_statvfs
|
||||||
|
|
||||||
|
/*
|
||||||
|
Input to cgo -godefs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package disk
|
||||||
|
|
||||||
|
/*
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/statvfs.h>
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <sys/featuretest.h>
|
||||||
|
#include <sys/stdint.h>
|
||||||
|
#include <machine/ansi.h>
|
||||||
|
#include <sys/ansi.h>
|
||||||
|
#include <sys/fstypes.h>
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
const (
|
||||||
|
sizeOfStatvfs = C.sizeof_struct_statvfs
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
Statvfs C.struct_statvfs
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user