summaryrefslogtreecommitdiff
path: root/pkg/btrfs/btrfsitem/item_inode.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/btrfs/btrfsitem/item_inode.go')
-rw-r--r--pkg/btrfs/btrfsitem/item_inode.go38
1 files changed, 37 insertions, 1 deletions
diff --git a/pkg/btrfs/btrfsitem/item_inode.go b/pkg/btrfs/btrfsitem/item_inode.go
index 4d38380..175b900 100644
--- a/pkg/btrfs/btrfsitem/item_inode.go
+++ b/pkg/btrfs/btrfsitem/item_inode.go
@@ -3,6 +3,7 @@ package btrfsitem
import (
"lukeshu.com/btrfs-tools/pkg/binstruct"
"lukeshu.com/btrfs-tools/pkg/btrfs/internal"
+ "lukeshu.com/btrfs-tools/pkg/util"
)
type Inode struct { // INODE_ITEM=1
@@ -16,7 +17,7 @@ type Inode struct { // INODE_ITEM=1
GID int32 `bin:"off=0x30, siz=0x4"`
Mode int32 `bin:"off=0x34, siz=0x4"`
RDev int64 `bin:"off=0x38, siz=0x8"`
- Flags uint64 `bin:"off=0x40, siz=0x8"`
+ Flags InodeFlags `bin:"off=0x40, siz=0x8"`
Sequence int64 `bin:"off=0x48, siz=0x8"`
Reserved [4]int64 `bin:"off=0x50, siz=0x20"`
ATime internal.Time `bin:"off=0x70, siz=0xc"`
@@ -25,3 +26,38 @@ type Inode struct { // INODE_ITEM=1
OTime internal.Time `bin:"off=0x94, siz=0xc"`
binstruct.End `bin:"off=0xa0"`
}
+
+type InodeFlags uint64
+
+const (
+ BTRFS_INODE_NODATASUM = InodeFlags(1 << iota)
+ BTRFS_INODE_NODATACOW
+ BTRFS_INODE_READONLY
+ BTRFS_INODE_NOCOMPRESS
+ BTRFS_INODE_PREALLOC
+ BTRFS_INODE_SYNC
+ BTRFS_INODE_IMMUTABLE
+ BTRFS_INODE_APPEND
+ BTRFS_INODE_NODUMP
+ BTRFS_INODE_NOATIME
+ BTRFS_INODE_DIRSYNC
+ BTRFS_INODE_COMPRESS
+)
+
+var inodeFlagNames = []string{
+ "NODATASUM",
+ "NODATACOW",
+ "READONLY",
+ "NOCOMPRESS",
+ "PREALLOC",
+ "SYNC",
+ "IMMUTABLE",
+ "APPEND",
+ "NODUMP",
+ "NOATIME",
+ "DIRSYNC",
+ "COMPRESS",
+}
+
+func (f InodeFlags) Has(req InodeFlags) bool { return f&req == req }
+func (f InodeFlags) String() string { return util.BitfieldString(f, inodeFlagNames) }