Make sure to call C.free on C strings allocated using C.CString. C.CString allocates memory in the C heap using malloc. It is the callers responsibility to free them. See https://golang.org/cmd/cgo/#hdr-Go_references_to_C for details. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// +build solaris,cgo
 | 
						|
 | 
						|
package mount
 | 
						|
 | 
						|
/*
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <sys/mnttab.h>
 | 
						|
*/
 | 
						|
import "C"
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"unsafe"
 | 
						|
)
 | 
						|
 | 
						|
// Self retrieves a list of mounts for the current running process.
 | 
						|
func Self() ([]Info, error) {
 | 
						|
	path := C.CString(C.MNTTAB)
 | 
						|
	defer C.free(unsafe.Pointer(path))
 | 
						|
	mode := C.CString("r")
 | 
						|
	defer C.free(unsafe.Pointer(mode))
 | 
						|
 | 
						|
	mnttab := C.fopen(path, mode)
 | 
						|
	if mnttab == nil {
 | 
						|
		return nil, fmt.Errorf("Failed to open %s", C.MNTTAB)
 | 
						|
	}
 | 
						|
 | 
						|
	var out []Info
 | 
						|
	var mp C.struct_mnttab
 | 
						|
 | 
						|
	ret := C.getmntent(mnttab, &mp)
 | 
						|
	for ret == 0 {
 | 
						|
		var mountinfo Info
 | 
						|
		mountinfo.Mountpoint = C.GoString(mp.mnt_mountp)
 | 
						|
		mountinfo.Source = C.GoString(mp.mnt_special)
 | 
						|
		mountinfo.FSType = C.GoString(mp.mnt_fstype)
 | 
						|
		mountinfo.Options = C.GoString(mp.mnt_mntopts)
 | 
						|
		out = append(out, mountinfo)
 | 
						|
		ret = C.getmntent(mnttab, &mp)
 | 
						|
	}
 | 
						|
 | 
						|
	C.fclose(mnttab)
 | 
						|
	return out, nil
 | 
						|
}
 | 
						|
 | 
						|
// PID collects the mounts for a specific process ID.
 | 
						|
func PID(pid int) ([]Info, error) {
 | 
						|
	return nil, fmt.Errorf("mountinfo.PID is not implemented on solaris")
 | 
						|
}
 |