76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
|
package fuse
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
// Protocol is a FUSE protocol version number.
|
||
|
type Protocol struct {
|
||
|
Major uint32
|
||
|
Minor uint32
|
||
|
}
|
||
|
|
||
|
func (p Protocol) String() string {
|
||
|
return fmt.Sprintf("%d.%d", p.Major, p.Minor)
|
||
|
}
|
||
|
|
||
|
// LT returns whether a is less than b.
|
||
|
func (a Protocol) LT(b Protocol) bool {
|
||
|
return a.Major < b.Major ||
|
||
|
(a.Major == b.Major && a.Minor < b.Minor)
|
||
|
}
|
||
|
|
||
|
// GE returns whether a is greater than or equal to b.
|
||
|
func (a Protocol) GE(b Protocol) bool {
|
||
|
return a.Major > b.Major ||
|
||
|
(a.Major == b.Major && a.Minor >= b.Minor)
|
||
|
}
|
||
|
|
||
|
func (a Protocol) is79() bool {
|
||
|
return a.GE(Protocol{7, 9})
|
||
|
}
|
||
|
|
||
|
// HasAttrBlockSize returns whether Attr.BlockSize is respected by the
|
||
|
// kernel.
|
||
|
func (a Protocol) HasAttrBlockSize() bool {
|
||
|
return a.is79()
|
||
|
}
|
||
|
|
||
|
// HasReadWriteFlags returns whether ReadRequest/WriteRequest
|
||
|
// fields Flags and FileFlags are valid.
|
||
|
func (a Protocol) HasReadWriteFlags() bool {
|
||
|
return a.is79()
|
||
|
}
|
||
|
|
||
|
// HasGetattrFlags returns whether GetattrRequest field Flags is
|
||
|
// valid.
|
||
|
func (a Protocol) HasGetattrFlags() bool {
|
||
|
return a.is79()
|
||
|
}
|
||
|
|
||
|
func (a Protocol) is710() bool {
|
||
|
return a.GE(Protocol{7, 10})
|
||
|
}
|
||
|
|
||
|
// HasOpenNonSeekable returns whether OpenResponse field Flags flag
|
||
|
// OpenNonSeekable is supported.
|
||
|
func (a Protocol) HasOpenNonSeekable() bool {
|
||
|
return a.is710()
|
||
|
}
|
||
|
|
||
|
func (a Protocol) is712() bool {
|
||
|
return a.GE(Protocol{7, 12})
|
||
|
}
|
||
|
|
||
|
// HasUmask returns whether CreateRequest/MkdirRequest/MknodRequest
|
||
|
// field Umask is valid.
|
||
|
func (a Protocol) HasUmask() bool {
|
||
|
return a.is712()
|
||
|
}
|
||
|
|
||
|
// HasInvalidate returns whether InvalidateNode/InvalidateEntry are
|
||
|
// supported.
|
||
|
func (a Protocol) HasInvalidate() bool {
|
||
|
return a.is712()
|
||
|
}
|