vfs

package
v0.0.0-...-a71acd6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 2, 2020 License: GPL-2.0 Imports: 8 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Free     = 0
	Occupied = 1
)
View Source
const (
	InodeFileType      = 0
	InodeDirectoryType = 1
	InodeRootInodeType = 2
)
View Source
const DirectoryEntryNameLength = 12
View Source
const InodeDirectCount = 5
View Source
const Unused = ClusterPtr(-1)

Variables

This section is empty.

Functions

func AppendDirectoryEntries

func AppendDirectoryEntries(volume ReadWriteVolume, sb Superblock, inode MutableInode, directoryEntries ...DirectoryEntry) error

func FindDirectoryEntryByInodePtr

func FindDirectoryEntryByInodePtr(volume ReadWriteVolume, sb Superblock, inode Inode, inodePtr InodePtr) (DEPtr, DirectoryEntry, error)

func FindDirectoryEntryByName

func FindDirectoryEntryByName(volume ReadWriteVolume, sb Superblock, inode Inode, name string) (DEPtr, DirectoryEntry, error)

func FreeCluster

func FreeCluster(volume ReadWriteVolume, sb Superblock, ptr ClusterPtr) error

func FreeInode

func FreeInode(volume ReadWriteVolume, sb Superblock, ptr InodePtr) error

func GetBitInByte

func GetBitInByte(data byte, pos int8) byte

func InitRootDirectory

func InitRootDirectory(fs *Filesystem, mutableInode *MutableInode) error

func IsInodeFree

func IsInodeFree(volume ReadWriteVolume, sb Superblock, ptr InodePtr) (bool, error)

func OccupyCluster

func OccupyCluster(volume ReadWriteVolume, sb Superblock, ptr ClusterPtr) error

func OccupyClusters

func OccupyClusters(volume ReadWriteVolume, sb Superblock, clusterPtrs []ClusterPtr) error

func OccupyInode

func OccupyInode(volume ReadWriteVolume, sb Superblock, ptr InodePtr) error

func PrepareVolumeFile

func PrepareVolumeFile(path string, size VolumePtr) error

func SaveDirectoryEntries

func SaveDirectoryEntries(volume ReadWriteVolume, sb Superblock, mutableInode MutableInode, directoryEntries []DirectoryEntry) error

func SetBitInByte

func SetBitInByte(data byte, pos int8, value byte) byte

func StringNameToBytes

func StringNameToBytes(name string) [DirectoryEntryNameLength]byte

Types

type Bitmap

type Bitmap []byte

func NewBitmap

func NewBitmap(size VolumePtr) Bitmap

func (Bitmap) GetBit

func (b Bitmap) GetBit(position VolumePtr) (byte, error)

func (Bitmap) Len

func (b Bitmap) Len() int

func (Bitmap) Ones

func (b Bitmap) Ones() int

func (Bitmap) SetBit

func (b Bitmap) SetBit(position VolumePtr, value byte) error

func (Bitmap) Zeros

func (b Bitmap) Zeros() int

type ClusterIndexOutOfRange

type ClusterIndexOutOfRange struct {
	// contains filtered or unexported fields
}

func (ClusterIndexOutOfRange) Error

func (c ClusterIndexOutOfRange) Error() string

type ClusterPtr

type ClusterPtr int32

func ConvertByteToClusterPtr

func ConvertByteToClusterPtr(data []byte) ClusterPtr

func GetClusterPtrsFromBinary

func GetClusterPtrsFromBinary(p []byte) []ClusterPtr

func NeededClusters

func NeededClusters(sb Superblock, size VolumePtr) ClusterPtr

func VolumePtrToClusterPtr

func VolumePtrToClusterPtr(sb Superblock, ptr VolumePtr) ClusterPtr

type DEPtr

type DEPtr int32

type DirectoryEntry

type DirectoryEntry struct {
	Name     [DirectoryEntryNameLength]byte
	InodePtr InodePtr
}

func NewDirectoryEntry

func NewDirectoryEntry(name string, inodePtr InodePtr) DirectoryEntry

func ReadAllDirectoryEntries

func ReadAllDirectoryEntries(volume ReadWriteVolume, sb Superblock, inode Inode) ([]DirectoryEntry, error)

func RemoveDirectoryEntry

