add filesystem attr (on linux) support
This commit is contained in:
43
fsutils/funcs_fsattrs.go
Normal file
43
fsutils/funcs_fsattrs.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package fsutils
|
||||
|
||||
import (
|
||||
`os`
|
||||
`reflect`
|
||||
|
||||
`github.com/g0rbe/go-chattr`
|
||||
`r00t2.io/sysutils/paths`
|
||||
)
|
||||
|
||||
func (f *FsAttrs) Apply(path string) (err error) {
|
||||
|
||||
var file *os.File
|
||||
var reflectVal reflect.Value
|
||||
var fieldVal reflect.Value
|
||||
|
||||
var myPath string = path
|
||||
|
||||
if err = paths.RealPath(&myPath); err != nil {
|
||||
return
|
||||
}
|
||||
if file, err = os.Open(myPath); err != nil {
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
reflectVal = reflect.ValueOf(*f)
|
||||
|
||||
for attrNm, attrVal := range AttrNameValueMap {
|
||||
fieldVal = reflectVal.FieldByName(attrNm)
|
||||
if fieldVal.Bool() {
|
||||
if err = chattr.SetAttr(file, attrVal); err != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if err = chattr.UnsetAttr(file, attrVal); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user