// +build solaris,cgo package graphdriver /* #include #include static inline struct statvfs *getstatfs(char *s) { struct statvfs *buf; int err; buf = (struct statvfs *)malloc(sizeof(struct statvfs)); err = statvfs(s, buf); return buf; } */ import "C" import ( "path/filepath" "unsafe" log "github.com/Sirupsen/logrus" "github.com/pkg/errors" ) const ( // FsMagicZfs filesystem id for Zfs FsMagicZfs = FsMagic(0x2fc12fc1) ) var ( // Slice of drivers that should be used in an order priority = []string{ "zfs", } // FsNames maps filesystem id to name of the filesystem. FsNames = map[FsMagic]string{ FsMagicZfs: "zfs", } ) // GetFSMagic returns the filesystem id given the path. func GetFSMagic(rootpath string) (FsMagic, error) { return 0, nil } // Mounted checks if the given path is mounted as the fs type //Solaris supports only ZFS for now func Mounted(fsType FsMagic, mountPath string) (bool, error) { cs := C.CString(filepath.Dir(mountPath)) buf := C.getstatfs(cs) // on Solaris buf.f_basetype contains ['z', 'f', 's', 0 ... ] if (buf.f_basetype[0] != 122) || (buf.f_basetype[1] != 102) || (buf.f_basetype[2] != 115) || (buf.f_basetype[3] != 0) { log.Debugf("[zfs] no zfs dataset found for rootdir '%s'", mountPath) C.free(unsafe.Pointer(buf)) return false, errors.Wrapf(graphdriver.ErrPrerequisites, "no zfs dataset found for rootdir '%s'", mountPath) } C.free(unsafe.Pointer(buf)) C.free(unsafe.Pointer(cs)) return true, nil }