90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
package inode
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"errors"
|
|
"io"
|
|
"strconv"
|
|
)
|
|
|
|
const (
|
|
basicDirectory = iota + 1
|
|
basicFile
|
|
basicSymlink
|
|
basicBlockDevice
|
|
basicCharDevice
|
|
basicFifo
|
|
basicSocket
|
|
extendedDirectory
|
|
extendedFile
|
|
extendedSymlink
|
|
extendedBlockDevice
|
|
extendedCharDevice
|
|
extendedFifo
|
|
extendedSocket
|
|
)
|
|
|
|
func ProcessInode(rdr *io.Reader) (*InodeCommon, interface{}, error) {
|
|
var inodeHeader InodeCommon
|
|
err := binary.Read(*rdr, binary.LittleEndian, &inodeHeader)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
switch inodeHeader.InodeType {
|
|
case basicDirectory:
|
|
var inode BasicDirectory
|
|
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
return &inodeHeader, inode, err
|
|
case basicFile:
|
|
var inode BasicFile
|
|
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
return &inodeHeader, inode, err
|
|
case basicSymlink:
|
|
inode, err := NewBasicSymlink(rdr)
|
|
return &inodeHeader, inode, err
|
|
// case basicFile:
|
|
// var inode BasicFile
|
|
// err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
// return &inodeHeader, inode, err
|
|
// case basicFile:
|
|
// var inode BasicFile
|
|
// err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
// return &inodeHeader, inode, err
|
|
// case basicFile:
|
|
// var inode BasicFile
|
|
// err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
// return &inodeHeader, inode, err
|
|
// case basicFile:
|
|
// var inode BasicFile
|
|
// err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
// return &inodeHeader, inode, err
|
|
// case basicFile:
|
|
// var inode BasicFile
|
|
// err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
// return &inodeHeader, inode, err
|
|
// case basicFile:
|
|
// var inode BasicFile
|
|
// err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
// return &inodeHeader, inode, err
|
|
// case basicFile:
|
|
// var inode BasicFile
|
|
// err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
// return &inodeHeader, inode, err
|
|
// case basicFile:
|
|
// var inode BasicFile
|
|
// err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
// return &inodeHeader, inode, err
|
|
// case basicFile:
|
|
// var inode BasicFile
|
|
// err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
// return &inodeHeader, inode, err
|
|
// case basicFile:
|
|
// var inode BasicFile
|
|
// err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
|
// return &inodeHeader, inode, err
|
|
//TODO: implement ALL cases
|
|
default:
|
|
return nil, nil, errors.New("Inode type is unrecognized: " + strconv.FormatInt(int64(inodeHeader.InodeType), 2))
|
|
}
|
|
}
|