From 66a58e3351d51b03a396263def92aee1b0e71415 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Thu, 21 Jul 2016 16:15:39 +0100 Subject: [PATCH] * DiscImageChef.Filesystems/Structs.cs: Added structs for filesystem entries information. * DiscImageChef/Plugins.cs: * DiscImageChef.Filesystems/FFS.cs: * DiscImageChef.Filesystems/FAT.cs: * DiscImageChef.Filesystems/ODS.cs: * DiscImageChef.Filesystems/BFS.cs: * DiscImageChef.Filesystems/NTFS.cs: * DiscImageChef/Commands/Formats.cs: * DiscImageChef.Filesystems/APFS.cs: * DiscImageChef.Filesystems/HPFS.cs: * DiscImageChef/Commands/Analyze.cs: * DiscImageChef.Filesystems/SysV.cs: * DiscImageChef.Filesystems/Acorn.cs: * DiscImageChef.Filesystems/Opera.cs: * DiscImageChef.Filesystems/extFS.cs: * DiscImageChef.Filesystems/BTRFS.cs: * DiscImageChef/Commands/DumpMedia.cs: * DiscImageChef.Filesystems/ProDOS.cs: * DiscImageChef.Filesystems/LisaFS.cs: * DiscImageChef.Filesystems/ext2FS.cs: * DiscImageChef.Filesystems/MinixFS.cs: * DiscImageChef.Filesystems/ISO9660.cs: * DiscImageChef.Filesystems/SolarFS.cs: * DiscImageChef.Filesystems/UNIXBFS.cs: * DiscImageChef.Filesystems/AmigaDOS.cs: * DiscImageChef.Filesystems/AppleHFS.cs: * DiscImageChef.Filesystems/PCEngine.cs: * DiscImageChef.Filesystems/AppleMFS.cs: * DiscImageChef.Filesystems/Nintendo.cs: * DiscImageChef/Commands/CreateSidecar.cs: * DiscImageChef.Filesystems/Filesystem.cs: * DiscImageChef.Filesystems/AppleHFSPlus.cs: Refactored filesystem plugin class name. * DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj: Refactored filesystem plugin class name. Added structs for filesystem entries information. --- DiscImageChef.Filesystems/APFS.cs | 4 +- DiscImageChef.Filesystems/Acorn.cs | 4 +- DiscImageChef.Filesystems/AmigaDOS.cs | 4 +- DiscImageChef.Filesystems/AppleHFS.cs | 4 +- DiscImageChef.Filesystems/AppleHFSPlus.cs | 4 +- DiscImageChef.Filesystems/AppleMFS.cs | 4 +- DiscImageChef.Filesystems/BFS.cs | 4 +- DiscImageChef.Filesystems/BTRFS.cs | 4 +- .../DiscImageChef.Filesystems.csproj | 3 +- DiscImageChef.Filesystems/FAT.cs | 4 +- DiscImageChef.Filesystems/FFS.cs | 4 +- .../{Plugin.cs => Filesystem.cs} | 17 +- DiscImageChef.Filesystems/HPFS.cs | 4 +- DiscImageChef.Filesystems/ISO9660.cs | 4 +- DiscImageChef.Filesystems/LisaFS.cs | 4 +- DiscImageChef.Filesystems/MinixFS.cs | 4 +- DiscImageChef.Filesystems/NTFS.cs | 4 +- DiscImageChef.Filesystems/Nintendo.cs | 4 +- DiscImageChef.Filesystems/ODS.cs | 4 +- DiscImageChef.Filesystems/Opera.cs | 4 +- DiscImageChef.Filesystems/PCEngine.cs | 4 +- DiscImageChef.Filesystems/ProDOS.cs | 4 +- DiscImageChef.Filesystems/SolarFS.cs | 4 +- DiscImageChef.Filesystems/Structs.cs | 222 ++++++++++++++++++ DiscImageChef.Filesystems/SysV.cs | 4 +- DiscImageChef.Filesystems/UNIXBFS.cs | 4 +- DiscImageChef.Filesystems/ext2FS.cs | 4 +- DiscImageChef.Filesystems/extFS.cs | 4 +- DiscImageChef/Commands/Analyze.cs | 6 +- DiscImageChef/Commands/CreateSidecar.cs | 10 +- DiscImageChef/Commands/DumpMedia.cs | 10 +- DiscImageChef/Commands/Formats.cs | 4 +- DiscImageChef/Plugins.cs | 14 +- 33 files changed, 310 insertions(+), 76 deletions(-) rename DiscImageChef.Filesystems/{Plugin.cs => Filesystem.cs} (84%) create mode 100644 DiscImageChef.Filesystems/Structs.cs diff --git a/DiscImageChef.Filesystems/APFS.cs b/DiscImageChef.Filesystems/APFS.cs index 63ff22b4..859a416e 100644 --- a/DiscImageChef.Filesystems/APFS.cs +++ b/DiscImageChef.Filesystems/APFS.cs @@ -40,9 +40,9 @@ using System.Runtime.InteropServices; using System.Text; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class APFS : Plugin + class APFS : Filesystem { const uint ApfsContainerMagic = 0x4253584E; // "NXSB" const uint ApfsVolumeMagic = 0x42535041; // "APSB" diff --git a/DiscImageChef.Filesystems/Acorn.cs b/DiscImageChef.Filesystems/Acorn.cs index 7ab2422e..02406cc3 100644 --- a/DiscImageChef.Filesystems/Acorn.cs +++ b/DiscImageChef.Filesystems/Acorn.cs @@ -40,9 +40,9 @@ using System.Runtime.InteropServices; using System.Text; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class AcornADFS : Plugin + class AcornADFS : Filesystem { const ulong ADFS_SB_POS = 0xC00; diff --git a/DiscImageChef.Filesystems/AmigaDOS.cs b/DiscImageChef.Filesystems/AmigaDOS.cs index 8c926c32..ca6a229f 100644 --- a/DiscImageChef.Filesystems/AmigaDOS.cs +++ b/DiscImageChef.Filesystems/AmigaDOS.cs @@ -43,9 +43,9 @@ using DiscImageChef.PartPlugins; using System.Collections.Generic; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class AmigaDOSPlugin : Plugin + class AmigaDOSPlugin : Filesystem { public AmigaDOSPlugin() { diff --git a/DiscImageChef.Filesystems/AppleHFS.cs b/DiscImageChef.Filesystems/AppleHFS.cs index 22c3f786..65bb90bd 100644 --- a/DiscImageChef.Filesystems/AppleHFS.cs +++ b/DiscImageChef.Filesystems/AppleHFS.cs @@ -45,9 +45,9 @@ using DiscImageChef; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class AppleHFS : Plugin + class AppleHFS : Filesystem { /// /// "BD", HFS magic diff --git a/DiscImageChef.Filesystems/AppleHFSPlus.cs b/DiscImageChef.Filesystems/AppleHFSPlus.cs index c7539923..be69df69 100644 --- a/DiscImageChef.Filesystems/AppleHFSPlus.cs +++ b/DiscImageChef.Filesystems/AppleHFSPlus.cs @@ -41,9 +41,9 @@ using System.Text; using DiscImageChef; // Information from Apple TechNote 1150: https://developer.apple.com/legacy/library/technotes/tn/tn1150.html -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class AppleHFSPlus : Plugin + class AppleHFSPlus : Filesystem { /// /// "BD", HFS magic diff --git a/DiscImageChef.Filesystems/AppleMFS.cs b/DiscImageChef.Filesystems/AppleMFS.cs index 73f7aae4..cb6ff38c 100644 --- a/DiscImageChef.Filesystems/AppleMFS.cs +++ b/DiscImageChef.Filesystems/AppleMFS.cs @@ -41,9 +41,9 @@ using System.Text; using DiscImageChef; // Information from Inside Macintosh -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class AppleMFS : Plugin + class AppleMFS : Filesystem { const UInt16 MFS_MAGIC = 0xD2D7; // "LK" diff --git a/DiscImageChef.Filesystems/BFS.cs b/DiscImageChef.Filesystems/BFS.cs index 96a4b159..77f4ac37 100644 --- a/DiscImageChef.Filesystems/BFS.cs +++ b/DiscImageChef.Filesystems/BFS.cs @@ -41,9 +41,9 @@ using System.Text; using DiscImageChef; // Information from Practical Filesystem Design, ISBN 1-55860-497-9 -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class BeFS : Plugin + class BeFS : Filesystem { // Little endian constants (that is, as read by .NET :p) const UInt32 BEFS_MAGIC1 = 0x42465331; diff --git a/DiscImageChef.Filesystems/BTRFS.cs b/DiscImageChef.Filesystems/BTRFS.cs index 2e2f58dd..de764df3 100644 --- a/DiscImageChef.Filesystems/BTRFS.cs +++ b/DiscImageChef.Filesystems/BTRFS.cs @@ -40,9 +40,9 @@ using System.Runtime.InteropServices; using System.Text; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class BTRFS : Plugin + class BTRFS : Filesystem { /// /// BTRFS magic "_BHRfS_M" diff --git a/DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj b/DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj index ed49ce87..bd65645d 100644 --- a/DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj +++ b/DiscImageChef.Filesystems/DiscImageChef.Filesystems.csproj @@ -51,7 +51,7 @@ - + @@ -61,6 +61,7 @@ + diff --git a/DiscImageChef.Filesystems/FAT.cs b/DiscImageChef.Filesystems/FAT.cs index 65ffbe5f..ee955328 100644 --- a/DiscImageChef.Filesystems/FAT.cs +++ b/DiscImageChef.Filesystems/FAT.cs @@ -45,9 +45,9 @@ using DiscImageChef; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class FAT : Plugin + class FAT : Filesystem { public FAT() { diff --git a/DiscImageChef.Filesystems/FFS.cs b/DiscImageChef.Filesystems/FFS.cs index 303d2d28..418a9568 100644 --- a/DiscImageChef.Filesystems/FFS.cs +++ b/DiscImageChef.Filesystems/FFS.cs @@ -44,9 +44,9 @@ using DiscImageChef; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - public class FFSPlugin : Plugin + public class FFSPlugin : Filesystem { public FFSPlugin() { diff --git a/DiscImageChef.Filesystems/Plugin.cs b/DiscImageChef.Filesystems/Filesystem.cs similarity index 84% rename from DiscImageChef.Filesystems/Plugin.cs rename to DiscImageChef.Filesystems/Filesystem.cs index c494e4eb..9f8ca514 100644 --- a/DiscImageChef.Filesystems/Plugin.cs +++ b/DiscImageChef.Filesystems/Filesystem.cs @@ -37,13 +37,14 @@ Copyright (C) 2011-2014 Claunia.com //$Id$ using System; +using System.Collections.Generic; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { /// /// Abstract class to implement filesystem plugins. /// - public abstract class Plugin + public abstract class Filesystem { /// Plugin name. public string Name; @@ -63,7 +64,17 @@ namespace DiscImageChef.Plugins } } - protected Plugin() + protected Filesystem() + { + } + + /// + /// Initializes a filesystem instance prepared for reading contents + /// + /// Image plugin. + /// Partition start. + /// Partition end. + protected Filesystem(ImagePlugins.ImagePlugin imagePlugin, ulong partitionStart, ulong partitionEnd) { } diff --git a/DiscImageChef.Filesystems/HPFS.cs b/DiscImageChef.Filesystems/HPFS.cs index 62f2c9ed..3650c15c 100644 --- a/DiscImageChef.Filesystems/HPFS.cs +++ b/DiscImageChef.Filesystems/HPFS.cs @@ -42,9 +42,9 @@ using System.Text; using DiscImageChef; // Information from an old unnamed document -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class HPFS : Plugin + class HPFS : Filesystem { public HPFS() { diff --git a/DiscImageChef.Filesystems/ISO9660.cs b/DiscImageChef.Filesystems/ISO9660.cs index c4ea555a..2920a988 100644 --- a/DiscImageChef.Filesystems/ISO9660.cs +++ b/DiscImageChef.Filesystems/ISO9660.cs @@ -48,9 +48,9 @@ using DiscImageChef; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class ISO9660Plugin : Plugin + class ISO9660Plugin : Filesystem { //static bool alreadyLaunched; diff --git a/DiscImageChef.Filesystems/LisaFS.cs b/DiscImageChef.Filesystems/LisaFS.cs index 1e02efdd..6772cf2f 100644 --- a/DiscImageChef.Filesystems/LisaFS.cs +++ b/DiscImageChef.Filesystems/LisaFS.cs @@ -46,9 +46,9 @@ using DiscImageChef.ImagePlugins; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class LisaFS : Plugin + class LisaFS : Filesystem { const byte LisaFSv1 = 0x0E; const byte LisaFSv2 = 0x0F; diff --git a/DiscImageChef.Filesystems/MinixFS.cs b/DiscImageChef.Filesystems/MinixFS.cs index e472628f..de9bcc1a 100644 --- a/DiscImageChef.Filesystems/MinixFS.cs +++ b/DiscImageChef.Filesystems/MinixFS.cs @@ -41,9 +41,9 @@ using System.Text; using DiscImageChef; // Information from the Linux kernel -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class MinixFS : Plugin + class MinixFS : Filesystem { const UInt16 MINIX_MAGIC = 0x137F; // Minix v1, 14 char filenames diff --git a/DiscImageChef.Filesystems/NTFS.cs b/DiscImageChef.Filesystems/NTFS.cs index 2823d94b..43bb66e2 100644 --- a/DiscImageChef.Filesystems/NTFS.cs +++ b/DiscImageChef.Filesystems/NTFS.cs @@ -41,9 +41,9 @@ using System.Text; using DiscImageChef; // Information from Inside Windows NT -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class NTFS : Plugin + class NTFS : Filesystem { public NTFS() { diff --git a/DiscImageChef.Filesystems/Nintendo.cs b/DiscImageChef.Filesystems/Nintendo.cs index a0d24cf4..222a8298 100644 --- a/DiscImageChef.Filesystems/Nintendo.cs +++ b/DiscImageChef.Filesystems/Nintendo.cs @@ -44,9 +44,9 @@ using System.Collections.Generic; using DiscImageChef.Console; using System.Runtime.Remoting.Messaging; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class NintendoPlugin : Plugin + class NintendoPlugin : Filesystem { public NintendoPlugin() { diff --git a/DiscImageChef.Filesystems/ODS.cs b/DiscImageChef.Filesystems/ODS.cs index c0e3fceb..f2715a12 100644 --- a/DiscImageChef.Filesystems/ODS.cs +++ b/DiscImageChef.Filesystems/ODS.cs @@ -48,9 +48,9 @@ using DiscImageChef; // There is an ODS with signature "DECFILES11A", yet to be seen // Time is a 64 bit unsigned integer, tenths of microseconds since 1858/11/17 00:00:00. // TODO: Implement checksum -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class ODS : Plugin + class ODS : Filesystem { public ODS() { diff --git a/DiscImageChef.Filesystems/Opera.cs b/DiscImageChef.Filesystems/Opera.cs index 5a0c7017..4c114550 100644 --- a/DiscImageChef.Filesystems/Opera.cs +++ b/DiscImageChef.Filesystems/Opera.cs @@ -41,9 +41,9 @@ using System.Text; using DiscImageChef; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class OperaFS : Plugin + class OperaFS : Filesystem { public OperaFS() { diff --git a/DiscImageChef.Filesystems/PCEngine.cs b/DiscImageChef.Filesystems/PCEngine.cs index 5a9c5d51..c02104c3 100644 --- a/DiscImageChef.Filesystems/PCEngine.cs +++ b/DiscImageChef.Filesystems/PCEngine.cs @@ -40,9 +40,9 @@ using System; using System.Text; using DiscImageChef; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class PCEnginePlugin : Plugin + class PCEnginePlugin : Filesystem { public PCEnginePlugin() { diff --git a/DiscImageChef.Filesystems/ProDOS.cs b/DiscImageChef.Filesystems/ProDOS.cs index 85848549..35c9f518 100644 --- a/DiscImageChef.Filesystems/ProDOS.cs +++ b/DiscImageChef.Filesystems/ProDOS.cs @@ -44,9 +44,9 @@ using DiscImageChef; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - public class ProDOSPlugin : Plugin + public class ProDOSPlugin : Filesystem { const byte EmptyStorageType = 0x00; /// diff --git a/DiscImageChef.Filesystems/SolarFS.cs b/DiscImageChef.Filesystems/SolarFS.cs index e47dba8a..4bd44ceb 100644 --- a/DiscImageChef.Filesystems/SolarFS.cs +++ b/DiscImageChef.Filesystems/SolarFS.cs @@ -44,9 +44,9 @@ using DiscImageChef; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class SolarFS : Plugin + class SolarFS : Filesystem { public SolarFS() { diff --git a/DiscImageChef.Filesystems/Structs.cs b/DiscImageChef.Filesystems/Structs.cs new file mode 100644 index 00000000..5baa12b1 --- /dev/null +++ b/DiscImageChef.Filesystems/Structs.cs @@ -0,0 +1,222 @@ +// /*************************************************************************** +// The Disc Image Chef +// ---------------------------------------------------------------------------- +// +// Filename : Structs.cs +// Version : 1.0 +// Author(s) : Natalia Portillo +// +// Component : Component +// +// Revision : $Revision$ +// Last change by : $Author$ +// Date : $Date$ +// +// --[ Description ] ---------------------------------------------------------- +// +// Description +// +// --[ License ] -------------------------------------------------------------- +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// ---------------------------------------------------------------------------- +// Copyright (C) 2011-2015 Claunia.com +// ****************************************************************************/ +// //$Id$ +using System; +namespace DiscImageChef.Filesystems +{ + /// + /// File attributes. + /// + [Flags] + public enum FileAttributes + { + /// File is an alias (Mac OS) + Alias, + /// Indicates that the file can only be writable appended + AppendOnly, + /// File is candidate for archival/backup + Archive, + /// File is a block device + BlockDevice, + /// File is stored on filesystem block units instead of device sectors + BlockUnits, + /// Directory is a bundle or file contains a BNDL resource + Bundle, + /// File is a char device + CharDevice, + /// File is compressed + Compressed, + /// File is compressed and should not be uncompressed on read + CompressedRaw, + /// File has compression errors + CompressionError, + /// Compressed file is dirty + CompressionDirty, + /// File is a device + Device, + /// File is a directory + Directory, + /// File is encrypted + Encrypted, + /// File is stored on disk using extents + Extents, + /// File is a FIFO + FIFO, + /// File is a normal file + File, + /// File is a Mac OS file containing desktop databases that has already been added to the desktop database + HasBeenInited, + /// File contains an icon resource / EA + HasCustomIcon, + /// File is a Mac OS extension or control panel lacking INIT resources + HasNoINITs, + /// File is hidden/invisible + Hidden, + /// File cannot be written, deleted, modified or linked to + Immutable, + /// Directory is indexed using hashed trees + IndexedDirectory, + /// File contents are stored alongside its inode (or equivalent) + Inline, + /// File contains integrity checks + IntegrityStream, + /// File is on desktop + IsOnDesk, + /// File changes are written to filesystem journal before being written to file itself + Journaled, + /// Access time will not be modified + NoAccessTime, + /// File will not be subject to copy-on-write + NoCopyOnWrite, + /// File will not be backed up + NoDump, + /// File contents should not be scrubed + NoScrub, + /// File contents should not be indexed + NotIndexed, + /// File is offline + Offline, + /// File is password protected, but contents are not encrypted on disk + Password, + /// File is read-only + ReadOnly, + /// File is a reparse point + ReparsePoint, + /// When file is removed its content will be overwritten with zeroes + Secured, + /// File contents are sparse + Sparse, + /// File is a shadow (OS/2) + Shadow, + /// File is shared + Shared, + /// File is a stationery + Stationery, + /// File is a symbolic link + Symlink, + /// File writes are synchronously written to disk + Sync, + /// File belongs to the operating system + System, + /// If file end is a partial block its contend will be merged with other files + TailMerged, + /// File is temporary + Temporary, + /// Subdirectories inside of this directory are not related and should be allocated elsewhere + TopDirectory, + /// If file is deleted, contents should be stored, for a possible future undeletion + Undeletable + } + + /// + /// Information about a file entry + /// + public struct FileEntryInfo + { + DateTime crtimeUtc; + DateTime atimeUtc; + DateTime ctimeUtc; + DateTime btimeUtc; + DateTime mtimeUtc; + + /// File attributes + public FileAttributes Attributes; + + /// File creation date in UTC + public DateTime CreationTimeUtc { get { return crtimeUtc; } set { crtimeUtc = value; } } + /// File last access date in UTC + public DateTime AccessTimeUtc { get { return atimeUtc; } set { atimeUtc = value; } } + /// File attributes change date in UTC + public DateTime StatusChangeTimeUtc { get { return ctimeUtc; } set { ctimeUtc = value; } } + /// File last backup date in UTC + public DateTime BackupTimeUtc { get { return btimeUtc; } set { btimeUtc = value; } } + /// File last modification date in UTC + public DateTime LastWriteTimeUtc { get { return mtimeUtc; } set { mtimeUtc = value; } } + + /// File creation date + public DateTime CreationTime { get { return crtimeUtc.ToLocalTime(); } set { crtimeUtc = value.ToUniversalTime(); } } + /// File last access date + public DateTime AccessTime { get { return atimeUtc.ToLocalTime(); } set { atimeUtc = value.ToUniversalTime(); } } + /// File attributes change date + public DateTime StatusChangeTime { get { return ctimeUtc.ToLocalTime(); } set { ctimeUtc = value.ToUniversalTime(); } } + /// File last backup date + public DateTime BackupTime { get { return btimeUtc.ToLocalTime(); } set { btimeUtc = value.ToUniversalTime(); } } + /// File last modification date + public DateTime LastWriteTime { get { return mtimeUtc.ToLocalTime(); } set { mtimeUtc = value.ToUniversalTime(); } } + + /// Path of device that contains this file + public string DevicePath; + /// inode number for this file + public ulong Inode; + /// POSIX permissions/mode for this file + public uint Mode; + /// Number of hard links pointing to this file + public ulong Links; + /// POSIX owner ID + public ulong UID; + /// POSIX group ID + public ulong GID; + /// If file points to a device, device number + public ulong DeviceNo; + /// File length in bytes + public long Length; + /// File block size in bytes + public long BlockSize; + /// File length in blocks + public long Blocks; + } + + public struct FileSystemInfo + { + /// Filesystem type + public string Type; + /// ID of plugin for this file + public Guid PluginId; + /// Blocks for this filesystem + public long Blocks; + /// Blocks free on this filesystem + public long FreeBlocks; + /// Files on this filesystem + public ulong Files; + /// Free inodes on this filesystem + public ulong FreeFiles; + /// Maximum length of filenames on this filesystem + public ushort FilenameLength; + /// Filesystem ID + public Guid Id; + } +} \ No newline at end of file diff --git a/DiscImageChef.Filesystems/SysV.cs b/DiscImageChef.Filesystems/SysV.cs index 99604299..62f7a4ac 100644 --- a/DiscImageChef.Filesystems/SysV.cs +++ b/DiscImageChef.Filesystems/SysV.cs @@ -41,9 +41,9 @@ using System.Text; using DiscImageChef; // Information from the Linux kernel -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class SysVfs : Plugin + class SysVfs : Filesystem { const UInt32 XENIX_MAGIC = 0x002B5544; const UInt32 XENIX_CIGAM = 0x44552B00; diff --git a/DiscImageChef.Filesystems/UNIXBFS.cs b/DiscImageChef.Filesystems/UNIXBFS.cs index d5e763be..98063992 100644 --- a/DiscImageChef.Filesystems/UNIXBFS.cs +++ b/DiscImageChef.Filesystems/UNIXBFS.cs @@ -44,9 +44,9 @@ using DiscImageChef; using DiscImageChef.Console; -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class BFS : Plugin + class BFS : Filesystem { const UInt32 BFS_MAGIC = 0x1BADFACE; diff --git a/DiscImageChef.Filesystems/ext2FS.cs b/DiscImageChef.Filesystems/ext2FS.cs index 56955530..7cb66e42 100644 --- a/DiscImageChef.Filesystems/ext2FS.cs +++ b/DiscImageChef.Filesystems/ext2FS.cs @@ -41,9 +41,9 @@ using System.Text; using DiscImageChef; // Information from the Linux kernel -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class ext2FS : Plugin + class ext2FS : Filesystem { public ext2FS() { diff --git a/DiscImageChef.Filesystems/extFS.cs b/DiscImageChef.Filesystems/extFS.cs index deef46ab..e426d9a7 100644 --- a/DiscImageChef.Filesystems/extFS.cs +++ b/DiscImageChef.Filesystems/extFS.cs @@ -41,9 +41,9 @@ using System.Text; using DiscImageChef; // Information from the Linux kernel -namespace DiscImageChef.Plugins +namespace DiscImageChef.Filesystems { - class extFS : Plugin + class extFS : Filesystem { public extFS() { diff --git a/DiscImageChef/Commands/Analyze.cs b/DiscImageChef/Commands/Analyze.cs index b40eafd3..11558bd4 100644 --- a/DiscImageChef/Commands/Analyze.cs +++ b/DiscImageChef/Commands/Analyze.cs @@ -37,7 +37,7 @@ Copyright (C) 2011-2014 Claunia.com //$Id$ using System; using System.Collections.Generic; -using DiscImageChef.Plugins; +using DiscImageChef.Filesystems; using DiscImageChef.ImagePlugins; using DiscImageChef.PartPlugins; using DiscImageChef.Console; @@ -64,7 +64,7 @@ namespace DiscImageChef.Commands plugins.RegisterAllPlugins(); List id_plugins; - Plugin _plugin; + Filesystem _plugin; string information; bool checkraw = false; ImagePlugin _imageFormat; @@ -239,7 +239,7 @@ namespace DiscImageChef.Commands PluginBase plugins = new PluginBase(); plugins.RegisterAllPlugins(); - foreach(Plugin _plugin in plugins.PluginsList.Values) + foreach(Filesystem _plugin in plugins.PluginsList.Values) { if(_plugin.Identify(imagePlugin, partitionStart, partitionEnd)) id_plugins.Add(_plugin.Name.ToLower()); diff --git a/DiscImageChef/Commands/CreateSidecar.cs b/DiscImageChef/Commands/CreateSidecar.cs index 857eb48a..42e5acb5 100644 --- a/DiscImageChef/Commands/CreateSidecar.cs +++ b/DiscImageChef/Commands/CreateSidecar.cs @@ -38,7 +38,7 @@ using System; using Schemas; using System.Collections.Generic; -using DiscImageChef.Plugins; +using DiscImageChef.Filesystems; using DiscImageChef.ImagePlugins; using DiscImageChef.Console; using DiscImageChef.Checksums; @@ -525,7 +525,7 @@ namespace DiscImageChef.Commands List lstFs = new List(); - foreach(Plugin _plugin in plugins.PluginsList.Values) + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { @@ -564,7 +564,7 @@ namespace DiscImageChef.Commands List lstFs = new List(); - foreach(Plugin _plugin in plugins.PluginsList.Values) + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { @@ -730,7 +730,7 @@ namespace DiscImageChef.Commands List lstFs = new List(); - foreach(Plugin _plugin in plugins.PluginsList.Values) + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { @@ -760,7 +760,7 @@ namespace DiscImageChef.Commands List lstFs = new List(); - foreach(Plugin _plugin in plugins.PluginsList.Values) + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { diff --git a/DiscImageChef/Commands/DumpMedia.cs b/DiscImageChef/Commands/DumpMedia.cs index 9e5b400e..4c2cc3a9 100644 --- a/DiscImageChef/Commands/DumpMedia.cs +++ b/DiscImageChef/Commands/DumpMedia.cs @@ -44,7 +44,7 @@ using Schemas; using DiscImageChef.CommonTypes; using DiscImageChef.ImagePlugins; using DiscImageChef.PartPlugins; -using DiscImageChef.Plugins; +using DiscImageChef.Filesystems; namespace DiscImageChef.Commands { @@ -783,7 +783,7 @@ namespace DiscImageChef.Commands List lstFs = new List(); - foreach(Plugin _plugin in plugins.PluginsList.Values) + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { @@ -814,7 +814,7 @@ namespace DiscImageChef.Commands List lstFs = new List(); - foreach(Plugin _plugin in plugins.PluginsList.Values) + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { @@ -2976,7 +2976,7 @@ namespace DiscImageChef.Commands List lstFs = new List(); - foreach(Plugin _plugin in plugins.PluginsList.Values) + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { @@ -3016,7 +3016,7 @@ namespace DiscImageChef.Commands List lstFs = new List(); - foreach(Plugin _plugin in plugins.PluginsList.Values) + foreach(Filesystem _plugin in plugins.PluginsList.Values) { try { diff --git a/DiscImageChef/Commands/Formats.cs b/DiscImageChef/Commands/Formats.cs index 0586c623..d1fd0dec 100644 --- a/DiscImageChef/Commands/Formats.cs +++ b/DiscImageChef/Commands/Formats.cs @@ -39,7 +39,7 @@ using System; using System.Collections.Generic; using DiscImageChef.ImagePlugins; using DiscImageChef.PartPlugins; -using DiscImageChef.Plugins; +using DiscImageChef.Filesystems; using DiscImageChef.Console; namespace DiscImageChef.Commands @@ -65,7 +65,7 @@ namespace DiscImageChef.Commands DicConsole.WriteLine("Supported filesystems:"); if(FormatsOptions.Verbose) DicConsole.VerboseWriteLine("GUID\t\t\t\t\tPlugin"); - foreach(KeyValuePair kvp in plugins.PluginsList) + foreach(KeyValuePair kvp in plugins.PluginsList) { if(FormatsOptions.Verbose) DicConsole.VerboseWriteLine("{0}\t{1}", kvp.Value.PluginUUID, kvp.Value.Name); diff --git a/DiscImageChef/Plugins.cs b/DiscImageChef/Plugins.cs index ac00fbfd..25f5395d 100644 --- a/DiscImageChef/Plugins.cs +++ b/DiscImageChef/Plugins.cs @@ -41,20 +41,20 @@ using System.Collections.Generic; using System.Reflection; using DiscImageChef.ImagePlugins; using DiscImageChef.PartPlugins; -using DiscImageChef.Plugins; +using DiscImageChef.Filesystems; using DiscImageChef.Console; namespace DiscImageChef { public class PluginBase { - public Dictionary PluginsList; + public Dictionary PluginsList; public Dictionary PartPluginsList; public Dictionary ImagePluginsList; public PluginBase() { - PluginsList = new Dictionary(); + PluginsList = new Dictionary(); PartPluginsList = new Dictionary(); ImagePluginsList = new Dictionary(); } @@ -99,15 +99,15 @@ namespace DiscImageChef } } - assembly = Assembly.GetAssembly(typeof(Plugin)); + assembly = Assembly.GetAssembly(typeof(Filesystem)); foreach (Type type in assembly.GetTypes()) { try { - if (type.IsSubclassOf(typeof(Plugin))) + if (type.IsSubclassOf(typeof(Filesystem))) { - Plugin plugin = (Plugin)type.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }); + Filesystem plugin = (Filesystem)type.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }); RegisterPlugin(plugin); } } @@ -126,7 +126,7 @@ namespace DiscImageChef } } - void RegisterPlugin(Plugin plugin) + void RegisterPlugin(Filesystem plugin) { if (!PluginsList.ContainsKey(plugin.Name.ToLower())) {