diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-14 04:45:48 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-14 05:45:45 -0600 |
commit | bb73a2fb7678698353bb995754e8702caa2f6e0a (patch) | |
tree | 0ecd149e8ea61db883c7450accfacf42db08b82e /lib/btrfs/btrfsitem/item_inoderef.go | |
parent | ae42c45061e6e68ed2cdb455ba45a14c39f7cae7 (diff) |
wip ls-files
Diffstat (limited to 'lib/btrfs/btrfsitem/item_inoderef.go')
-rw-r--r-- | lib/btrfs/btrfsitem/item_inoderef.go | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/lib/btrfs/btrfsitem/item_inoderef.go b/lib/btrfs/btrfsitem/item_inoderef.go index b1eaf1b..083f19e 100644 --- a/lib/btrfs/btrfsitem/item_inoderef.go +++ b/lib/btrfs/btrfsitem/item_inoderef.go @@ -12,8 +12,40 @@ import ( ) // key.objectid = inode number of the file -// key.offset = inode number of the parent file -type InodeRef struct { // INODE_REF=12 +// key.offset = inode number of the parent directory +// +// Might have multiple entries if the same file has multiple hardlinks +// in the same directory. +type InodeRefs []InodeRef // INODE_REF=12 + +func (o *InodeRefs) UnmarshalBinary(dat []byte) (int, error) { + *o = nil + n := 0 + for n < len(dat) { + var ref InodeRef + _n, err := binstruct.Unmarshal(dat[n:], &ref) + n += _n + if err != nil { + return n, err + } + *o = append(*o, ref) + } + return n, nil +} + +func (o InodeRefs) MarshalBinary() ([]byte, error) { + var dat []byte + for _, ref := range o { + _dat, err := binstruct.Marshal(ref) + dat = append(dat, _dat...) + if err != nil { + return dat, err + } + } + return dat, nil +} + +type InodeRef struct { Index int64 `bin:"off=0x0, siz=0x8"` NameLen uint16 `bin:"off=0x8, siz=0x2"` // [ignored-when-writing] binstruct.End `bin:"off=0xa"` |