summaryrefslogtreecommitdiff
path: root/pkg/btrfs/btrfsitem/item_dir.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/btrfs/btrfsitem/item_dir.go')
-rw-r--r--pkg/btrfs/btrfsitem/item_dir.go115
1 files changed, 0 insertions, 115 deletions
diff --git a/pkg/btrfs/btrfsitem/item_dir.go b/pkg/btrfs/btrfsitem/item_dir.go
deleted file mode 100644
index 2c4c75b..0000000
--- a/pkg/btrfs/btrfsitem/item_dir.go
+++ /dev/null
@@ -1,115 +0,0 @@
-package btrfsitem
-
-import (
- "fmt"
- "hash/crc32"
-
- "lukeshu.com/btrfs-tools/pkg/binstruct"
- "lukeshu.com/btrfs-tools/pkg/btrfs/internal"
-)
-
-// key.objectid = inode of directory containing this entry
-// key.offset =
-// for DIR_ITEM and XATTR_ITEM = NameHash(name)
-// for DIR_INDEX = index id in the directory (starting at 2, because "." and "..")
-type DirEntries []DirEntry // DIR_ITEM=84 DIR_INDEX=96 XATTR_ITEM=24
-
-func NameHash(dat []byte) uint64 {
- return uint64(^crc32.Update(1, crc32.MakeTable(crc32.Castagnoli), dat))
-}
-
-func (o *DirEntries) UnmarshalBinary(dat []byte) (int, error) {
- *o = nil
- n := 0
- for n < len(dat) {
- var ref DirEntry
- _n, err := binstruct.Unmarshal(dat, &ref)
- n += _n
- if err != nil {
- return n, err
- }
- *o = append(*o, ref)
- }
- return n, nil
-}
-
-func (o DirEntries) MarshalBinary() ([]byte, error) {
- var ret []byte
- for _, ref := range o {
- bs, err := binstruct.Marshal(ref)
- ret = append(ret, bs...)
- if err != nil {
- return ret, err
- }
- }
- return ret, nil
-}
-
-type DirEntry struct {
- Location internal.Key `bin:"off=0x0, siz=0x11"`
- TransID int64 `bin:"off=0x11, siz=8"`
- DataLen uint16 `bin:"off=0x19, siz=2"` // [ignored-when-writing]
- NameLen uint16 `bin:"off=0x1b, siz=2"` // [ignored-when-writing]
- Type FileType `bin:"off=0x1d, siz=1"`
- binstruct.End `bin:"off=0x1e"`
- Data []byte `bin:"-"`
- Name []byte `bin:"-"`
-}
-
-func (o *DirEntry) UnmarshalBinary(dat []byte) (int, error) {
- n, err := binstruct.UnmarshalWithoutInterface(dat, o)
- if err != nil {
- return n, err
- }
- o.Data = dat[n : n+int(o.DataLen)]
- n += int(o.DataLen)
- o.Name = dat[n : n+int(o.NameLen)]
- n += int(o.NameLen)
- return n, nil
-}
-
-func (o DirEntry) MarshalBinary() ([]byte, error) {
- o.DataLen = uint16(len(o.Data))
- o.NameLen = uint16(len(o.Name))
- dat, err := binstruct.MarshalWithoutInterface(o)
- if err != nil {
- return dat, err
- }
- dat = append(dat, o.Data...)
- dat = append(dat, o.Name...)
- return dat, nil
-}
-
-type FileType uint8
-
-const (
- FT_UNKNOWN = FileType(0)
- FT_REG_FILE = FileType(1)
- FT_DIR = FileType(2)
- FT_CHRDEV = FileType(3)
- FT_BLKDEV = FileType(4)
- FT_FIFO = FileType(5)
- FT_SOCK = FileType(6)
- FT_SYMLINK = FileType(7)
- FT_XATTR = FileType(8)
-
- FT_MAX = FileType(9)
-)
-
-func (ft FileType) String() string {
- names := map[FileType]string{
- FT_UNKNOWN: "UNKNOWN",
- FT_REG_FILE: "FILE", // XXX
- FT_DIR: "DIR",
- FT_CHRDEV: "CHRDEV",
- FT_BLKDEV: "BLKDEV",
- FT_FIFO: "FIFO",
- FT_SOCK: "SOCK",
- FT_SYMLINK: "SYMLINK",
- FT_XATTR: "XATTR",
- }
- if name, ok := names[ft]; ok {
- return name
- }
- return fmt.Sprintf("DIR_ITEM.%d", uint8(ft))
-}