Add disk partitions support for NetBSD

pull/1530/head
Justin Yang 2 years ago
parent 302751d509
commit 7df86f0f6a

@ -14,23 +14,41 @@ import (
func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, error) {
var ret []PartitionStat
flag := uint64(1) // ST_WAIT/MNT_WAIT, see sys/fstypes.h
// get required buffer size
r, _, err = unix.Syscall6(
483, // SYS___getvfsstat90 syscall
nil,
0,
1, // ST_WAIT/MNT_WAIT, see sys/fstypes.h
uintptr(unsafe.Pointer(&flag)),
)
if err != nil {
return ret, err
}
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{
Device: common.ByteToString(stat.F_mntfromname[:]),
Mountpoint: common.ByteToString(stat.F_mntonname[:]),
Fstype: common.ByteToString(stat.F_fstypename[:]),
Device: common.ByteToString([]byte(stat.Mntfromname[:])),
Mountpoint: common.ByteToString([]byte(stat.Mntonname[:])),
Fstype: common.ByteToString([]byte(stat.Fstypename[:])),
Opts: opts,
}

@ -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
}
)

@ -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…
Cancel
Save