From e9d79d2fc432097c867018fc97337a802bbc1aba Mon Sep 17 00:00:00 2001 From: Shirou WAKAYAMA Date: Mon, 29 Dec 2014 00:10:28 +0900 Subject: [PATCH] disk_darwin is backported with 1.3 frozen syscall. --- disk/disk_darwin.go | 46 +++++++++++++++++++++------------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/disk/disk_darwin.go b/disk/disk_darwin.go index e043bdd..715fa9b 100644 --- a/disk/disk_darwin.go +++ b/disk/disk_darwin.go @@ -3,40 +3,21 @@ package gopsutil import ( - common "github.com/shirou/gopsutil/common" - - "golang.org/x/sys/unix" -) + "syscall" + "unsafe" -// sys/mount.h -const ( - MntReadOnly = 0x00000001 /* read only filesystem */ - MntSynchronous = 0x00000002 /* filesystem written synchronously */ - MntNoExec = 0x00000004 /* can't exec from filesystem */ - MntNoSuid = 0x00000008 /* don't honor setuid bits on fs */ - MntUnion = 0x00000020 /* union with underlying filesystem */ - MntAsync = 0x00000040 /* filesystem written asynchronously */ - MntSuidDir = 0x00100000 /* special handling of SUID on dirs */ - MntSoftDep = 0x00200000 /* soft updates being done */ - MntNoSymFollow = 0x00400000 /* do not follow symlinks */ - MntGEOMJournal = 0x02000000 /* GEOM journal support enabled */ - MntMultilabel = 0x04000000 /* MAC support for individual objects */ - MntACLs = 0x08000000 /* ACL support enabled */ - MntNoATime = 0x10000000 /* disable update of file access time */ - MntClusterRead = 0x40000000 /* disable cluster read */ - MntClusterWrite = 0x80000000 /* disable cluster write */ - MntNFS4ACLs = 0x00000010 + common "github.com/shirou/gopsutil/common" ) func DiskPartitions(all bool) ([]DiskPartitionStat, error) { var ret []DiskPartitionStat - count, err := unix.Getfsstat(nil, 1) + count, err := Getfsstat(nil, MntWait) if err != nil { return ret, err } - fs := make([]unix.Statfs_t, count) - _, err = unix.Getfsstat(fs, 1) + fs := make([]Statfs_t, count) + _, err = Getfsstat(fs, MntWait) for _, stat := range fs { opts := "rw" if stat.Flags&MntReadOnly != 0 { @@ -102,3 +83,18 @@ func DiskPartitions(all bool) ([]DiskPartitionStat, error) { func DiskIOCounters() (map[string]DiskIOCountersStat, error) { return nil, common.NotImplementedError } + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := syscall.Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +}