102 lines
4.7 KiB
Go
102 lines
4.7 KiB
Go
package fsutils
|
|
|
|
import (
|
|
`github.com/g0rbe/go-chattr`
|
|
)
|
|
|
|
// https://github.com/torvalds/linux/blob/master/include/uapi/linux/fs.h
|
|
const (
|
|
SecureDelete uint32 = chattr.FS_SECRM_FL // Secure deletion
|
|
UnDelete = chattr.FS_UNRM_FL // Undelete
|
|
CompressFile = chattr.FS_COMPR_FL // Compress file
|
|
SyncUpdatechattr = chattr.FS_SYNC_FL // Synchronous updates
|
|
Immutable = chattr.FS_IMMUTABLE_FL // Immutable file
|
|
AppendOnly = chattr.FS_APPEND_FL // Writes to file may only append
|
|
NoDumpFile = chattr.FS_NODUMP_FL // Do not dump file
|
|
NoUpdateAtime = chattr.FS_NOATIME_FL // Do not update atime
|
|
IsDirty = chattr.FS_DIRTY_FL // Nobody knows what this does, lol.
|
|
CompressedClusters = chattr.FS_COMPRBLK_FL // One or more compressed clusters
|
|
NoCompress = chattr.FS_NOCOMP_FL // Don't compress
|
|
EncFile = chattr.FS_ENCRYPT_FL // Encrypted file
|
|
BtreeFmt = chattr.FS_BTREE_FL // Btree format dir
|
|
HashIdxDir = chattr.FS_INDEX_FL // Hash-indexed directory
|
|
AfsDir = chattr.FS_IMAGIC_FL // AFS directory
|
|
ReservedExt3 = chattr.FS_JOURNAL_DATA_FL // Reserved for ext3
|
|
NoMergeTail = chattr.FS_NOTAIL_FL // File tail should not be merged
|
|
DirSync = chattr.FS_DIRSYNC_FL // dirsync behaviour (directories only)
|
|
DirTop = chattr.FS_TOPDIR_FL // Top of directory hierarchies
|
|
ReservedExt4a = chattr.FS_HUGE_FILE_FL // Reserved for ext4
|
|
Extents = chattr.FS_EXTENT_FL // Extents
|
|
LargeEaInode = chattr.FS_EA_INODE_FL // Inode used for large EA
|
|
ReservedExt4b = chattr.FS_EOFBLOCKS_FL // Reserved for ext4
|
|
NoCOWFile = chattr.FS_NOCOW_FL // Do not cow file
|
|
ReservedExt4c = chattr.FS_INLINE_DATA_FL // Reserved for ext4
|
|
UseParentProjId = chattr.FS_PROJINHERIT_FL // Create with parents projid
|
|
ReservedExt2 = chattr.FS_RESERVED_FL // Reserved for ext2 lib
|
|
)
|
|
|
|
var (
|
|
// AttrNameValueMap contains a mapping of attribute names (as designated by this package) to their flag values.
|
|
AttrNameValueMap map[string]uint32 = map[string]uint32{
|
|
"SecureDelete": SecureDelete,
|
|
"UnDelete": UnDelete,
|
|
"CompressFile": CompressFile,
|
|
"SyncUpdatechattr": SyncUpdatechattr,
|
|
"Immutable": Immutable,
|
|
"AppendOnly": AppendOnly,
|
|
"NoDumpFile": NoDumpFile,
|
|
"NoUpdateAtime": NoUpdateAtime,
|
|
"IsDirty": IsDirty,
|
|
"CompressedClusters": CompressedClusters,
|
|
"NoCompress": NoCompress,
|
|
"EncFile": EncFile,
|
|
"BtreeFmt": BtreeFmt,
|
|
"HashIdxDir": HashIdxDir,
|
|
"AfsDir": AfsDir,
|
|
"ReservedExt3": ReservedExt3,
|
|
"NoMergeTail": NoMergeTail,
|
|
"DirSync": DirSync,
|
|
"DirTop": DirTop,
|
|
"ReservedExt4a": ReservedExt4a,
|
|
"Extents": Extents,
|
|
"LargeEaInode": LargeEaInode,
|
|
"ReservedExt4b": ReservedExt4b,
|
|
"NoCOWFile": NoCOWFile,
|
|
"ReservedExt4c": ReservedExt4c,
|
|
"UseParentProjId": UseParentProjId,
|
|
"ReservedExt2": ReservedExt2,
|
|
}
|
|
/*
|
|
AttrValueNameMap contains a mapping of attribute flags to their names (as designated by this package).
|
|
Note the oddball here, BtreeFmt and HashIdxDir are actually the same value, so be forewarned.
|
|
*/
|
|
AttrValueNameMap map[uint32]string = map[uint32]string{
|
|
SecureDelete: "SecureDelete",
|
|
UnDelete: "UnDelete",
|
|
CompressFile: "CompressFile",
|
|
SyncUpdatechattr: "SyncUpdatechattr",
|
|
Immutable: "Immutable",
|
|
AppendOnly: "AppendOnly",
|
|
NoDumpFile: "NoDumpFile",
|
|
NoUpdateAtime: "NoUpdateAtime",
|
|
IsDirty: "IsDirty",
|
|
CompressedClusters: "CompressedClusters",
|
|
NoCompress: "NoCompress",
|
|
EncFile: "EncFile",
|
|
BtreeFmt: "BtreeFmt|HashIdxDir", // Well THIS is silly and seems like an oversight. Both FS_BTREE_FL and FS_INDEX_FL have the same flag. Confirmed in kernel source.
|
|
AfsDir: "AfsDir",
|
|
ReservedExt3: "ReservedExt3",
|
|
NoMergeTail: "NoMergeTail",
|
|
DirSync: "DirSync",
|
|
DirTop: "DirTop",
|
|
ReservedExt4a: "ReservedExt4a",
|
|
Extents: "Extents",
|
|
LargeEaInode: "LargeEaInode",
|
|
ReservedExt4b: "ReservedExt4b",
|
|
NoCOWFile: "NoCOWFile",
|
|
ReservedExt4c: "ReservedExt4c",
|
|
UseParentProjId: "UseParentProjId",
|
|
ReservedExt2: "ReservedExt2",
|
|
}
|
|
)
|