// /*************************************************************************** // The Disc Image Chef // ---------------------------------------------------------------------------- // // Filename : Filesystem.cs // Author(s) : Natalia Portillo // // Component : DiscImageChef filesystem plugins. // // --[ Description ] ---------------------------------------------------------- // // Skeleton and interface for filesystem plugins. // // --[ License ] -------------------------------------------------------------- // // This library is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as // published by the Free Software Foundation; either version 2.1 of the // License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, see . // // ---------------------------------------------------------------------------- // Copyright © 2011-2017 Natalia Portillo // ****************************************************************************/ using System; using System.Collections.Generic; using System.Text; using DiscImageChef.CommonTypes; namespace DiscImageChef.Filesystems { /// /// Abstract class to implement filesystem plugins. /// public abstract class Filesystem { /// Plugin name. public string Name; /// Plugin UUID. public Guid PluginUUID; internal Schemas.FileSystemType xmlFSType; public Encoding CurrentEncoding; /// /// Information about the filesystem as expected by CICM Metadata XML /// /// Information about the filesystem as expected by CICM Metadata XML public Schemas.FileSystemType XmlFSType { get { return xmlFSType; } } protected Filesystem() { } // TODO: Call other constructors protected Filesystem(Encoding encoding) { } /// /// Initializes a filesystem instance prepared for reading contents /// /// Image plugin. /// Partition. /// Which encoding to use for this filesystem. protected Filesystem(ImagePlugins.ImagePlugin imagePlugin, Partition partition, Encoding encoding) { } /// /// Identifies the filesystem in the specified LBA /// /// Disk image. /// Partition. /// true, if the filesystem is recognized, false otherwise. public abstract bool Identify(ImagePlugins.ImagePlugin imagePlugin, Partition partition); /// /// Gets information about the identified filesystem. /// /// Disk image. /// Partition. /// Filesystem information. public abstract void GetInformation(ImagePlugins.ImagePlugin imagePlugin, Partition partition, out string information); /// /// Initializates whatever internal structures the filesystem plugin needs to be able to read files and directories from the filesystem. /// public abstract Errno Mount(); /// /// Initializates whatever internal structures the filesystem plugin needs to be able to read files and directories from the filesystem. /// public abstract Errno Mount(bool debug); /// /// Frees all internal structures created by /// public abstract Errno Unmount(); /// /// Maps a filesystem block from a file to a block from the underlying device. /// /// Error number. /// File path. /// File block. /// Device block. public abstract Errno MapBlock(string path, long fileBlock, ref long deviceBlock); /// /// Gets the attributes of a file or directory /// /// Error number. /// File path. /// File attributes. public abstract Errno GetAttributes(string path, ref FileAttributes attributes); /// /// Lists all extended attributes, alternate data streams and forks of the given file. /// /// Error number. /// Path. /// List of extended attributes, alternate data streams and forks. public abstract Errno ListXAttr(string path, ref List xattrs); /// /// Reads an extended attribute, alternate data stream or fork from the given file. /// /// Error number. /// File path. /// Extendad attribute, alternate data stream or fork name. /// Buffer. public abstract Errno GetXattr(string path, string xattr, ref byte[] buf); /// /// Reads data from a file (main/only data stream or data fork). /// /// File path. /// Offset. /// Bytes to read. /// Buffer. public abstract Errno Read(string path, long offset, long size, ref byte[] buf); /// /// Lists contents from a directory. /// /// Directory path. /// Directory contents. public abstract Errno ReadDir(string path, ref List contents); /// /// Gets information about the mounted volume. /// /// Information about the mounted volume. public abstract Errno StatFs(ref FileSystemInfo stat); /// /// Gets information about a file or directory. /// /// File path. /// File information. public abstract Errno Stat(string path, ref FileEntryInfo stat); /// /// Solves a symbolic link. /// /// Link path. /// Link destination. public abstract Errno ReadLink(string path, ref string dest); } }