Documentation
¶
Index ¶
- Constants
- func AppendDirectoryEntries(volume ReadWriteVolume, sb Superblock, inode MutableInode, ...) error
- func FindDirectoryEntryByInodePtr(volume ReadWriteVolume, sb Superblock, inode Inode, inodePtr InodePtr) (DEPtr, DirectoryEntry, error)
- func FindDirectoryEntryByName(volume ReadWriteVolume, sb Superblock, inode Inode, name string) (DEPtr, DirectoryEntry, error)
- func FreeCluster(volume ReadWriteVolume, sb Superblock, ptr ClusterPtr) error
- func FreeInode(volume ReadWriteVolume, sb Superblock, ptr InodePtr) error
- func GetBitInByte(data byte, pos int8) byte
- func InitRootDirectory(fs *Filesystem, mutableInode *MutableInode) error
- func IsInodeFree(volume ReadWriteVolume, sb Superblock, ptr InodePtr) (bool, error)
- func OccupyCluster(volume ReadWriteVolume, sb Superblock, ptr ClusterPtr) error
- func OccupyClusters(volume ReadWriteVolume, sb Superblock, clusterPtrs []ClusterPtr) error
- func OccupyInode(volume ReadWriteVolume, sb Superblock, ptr InodePtr) error
- func PrepareVolumeFile(path string, size VolumePtr) error
- func SaveDirectoryEntries(volume ReadWriteVolume, sb Superblock, mutableInode MutableInode, ...) error
- func SetBitInByte(data byte, pos int8, value byte) byte
- func StringNameToBytes(name string) [DirectoryEntryNameLength]byte
- type Bitmap
- type ClusterIndexOutOfRange
- type ClusterPtr
- type DEPtr
- type DirectoryEntry
- func NewDirectoryEntry(name string, inodePtr InodePtr) DirectoryEntry
- func ReadAllDirectoryEntries(volume ReadWriteVolume, sb Superblock, inode Inode) ([]DirectoryEntry, error)
- func RemoveDirectoryEntry(volume ReadWriteVolume, sb Superblock, mutableInode MutableInode, name string) (DirectoryEntry, error)
- type DirectoryEntryNotFound
- type DuplicateDirectoryEntry
- type Filesystem
- type Inode
- func (i Inode) GetUsedDirectPtrs() []ClusterPtr
- func (i Inode) GetUsedIndirect1Ptrs(volume ReadWriteVolume, sb Superblock) (map[ClusterPtr][]ClusterPtr, error)
- func (i Inode) GetUsedIndirect2Ptrs(volume ReadWriteVolume, sb Superblock) (map[ClusterPtr]map[ClusterPtr][]ClusterPtr, error)
- func (i Inode) GetUsedPtrs(volume ReadWriteVolume, sb Superblock) ([]ClusterPtr, map[ClusterPtr][]ClusterPtr, ...)
- func (i Inode) IsDir() bool
- func (i Inode) IsFile() bool
- func (i Inode) IsRootDir() bool
- func (i Inode) ReadData(volume ReadWriteVolume, sb Superblock, offset VolumePtr, data []byte) (VolumePtr, error)
- func (i Inode) ResolveDataClusterAddress(volume ReadWriteVolume, sb Superblock, index ClusterPtr) (ClusterPtr, error)
- type InodePtr
- type MutableInode
- func (mi MutableInode) AppendData(volume ReadWriteVolume, sb Superblock, data []byte) (n VolumePtr, err error)
- func (mi MutableInode) Reload(volume ReadWriteVolume, sb Superblock) error
- func (mi MutableInode) Save(volume ReadWriteVolume, sb Superblock) error
- func (mi MutableInode) WriteData(volume ReadWriteVolume, sb Superblock, offset VolumePtr, data []byte) (n VolumePtr, err error)
- type NoFreeClusterAvailableError
- type NoFreeInodeAvailableError
- type OutOfRange
- type ReadWriteVolume
- type ReadableVolume
- type Superblock
- type Volume
- func (v Volume) Close() error
- func (v Volume) Destroy() error
- func (v Volume) ReadByte(volumePtr VolumePtr) (byte, error)
- func (v Volume) ReadBytes(volumePtr VolumePtr, data []byte) error
- func (v Volume) ReadObject(volumePtr VolumePtr, data interface{}) (VolumeObject, error)
- func (v Volume) ReadStruct(volumePtr VolumePtr, data interface{}) error
- func (v Volume) Size() (VolumePtr, error)
- func (v Volume) Truncate() error
- func (v Volume) WriteByte(volumePtr VolumePtr, data byte) error
- func (v Volume) WriteStruct(volumePtr VolumePtr, data interface{}) error
- type VolumeObject
- func FindFreeClusters(volume ReadWriteVolume, sb Superblock, count ClusterPtr, occupy bool) ([]VolumeObject, error)
- func FindFreeInode(volume ReadWriteVolume, sb Superblock, occupy bool) (VolumeObject, error)
- func NewVolumeObject(volumePtr VolumePtr, volume ReadWriteVolume, object interface{}) VolumeObject
- type VolumePtr
- func Allocate(mutableInode MutableInode, volume ReadWriteVolume, sb Superblock, ...) (VolumePtr, error)
- func ClusterPtrToVolumePtr(sb Superblock, ptr ClusterPtr) VolumePtr
- func InodePtrToVolumePtr(sb Superblock, ptr InodePtr) VolumePtr
- func LoadClusterChunk(volume ReadWriteVolume, sb Superblock, offset VolumePtr, data []byte) (VolumePtr, error)
- func NeededMemoryForBitmap(size VolumePtr) VolumePtr
- func Shrink(mutableInode MutableInode, volume ReadWriteVolume, sb Superblock, ...) (VolumePtr, error)
- type WritableVolume
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 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 SaveDirectoryEntries ¶
func SaveDirectoryEntries(volume ReadWriteVolume, sb Superblock, mutableInode MutableInode, directoryEntries []DirectoryEntry) error
func StringNameToBytes ¶
func StringNameToBytes(name string) [DirectoryEntryNameLength]byte
Types ¶
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 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 (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) 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 ¶
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 ¶
func (n NoFreeClusterAvailableError) Error() string
type NoFreeInodeAvailableError ¶
type NoFreeInodeAvailableError struct{}
func (NoFreeInodeAvailableError) Error ¶
func (n NoFreeInodeAvailableError) Error() string
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 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 (Volume) ReadObject ¶
func (v Volume) ReadObject(volumePtr VolumePtr, data interface{}) (VolumeObject, error)
func (Volume) ReadStruct ¶
func (Volume) WriteStruct ¶
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 Shrink ¶
func Shrink(mutableInode MutableInode, volume ReadWriteVolume, sb Superblock, targetSize VolumePtr) (VolumePtr, error)
Click to show internal directories.
Click to hide internal directories.