Restarted some stuff so I can do it better.
Made a reader that can reade across data blocks if necessary Still can't get things to read right
This commit is contained in:
@@ -10,7 +10,7 @@ import (
|
||||
const (
|
||||
//The inode type from inode.Common.InodeType
|
||||
|
||||
BasicDirectoryType = iota + 1
|
||||
BasicDirectoryType = iota
|
||||
BasicFileType
|
||||
BasicSymlinkType
|
||||
BasicBlockDeviceType
|
||||
@@ -27,65 +27,64 @@ const (
|
||||
)
|
||||
|
||||
//ProcessInode processes the next inode in the given reader
|
||||
func ProcessInode(rdr *io.Reader, blockSize uint32) (*Common, interface{}, error) {
|
||||
func ProcessInode(rdr io.Reader, blockSize uint32) (*Common, interface{}, error) {
|
||||
var inodeHeader Common
|
||||
err := binary.Read(*rdr, binary.LittleEndian, &inodeHeader)
|
||||
err := binary.Read(rdr, binary.LittleEndian, &inodeHeader)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
switch inodeHeader.InodeType {
|
||||
case BasicDirectoryType:
|
||||
var inode BasicDirectory
|
||||
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
||||
err = binary.Read(rdr, binary.LittleEndian, &inode)
|
||||
return &inodeHeader, &inode, err
|
||||
case BasicFileType:
|
||||
inode, err := NewBasicFile(rdr, blockSize)
|
||||
inode, err := NewBasicFile(&rdr, blockSize)
|
||||
return &inodeHeader, inode, err
|
||||
case BasicSymlinkType:
|
||||
inode, err := NewBasicSymlink(rdr)
|
||||
inode, err := NewBasicSymlink(&rdr)
|
||||
return &inodeHeader, inode, err
|
||||
case BasicBlockDeviceType:
|
||||
var inode BasicDevice
|
||||
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
||||
err = binary.Read(rdr, binary.LittleEndian, &inode)
|
||||
return &inodeHeader, inode, err
|
||||
case BasicCharDeviceType:
|
||||
var inode BasicDevice
|
||||
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
||||
err = binary.Read(rdr, binary.LittleEndian, &inode)
|
||||
return &inodeHeader, inode, err
|
||||
case BasicFifoType:
|
||||
var inode BasicIPC
|
||||
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
||||
err = binary.Read(rdr, binary.LittleEndian, &inode)
|
||||
return &inodeHeader, inode, err
|
||||
case BasicSocketType:
|
||||
var inode BasicIPC
|
||||
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
||||
err = binary.Read(rdr, binary.LittleEndian, &inode)
|
||||
return &inodeHeader, inode, err
|
||||
case ExtendedDirectoryType:
|
||||
inode, err := NewExtendedDirectory(rdr)
|
||||
inode, err := NewExtendedDirectory(&rdr)
|
||||
return &inodeHeader, inode, err
|
||||
case ExtendedFileType:
|
||||
inode, err := NewExtendedFile(rdr, blockSize)
|
||||
inode, err := NewExtendedFile(&rdr, blockSize)
|
||||
return &inodeHeader, inode, err
|
||||
case ExtendedSymlinkType:
|
||||
inode, err := NewExtendedSymlink(rdr)
|
||||
inode, err := NewExtendedSymlink(&rdr)
|
||||
return &inodeHeader, inode, err
|
||||
case ExtendedBlockDeviceType:
|
||||
var inode ExtendedDevice
|
||||
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
||||
err = binary.Read(rdr, binary.LittleEndian, &inode)
|
||||
return &inodeHeader, inode, err
|
||||
case ExtendedCharDeviceType:
|
||||
var inode ExtendedDevice
|
||||
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
||||
err = binary.Read(rdr, binary.LittleEndian, &inode)
|
||||
return &inodeHeader, inode, err
|
||||
case ExtendedFifoType:
|
||||
var inode ExtendedIPC
|
||||
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
||||
err = binary.Read(rdr, binary.LittleEndian, &inode)
|
||||
return &inodeHeader, inode, err
|
||||
case ExtendedSocketType:
|
||||
var inode ExtendedIPC
|
||||
err = binary.Read(*rdr, binary.LittleEndian, &inode)
|
||||
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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user