func RemoveDirectoryEntry(volume ReadWriteVolume, sb Superblock, mutableInode MutableInode, name string) (DirectoryEntry, error)

type DirectoryEntryNotFound

type DirectoryEntryNotFound struct {
	Name string
}

func (DirectoryEntryNotFound) Error

func (d DirectoryEntryNotFound) Error() string

type DuplicateDirectoryEntry

type DuplicateDirectoryEntry struct{}

func (DuplicateDirectoryEntry) Error

func (d DuplicateDirectoryEntry) Error() string

type Filesystem

type Filesystem struct {
	Volume          Volume
	Superblock      Superblock
	RootInodePtr    InodePtr
	CurrentInodePtr InodePtr
}

func NewFilesystem

func NewFilesystem(volume Volume, clusterSize int16) (Filesystem, error)

func NewFilesystemFromSuperblock

func NewFilesystemFromSuperblock(volume Volume, sb Superblock) Filesystem

func (Filesystem) ReadCluster

func (f Filesystem) ReadCluster(cp ClusterPtr, data interface{}) error

func (Filesystem) WriteStructureToVolume

func (f Filesystem) WriteStructureToVolume() error

type Inode

type Inode struct {
	Type              byte
	Size              VolumePtr
	AllocatedClusters ClusterPtr
	Direct1           ClusterPtr
	Direct2           ClusterPtr
	Direct3           ClusterPtr
	Direct4           ClusterPtr
	Direct5           ClusterPtr
	Indirect1         ClusterPtr
	Indirect2         ClusterPtr
}

func CreateNewDirectory

func CreateNewDirectory(volume ReadWriteVolume, sb Superblock, parentInodePtr InodePtr, parent MutableInode, name string) (Inode, error)

func NewInode

func NewInode() Inode

func (Inode) GetUsedDirectPtrs

func (i Inode) GetUsedDirectPtrs() []ClusterPtr

func (Inode) GetUsedIndirect1Ptrs

func (i Inode) GetUsedIndirect1Ptrs(volume ReadWriteVolume, sb Superblock) (map[ClusterPtr][]ClusterPtr, error)

func (Inode) GetUsedIndirect2Ptrs

func (i Inode) GetUsedIndirect2Ptrs(volume ReadWriteVolume, sb Superblock) (map[ClusterPtr]map[ClusterPtr][]ClusterPtr, error)

func (Inode) GetUsedPtrs

func (i Inode) GetUsedPtrs(volume ReadWriteVolume, sb Superblock) (
	[]ClusterPtr,
	map[ClusterPtr][]ClusterPtr,
	map[ClusterPtr]map[ClusterPtr][]ClusterPtr,
	error)

func (Inode) IsDir

func (i Inode) IsDir() bool

func (Inode) IsFile

func (i Inode) IsFile() bool

func (Inode) IsRootDir

func (i Inode) IsRootDir() bool

func (Inode) ReadData

func (i Inode) ReadData(volume ReadWriteVolume, sb Superblock, offset VolumePtr, data []byte) (VolumePtr, error)

func (Inode) ResolveDataClusterAddress

func (i Inode) ResolveDataClusterAddress(volume ReadWriteVolume, sb Superblock, index ClusterPtr) (ClusterPtr, error)

type InodePtr

type InodePtr int32

func VolumePtrToInodePtr

func VolumePtrToInodePtr(sb Superblock, ptr VolumePtr) InodePtr

type MutableInode

type MutableInode struct {
	Inode    *Inode
	InodePtr InodePtr
}

func LoadMutableInode

func LoadMutableInode(volume ReadWriteVolume, sb Superblock, inodePtr InodePtr) (MutableInode, error)

func (MutableInode) AppendData

func (mi MutableInode) AppendData(volume ReadWriteVolume, sb Superblock, data []byte) (n VolumePtr, err error)

func (MutableInode) Reload

func (mi MutableInode) Reload(volume ReadWriteVolume, sb Superblock) error

func (MutableInode) Save

func (mi MutableInode) Save(volume ReadWriteVolume, sb Superblock) error

func (MutableInode) WriteData

func (mi MutableInode) WriteData(volume ReadWriteVolume, sb Superblock, offset VolumePtr, data []byte) (n VolumePtr, err error)

type NoFreeClusterAvailableError

