mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
REFACTOR: Final cleanup of DiscImageChef.Filesystems.
This commit is contained in:
@@ -46,6 +46,122 @@ namespace DiscImageChef.Filesystems
|
||||
{
|
||||
const int SB_POS = 0x400;
|
||||
|
||||
/// <summary>
|
||||
/// Same magic for ext2, ext3 and ext4
|
||||
/// </summary>
|
||||
const ushort EXT2_MAGIC = 0xEF53;
|
||||
|
||||
const ushort EXT2_MAGIC_OLD = 0xEF51;
|
||||
|
||||
// ext? filesystem states
|
||||
/// <summary>Cleanly-unmounted volume</summary>
|
||||
const ushort EXT2_VALID_FS = 0x0001;
|
||||
/// <summary>Dirty volume</summary>
|
||||
const ushort EXT2_ERROR_FS = 0x0002;
|
||||
/// <summary>Recovering orphan files</summary>
|
||||
const ushort EXT3_ORPHAN_FS = 0x0004;
|
||||
|
||||
// ext? default mount flags
|
||||
/// <summary>Enable debugging messages</summary>
|
||||
const uint EXT2_DEFM_DEBUG = 0x000001;
|
||||
/// <summary>Emulates BSD behaviour on new file creation</summary>
|
||||
const uint EXT2_DEFM_BSDGROUPS = 0x000002;
|
||||
/// <summary>Enable user xattrs</summary>
|
||||
const uint EXT2_DEFM_XATTR_USER = 0x000004;
|
||||
/// <summary>Enable POSIX ACLs</summary>
|
||||
const uint EXT2_DEFM_ACL = 0x000008;
|
||||
/// <summary>Use 16bit UIDs</summary>
|
||||
const uint EXT2_DEFM_UID16 = 0x000010;
|
||||
/// <summary>Journal data mode</summary>
|
||||
const uint EXT3_DEFM_JMODE_DATA = 0x000040;
|
||||
/// <summary>Journal ordered mode</summary>
|
||||
const uint EXT3_DEFM_JMODE_ORDERED = 0x000080;
|
||||
/// <summary>Journal writeback mode</summary>
|
||||
const uint EXT3_DEFM_JMODE_WBACK = 0x000100;
|
||||
|
||||
// Behaviour on errors
|
||||
/// <summary>Continue execution</summary>
|
||||
const ushort EXT2_ERRORS_CONTINUE = 1;
|
||||
/// <summary>Remount fs read-only</summary>
|
||||
const ushort EXT2_ERRORS_RO = 2;
|
||||
/// <summary>Panic</summary>
|
||||
const ushort EXT2_ERRORS_PANIC = 3;
|
||||
|
||||
// OS codes
|
||||
const uint EXT2_OS_LINUX = 0;
|
||||
const uint EXT2_OS_HURD = 1;
|
||||
const uint EXT2_OS_MASIX = 2;
|
||||
const uint EXT2_OS_FREEBSD = 3;
|
||||
const uint EXT2_OS_LITES = 4;
|
||||
|
||||
// Revision levels
|
||||
/// <summary>The good old (original) format</summary>
|
||||
const uint EXT2_GOOD_OLD_REV = 0;
|
||||
/// <summary>V2 format w/ dynamic inode sizes</summary>
|
||||
const uint EXT2_DYNAMIC_REV = 1;
|
||||
|
||||
// Compatible features
|
||||
/// <summary>Pre-allocate directories</summary>
|
||||
const uint EXT2_FEATURE_COMPAT_DIR_PREALLOC = 0x00000001;
|
||||
/// <summary>imagic inodes ?</summary>
|
||||
const uint EXT2_FEATURE_COMPAT_IMAGIC_INODES = 0x00000002;
|
||||
/// <summary>Has journal (it's ext3)</summary>
|
||||
const uint EXT3_FEATURE_COMPAT_HAS_JOURNAL = 0x00000004;
|
||||
/// <summary>EA blocks</summary>
|
||||
const uint EXT2_FEATURE_COMPAT_EXT_ATTR = 0x00000008;
|
||||
/// <summary>Online filesystem resize reservations</summary>
|
||||
const uint EXT2_FEATURE_COMPAT_RESIZE_INO = 0x00000010;
|
||||
/// <summary>Can use hashed indexes on directories</summary>
|
||||
const uint EXT2_FEATURE_COMPAT_DIR_INDEX = 0x00000020;
|
||||
|
||||
// Read-only compatible features
|
||||
/// <summary>Reduced number of superblocks</summary>
|
||||
const uint EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER = 0x00000001;
|
||||
/// <summary>Can have files bigger than 2GiB</summary>
|
||||
const uint EXT2_FEATURE_RO_COMPAT_LARGE_FILE = 0x00000002;
|
||||
/// <summary>Use B-Tree for directories</summary>
|
||||
const uint EXT2_FEATURE_RO_COMPAT_BTREE_DIR = 0x00000004;
|
||||
/// <summary>Can have files bigger than 2TiB *ext4*</summary>
|
||||
const uint EXT4_FEATURE_RO_COMPAT_HUGE_FILE = 0x00000008;
|
||||
/// <summary>Group descriptor checksums and sparse inode table *ext4*</summary>
|
||||
const uint EXT4_FEATURE_RO_COMPAT_GDT_CSUM = 0x00000010;
|
||||
/// <summary>More than 32000 directory entries *ext4*</summary>
|
||||
const uint EXT4_FEATURE_RO_COMPAT_DIR_NLINK = 0x00000020;
|
||||
/// <summary>Nanosecond timestamps and creation time *ext4*</summary>
|
||||
const uint EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE = 0x00000040;
|
||||
|
||||
// Incompatible features
|
||||
/// <summary>Uses compression</summary>
|
||||
const uint EXT2_FEATURE_INCOMPAT_COMPRESSION = 0x00000001;
|
||||
/// <summary>Filetype in directory entries</summary>
|
||||
const uint EXT2_FEATURE_INCOMPAT_FILETYPE = 0x00000002;
|
||||
/// <summary>Journal needs recovery *ext3*</summary>
|
||||
const uint EXT3_FEATURE_INCOMPAT_RECOVER = 0x00000004;
|
||||
/// <summary>Has journal on another device *ext3*</summary>
|
||||
const uint EXT3_FEATURE_INCOMPAT_JOURNAL_DEV = 0x00000008;
|
||||
/// <summary>Reduced block group backups</summary>
|
||||
const uint EXT2_FEATURE_INCOMPAT_META_BG = 0x00000010;
|
||||
/// <summary>Volume use extents *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_EXTENTS = 0x00000040;
|
||||
/// <summary>Supports volumes bigger than 2^32 blocks *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_64BIT = 0x00000080;
|
||||
/// <summary>Multi-mount protection *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_MMP = 0x00000100;
|
||||
/// <summary>Flexible block group metadata location *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_FLEX_BG = 0x00000200;
|
||||
/// <summary>EA in inode *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_EA_INODE = 0x00000400;
|
||||
/// <summary>Data can reside in directory entry *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_DIRDATA = 0x00001000;
|
||||
|
||||
// Miscellaneous filesystem flags
|
||||
/// <summary>Signed dirhash in use</summary>
|
||||
const uint EXT2_FLAGS_SIGNED_HASH = 0x00000001;
|
||||
/// <summary>Unsigned dirhash in use</summary>
|
||||
const uint EXT2_FLAGS_UNSIGNED_HASH = 0x00000002;
|
||||
/// <summary>Testing development code</summary>
|
||||
const uint EXT2_FLAGS_TEST_FILESYS = 0x00000004;
|
||||
|
||||
public ext2FS()
|
||||
{
|
||||
Name = "Linux extended Filesystem 2, 3 and 4";
|
||||
@@ -87,8 +203,7 @@ namespace DiscImageChef.Filesystems
|
||||
return magic == EXT2_MAGIC || magic == EXT2_MAGIC_OLD;
|
||||
}
|
||||
|
||||
public override void GetInformation(ImagePlugin imagePlugin, Partition partition,
|
||||
out string information)
|
||||
public override void GetInformation(ImagePlugin imagePlugin, Partition partition, out string information)
|
||||
{
|
||||
information = "";
|
||||
|
||||
@@ -115,7 +230,8 @@ namespace DiscImageChef.Filesystems
|
||||
|
||||
XmlFsType = new FileSystemType();
|
||||
|
||||
switch(supblk.magic) {
|
||||
switch(supblk.magic)
|
||||
{
|
||||
case EXT2_MAGIC_OLD:
|
||||
sb.AppendLine("ext2 (old) filesystem");
|
||||
XmlFsType.Type = "ext2";
|
||||
@@ -123,12 +239,14 @@ namespace DiscImageChef.Filesystems
|
||||
case EXT2_MAGIC:
|
||||
ext3 |= (supblk.ftr_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) == EXT3_FEATURE_COMPAT_HAS_JOURNAL ||
|
||||
(supblk.ftr_incompat & EXT3_FEATURE_INCOMPAT_RECOVER) == EXT3_FEATURE_INCOMPAT_RECOVER ||
|
||||
(supblk.ftr_incompat & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) == EXT3_FEATURE_INCOMPAT_JOURNAL_DEV;
|
||||
(supblk.ftr_incompat & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) ==
|
||||
EXT3_FEATURE_INCOMPAT_JOURNAL_DEV;
|
||||
|
||||
if((supblk.ftr_ro_compat & EXT4_FEATURE_RO_COMPAT_HUGE_FILE) == EXT4_FEATURE_RO_COMPAT_HUGE_FILE ||
|
||||
(supblk.ftr_ro_compat & EXT4_FEATURE_RO_COMPAT_GDT_CSUM) == EXT4_FEATURE_RO_COMPAT_GDT_CSUM ||
|
||||
(supblk.ftr_ro_compat & EXT4_FEATURE_RO_COMPAT_DIR_NLINK) == EXT4_FEATURE_RO_COMPAT_DIR_NLINK ||
|
||||
(supblk.ftr_ro_compat & EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE) == EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE ||
|
||||
(supblk.ftr_ro_compat & EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE) ==
|
||||
EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE ||
|
||||
(supblk.ftr_incompat & EXT4_FEATURE_INCOMPAT_64BIT) == EXT4_FEATURE_INCOMPAT_64BIT ||
|
||||
(supblk.ftr_incompat & EXT4_FEATURE_INCOMPAT_MMP) == EXT4_FEATURE_INCOMPAT_MMP ||
|
||||
(supblk.ftr_incompat & EXT4_FEATURE_INCOMPAT_FLEX_BG) == EXT4_FEATURE_INCOMPAT_FLEX_BG ||
|
||||
@@ -525,15 +643,68 @@ namespace DiscImageChef.Filesystems
|
||||
information = sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Same magic for ext2, ext3 and ext4
|
||||
/// </summary>
|
||||
const ushort EXT2_MAGIC = 0xEF53;
|
||||
public override Errno Mount()
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
const ushort EXT2_MAGIC_OLD = 0xEF51;
|
||||
public override Errno Mount(bool debug)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno Unmount()
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno MapBlock(string path, long fileBlock, ref long deviceBlock)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno GetAttributes(string path, ref FileAttributes attributes)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno ListXAttr(string path, ref List<string> xattrs)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno GetXattr(string path, string xattr, ref byte[] buf)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno Read(string path, long offset, long size, ref byte[] buf)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno ReadDir(string path, ref List<string> contents)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno StatFs(ref FileSystemInfo stat)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno Stat(string path, ref FileEntryInfo stat)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno ReadLink(string path, ref string dest)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ext2/3/4 superblock
|
||||
/// ext2/3/4 superblock
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
[SuppressMessage("ReSharper", "InconsistentNaming")]
|
||||
@@ -752,174 +923,5 @@ namespace DiscImageChef.Filesystems
|
||||
/// <summary>crc32c(superblock)</summary>
|
||||
public uint checksum;
|
||||
}
|
||||
|
||||
// ext? filesystem states
|
||||
/// <summary>Cleanly-unmounted volume</summary>
|
||||
const ushort EXT2_VALID_FS = 0x0001;
|
||||
/// <summary>Dirty volume</summary>
|
||||
const ushort EXT2_ERROR_FS = 0x0002;
|
||||
/// <summary>Recovering orphan files</summary>
|
||||
const ushort EXT3_ORPHAN_FS = 0x0004;
|
||||
|
||||
// ext? default mount flags
|
||||
/// <summary>Enable debugging messages</summary>
|
||||
const uint EXT2_DEFM_DEBUG = 0x000001;
|
||||
/// <summary>Emulates BSD behaviour on new file creation</summary>
|
||||
const uint EXT2_DEFM_BSDGROUPS = 0x000002;
|
||||
/// <summary>Enable user xattrs</summary>
|
||||
const uint EXT2_DEFM_XATTR_USER = 0x000004;
|
||||
/// <summary>Enable POSIX ACLs</summary>
|
||||
const uint EXT2_DEFM_ACL = 0x000008;
|
||||
/// <summary>Use 16bit UIDs</summary>
|
||||
const uint EXT2_DEFM_UID16 = 0x000010;
|
||||
/// <summary>Journal data mode</summary>
|
||||
const uint EXT3_DEFM_JMODE_DATA = 0x000040;
|
||||
/// <summary>Journal ordered mode</summary>
|
||||
const uint EXT3_DEFM_JMODE_ORDERED = 0x000080;
|
||||
/// <summary>Journal writeback mode</summary>
|
||||
const uint EXT3_DEFM_JMODE_WBACK = 0x000100;
|
||||
|
||||
// Behaviour on errors
|
||||
/// <summary>Continue execution</summary>
|
||||
const ushort EXT2_ERRORS_CONTINUE = 1;
|
||||
/// <summary>Remount fs read-only</summary>
|
||||
const ushort EXT2_ERRORS_RO = 2;
|
||||
/// <summary>Panic</summary>
|
||||
const ushort EXT2_ERRORS_PANIC = 3;
|
||||
|
||||
// OS codes
|
||||
const uint EXT2_OS_LINUX = 0;
|
||||
const uint EXT2_OS_HURD = 1;
|
||||
const uint EXT2_OS_MASIX = 2;
|
||||
const uint EXT2_OS_FREEBSD = 3;
|
||||
const uint EXT2_OS_LITES = 4;
|
||||
|
||||
// Revision levels
|
||||
/// <summary>The good old (original) format</summary>
|
||||
const uint EXT2_GOOD_OLD_REV = 0;
|
||||
/// <summary>V2 format w/ dynamic inode sizes</summary>
|
||||
const uint EXT2_DYNAMIC_REV = 1;
|
||||
|
||||
// Compatible features
|
||||
/// <summary>Pre-allocate directories</summary>
|
||||
const uint EXT2_FEATURE_COMPAT_DIR_PREALLOC = 0x00000001;
|
||||
/// <summary>imagic inodes ?</summary>
|
||||
const uint EXT2_FEATURE_COMPAT_IMAGIC_INODES = 0x00000002;
|
||||
/// <summary>Has journal (it's ext3)</summary>
|
||||
const uint EXT3_FEATURE_COMPAT_HAS_JOURNAL = 0x00000004;
|
||||
/// <summary>EA blocks</summary>
|
||||
const uint EXT2_FEATURE_COMPAT_EXT_ATTR = 0x00000008;
|
||||
/// <summary>Online filesystem resize reservations</summary>
|
||||
const uint EXT2_FEATURE_COMPAT_RESIZE_INO = 0x00000010;
|
||||
/// <summary>Can use hashed indexes on directories</summary>
|
||||
const uint EXT2_FEATURE_COMPAT_DIR_INDEX = 0x00000020;
|
||||
|
||||
// Read-only compatible features
|
||||
/// <summary>Reduced number of superblocks</summary>
|
||||
const uint EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER = 0x00000001;
|
||||
/// <summary>Can have files bigger than 2GiB</summary>
|
||||
const uint EXT2_FEATURE_RO_COMPAT_LARGE_FILE = 0x00000002;
|
||||
/// <summary>Use B-Tree for directories</summary>
|
||||
const uint EXT2_FEATURE_RO_COMPAT_BTREE_DIR = 0x00000004;
|
||||
/// <summary>Can have files bigger than 2TiB *ext4*</summary>
|
||||
const uint EXT4_FEATURE_RO_COMPAT_HUGE_FILE = 0x00000008;
|
||||
/// <summary>Group descriptor checksums and sparse inode table *ext4*</summary>
|
||||
const uint EXT4_FEATURE_RO_COMPAT_GDT_CSUM = 0x00000010;
|
||||
/// <summary>More than 32000 directory entries *ext4*</summary>
|
||||
const uint EXT4_FEATURE_RO_COMPAT_DIR_NLINK = 0x00000020;
|
||||
/// <summary>Nanosecond timestamps and creation time *ext4*</summary>
|
||||
const uint EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE = 0x00000040;
|
||||
|
||||
// Incompatible features
|
||||
/// <summary>Uses compression</summary>
|
||||
const uint EXT2_FEATURE_INCOMPAT_COMPRESSION = 0x00000001;
|
||||
/// <summary>Filetype in directory entries</summary>
|
||||
const uint EXT2_FEATURE_INCOMPAT_FILETYPE = 0x00000002;
|
||||
/// <summary>Journal needs recovery *ext3*</summary>
|
||||
const uint EXT3_FEATURE_INCOMPAT_RECOVER = 0x00000004;
|
||||
/// <summary>Has journal on another device *ext3*</summary>
|
||||
const uint EXT3_FEATURE_INCOMPAT_JOURNAL_DEV = 0x00000008;
|
||||
/// <summary>Reduced block group backups</summary>
|
||||
const uint EXT2_FEATURE_INCOMPAT_META_BG = 0x00000010;
|
||||
/// <summary>Volume use extents *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_EXTENTS = 0x00000040;
|
||||
/// <summary>Supports volumes bigger than 2^32 blocks *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_64BIT = 0x00000080;
|
||||
/// <summary>Multi-mount protection *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_MMP = 0x00000100;
|
||||
/// <summary>Flexible block group metadata location *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_FLEX_BG = 0x00000200;
|
||||
/// <summary>EA in inode *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_EA_INODE = 0x00000400;
|
||||
/// <summary>Data can reside in directory entry *ext4*</summary>
|
||||
const uint EXT4_FEATURE_INCOMPAT_DIRDATA = 0x00001000;
|
||||
|
||||
// Miscellaneous filesystem flags
|
||||
/// <summary>Signed dirhash in use</summary>
|
||||
const uint EXT2_FLAGS_SIGNED_HASH = 0x00000001;
|
||||
/// <summary>Unsigned dirhash in use</summary>
|
||||
const uint EXT2_FLAGS_UNSIGNED_HASH = 0x00000002;
|
||||
/// <summary>Testing development code</summary>
|
||||
const uint EXT2_FLAGS_TEST_FILESYS = 0x00000004;
|
||||
|
||||
public override Errno Mount()
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno Mount(bool debug)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno Unmount()
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno MapBlock(string path, long fileBlock, ref long deviceBlock)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno GetAttributes(string path, ref FileAttributes attributes)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno ListXAttr(string path, ref List<string> xattrs)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno GetXattr(string path, string xattr, ref byte[] buf)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno Read(string path, long offset, long size, ref byte[] buf)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno ReadDir(string path, ref List<string> contents)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno StatFs(ref FileSystemInfo stat)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno Stat(string path, ref FileEntryInfo stat)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
|
||||
public override Errno ReadLink(string path, ref string dest)
|
||||
{
|
||||
return Errno.NotImplemented;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user