package lscolors
import (
)
type feature int
const (
featureInvalid feature = iota
featureOrphanedSymlink
featureSymlink
featureMultiHardLink
featureNamedPipe
featureSocket
featureDoor
featureBlockDevice
featureCharDevice
featureWorldWritableStickyDirectory
featureWorldWritableDirectory
featureStickyDirectory
featureDirectory
featureCapability
featureSetuid
featureSetgid
featureExecutable
featureRegular
)
const (
worldWritable = 02
executable = 0111
)
func ( string, bool) (feature, error) {
, := os.Lstat()
if != nil {
return featureInvalid,
}
:= .Mode()
if is(, os.ModeSymlink) {
, := os.Stat()
if != nil {
return featureOrphanedSymlink, nil
}
return featureSymlink, nil
}
if && isMultiHardlink() {
return featureMultiHardLink, nil
}
switch {
case is(, os.ModeNamedPipe):
return featureNamedPipe, nil
case is(, os.ModeSocket):
return featureSocket, nil
case isDoor():
return featureDoor, nil
case is(, os.ModeCharDevice):
return featureCharDevice, nil
case is(, os.ModeDevice):
return featureBlockDevice, nil
case is(, os.ModeDir):
:= .Perm()
switch {
case is(, os.ModeSticky) && is(, worldWritable):
return featureWorldWritableStickyDirectory, nil
case is(, worldWritable):
return featureWorldWritableDirectory, nil
case is(, os.ModeSticky):
return featureStickyDirectory, nil
default:
return featureDirectory, nil
}
}
switch {
case is(, os.ModeSetuid):
return featureSetuid, nil
case is(, os.ModeSetgid):
return featureSetgid, nil
case &executable != 0:
return featureExecutable, nil
}
return featureRegular, nil
}
func (, os.FileMode) bool {
return & ==
}