type NoFreeClusterAvailableError struct{}

func (NoFreeClusterAvailableError) Error

type NoFreeInodeAvailableError

type NoFreeInodeAvailableError struct{}

func (NoFreeInodeAvailableError) Error

type OutOfRange

type OutOfRange struct {
	// contains filtered or unexported fields
}

func (OutOfRange) Error

func (o OutOfRange) Error() string

type ReadWriteVolume

type ReadWriteVolume interface {
	WritableVolume
	ReadableVolume
}

type ReadableVolume

type ReadableVolume interface {
	ReadByte(volumePtr VolumePtr) (byte, error)
	ReadBytes(volumePtr VolumePtr, data []byte) error
	ReadStruct(volumePtr VolumePtr, data interface{}) error
	ReadObject(volumePtr VolumePtr, data interface{}) (VolumeObject, error)
}

type Superblock

type Superblock struct {
	Signature                 [9]byte
	VolumeDescriptor          [251]byte
	DiskSize                  VolumePtr
	ClusterSize               int16
	ClusterCount              ClusterPtr
	ClusterBitmapStartAddress VolumePtr
	InodeBitmapStartAddress   VolumePtr
	InodesStartAddress        VolumePtr
	DataStartAddress          VolumePtr
}

func NewPreparedSuperblock

func NewPreparedSuperblock(signature, volumeDescriptor string, diskSize VolumePtr, clusterSize int16) Superblock

type Volume

type Volume struct {
	// contains filtered or unexported fields
}

func NewVolume

func NewVolume(path string) (Volume, error)

func (Volume) Close

func (v Volume) Close() error

func (Volume) Destroy

func (v Volume) Destroy() error

func (Volume) ReadByte

func (v Volume) ReadByte(volumePtr VolumePtr) (byte, error)

func (Volume) ReadBytes

func (v Volume) ReadBytes(volumePtr VolumePtr, data []byte) error

func (Volume) ReadObject

func (v Volume) ReadObject(volumePtr VolumePtr, data interface{}) (VolumeObject, error)

func (Volume) ReadStruct

func (v Volume) ReadStruct(volumePtr VolumePtr, data interface{}) error

func (Volume) Size

func (v Volume) Size() (VolumePtr, error)

func (Volume) Truncate

func (v Volume) Truncate() error

func (Volume) WriteByte

func (v Volume) WriteByte(volumePtr VolumePtr, data byte) error

func (Volume) WriteStruct

func (v Volume) WriteStruct(volumePtr VolumePtr, data interface{}) error

type VolumeObject

type VolumeObject struct {
	VolumePtr VolumePtr
	Volume    ReadWriteVolume
	Object    interface{}
}

func FindFreeClusters

func FindFreeClusters(volume ReadWriteVolume, sb Superblock, count ClusterPtr, occupy bool) ([]VolumeObject, error)

func FindFreeInode

func FindFreeInode(volume ReadWriteVolume, sb Superblock, occupy bool) (VolumeObject, error)

func NewVolumeObject

func NewVolumeObject(volumePtr VolumePtr, volume ReadWriteVolume, object interface{}) VolumeObject

func (VolumeObject) Save

func (vo VolumeObject) Save() error

type VolumePtr

type VolumePtr int64

func Allocate

func Allocate(mutableInode MutableInode, volume ReadWriteVolume, sb Superblock, size VolumePtr) (VolumePtr, error)

func ClusterPtrToVolumePtr

func ClusterPtrToVolumePtr(sb Superblock, ptr ClusterPtr) VolumePtr

func InodePtrToVolumePtr

func InodePtrToVolumePtr(sb Superblock, ptr InodePtr) VolumePtr

func LoadClusterChunk

func LoadClusterChunk(volume ReadWriteVolume, sb Superblock, offset VolumePtr, data []byte) (VolumePtr, error)

func NeededMemoryForBitmap

func NeededMemoryForBitmap(size VolumePtr) VolumePtr

func Shrink

func Shrink(mutableInode MutableInode, volume ReadWriteVolume, sb Superblock, targetSize VolumePtr) (VolumePtr, error)

type WritableVolume

type WritableVolume interface {
	WriteStruct(volumePtr VolumePtr, data interface{}) error
	WriteByte(volumePtr VolumePtr, data byte) error
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL