public VfsXfsFileSystem(Stream stream, FileSystemParameters parameters) : base(new XfsFileSystemOptions(parameters)) { stream.Position = 0; byte[] superblockData = Utilities.ReadFully(stream, 264); SuperBlock superblock = new SuperBlock(); superblock.ReadFrom(superblockData, 0); if (superblock.Magic != SuperBlock.XfsMagic) { throw new IOException("Invalid superblock magic - probably not an xfs file system"); } Context = new Context { RawStream = stream, SuperBlock = superblock, Options = (XfsFileSystemOptions)Options }; var allocationGroups = new AllocationGroup[superblock.AgCount]; long offset = 0; for (int i = 0; i < allocationGroups.Length; i++) { var ag = new AllocationGroup(Context, offset); allocationGroups[ag.InodeBtreeInfo.SequenceNumber] = ag; offset += ag.FreeBlockInfo.Length * superblock.Blocksize; } Context.AllocationGroups = allocationGroups; RootDirectory = new Directory(Context, Context.GetInode(superblock.RootInode)); }
internal FatFileSystemOptions(FileSystemParameters parameters) { if (parameters != null) { FileNameEncoding = parameters.FileNameEncoding ?? Encoding.GetEncoding(437); } }
private DiscFileSystem OpenUdf(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { if (volumeInfo != null) { return(new UdfReader(stream, volumeInfo.PhysicalGeometry.BytesPerSector)); } return(new UdfReader(stream)); }
internal FatFileSystemOptions(FileSystemParameters parameters) { if (parameters != null && parameters.FileNameEncoding != null) { FileNameEncoding = parameters.FileNameEncoding; } else { FileNameEncoding = Encoding.GetEncoding(437); } }
internal XfsFileSystemOptions(FileSystemParameters parameters) { if (parameters != null && parameters.FileNameEncoding != null) { FileNameEncoding = parameters.FileNameEncoding; } else { FileNameEncoding = Encoding.UTF8; } }
private DiscFileSystem OpenUdf(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { if (volumeInfo != null) { return new UdfReader(stream, volumeInfo.PhysicalGeometry.BytesPerSector); } else { return new UdfReader(stream); } }
internal ExtFileSystemOptions(FileSystemParameters parameters) { if (parameters != null && parameters.FileNameEncoding != null) { FileNameEncoding = parameters.FileNameEncoding; } else { FileNameEncoding = Encoding.UTF8; } }
internal FatFileSystemOptions(FileSystemParameters parameters) { if (parameters != null && parameters.FileNameEncoding != null) { FileNameEncoding = parameters.FileNameEncoding; } else { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); FileNameEncoding = Encoding.GetEncoding(437); } }
internal FatFileSystemOptions(FileSystemParameters parameters) { if (parameters != null && parameters.FileNameEncoding != null) { FileNameEncoding = parameters.FileNameEncoding; } else { // FileNameEncoding = Encoding.GetEncoding(437); FileNameEncoding = Encoding.ASCII; } }
public VfsExtFileSystem(Stream stream, FileSystemParameters parameters) : base(new ExtFileSystemOptions(parameters)) { stream.Position = 1024; byte[] superblockData = Utilities.ReadFully(stream, 1024); SuperBlock superblock = new SuperBlock(); superblock.ReadFrom(superblockData, 0); if (superblock.Magic != SuperBlock.Ext2Magic) { throw new IOException("Invalid superblock magic - probably not an Ext file system"); } if (superblock.RevisionLevel == SuperBlock.OldRevision) { throw new IOException("Old ext revision - not supported"); } if ((superblock.IncompatibleFeatures & ~SupportedIncompatibleFeatures) != 0) { throw new IOException("Incompatible ext features present: " + (superblock.IncompatibleFeatures & ~SupportedIncompatibleFeatures)); } Context = new Context { RawStream = stream, SuperBlock = superblock, Options = (ExtFileSystemOptions)Options }; uint numGroups = Utilities.Ceil(superblock.BlocksCount, superblock.BlocksPerGroup); long blockDescStart = (superblock.FirstDataBlock + 1) * (long)superblock.BlockSize; stream.Position = blockDescStart; byte[] blockDescData = Utilities.ReadFully(stream, (int)numGroups * BlockGroup.DescriptorSize); _blockGroups = new BlockGroup[numGroups]; for (int i = 0; i < numGroups; ++i) { BlockGroup bg = new BlockGroup(); bg.ReadFrom(blockDescData, i * BlockGroup.DescriptorSize); _blockGroups[i] = bg; } RootDirectory = new Directory(Context, 2, GetInode(2)); }
/// <summary> /// Opens a stream using the file system. /// </summary> /// <param name="stream">The stream to access.</param> /// <param name="parameters">Parameters for the file system.</param> /// <returns>A file system instance.</returns> public override DiscFileSystem Open(Stream stream, FileSystemParameters parameters) { return(_openDelegate(stream, null, parameters)); }
/// <summary> /// Opens a volume using the file system. /// </summary> /// <param name="volume">The volume to access.</param> /// <param name="parameters">Parameters for the file system.</param> /// <returns>A file system instance.</returns> public override DiscFileSystem Open(VolumeInfo volume, FileSystemParameters parameters) { return(_openDelegate(volume.Open(), volume, parameters)); }
/// <summary> /// Opens a volume using the file system. /// </summary> /// <param name="volume">The volume to access.</param> /// <param name="parameters">Parameters for the file system.</param> /// <returns>A file system instance.</returns> public override DiscFileSystem Open(VolumeInfo volume, FileSystemParameters parameters) { return _openDelegate(volume.Open(), volume, parameters); }
/// <summary> /// Opens a stream using the file system. /// </summary> /// <param name="stream">The stream to access.</param> /// <param name="parameters">Parameters for the file system.</param> /// <returns>A file system instance.</returns> public override DiscFileSystem Open(Stream stream, FileSystemParameters parameters) { return _openDelegate(stream, null, parameters); }
private DiscFileSystem OpenIso(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { return new CDReader(stream, true, true); }
public VfsExtFileSystem(Stream stream, FileSystemParameters parameters) : base(new ExtFileSystemOptions(parameters)) { stream.Position = 1024; byte[] superblockData = StreamUtilities.ReadExact(stream, 1024); SuperBlock superblock = new SuperBlock(); superblock.ReadFrom(superblockData, 0); if (superblock.Magic != SuperBlock.Ext2Magic) { throw new IOException("Invalid superblock magic - probably not an Ext file system"); } if (superblock.RevisionLevel == SuperBlock.OldRevision) { throw new IOException("Old ext revision - not supported"); } if ((superblock.IncompatibleFeatures & ~SupportedIncompatibleFeatures) != 0) { throw new IOException("Incompatible ext features present: " + (superblock.IncompatibleFeatures & ~SupportedIncompatibleFeatures)); } Context = new Context { RawStream = stream, SuperBlock = superblock, Options = (ExtFileSystemOptions)Options }; uint numGroups = MathUtilities.Ceil(superblock.BlocksCount, superblock.BlocksPerGroup); long blockDescStart = (superblock.FirstDataBlock + 1) * (long)superblock.BlockSize; stream.Position = blockDescStart; var bgDescSize = superblock.Has64Bit ? BlockGroup64.DescriptorSize64 : BlockGroup.DescriptorSize; byte[] blockDescData = StreamUtilities.ReadExact(stream, (int)numGroups * bgDescSize); _blockGroups = new BlockGroup[numGroups]; for (int i = 0; i < numGroups; ++i) { BlockGroup bg = superblock.Has64Bit ? new BlockGroup64() : new BlockGroup(); bg.ReadFrom(blockDescData, i * bgDescSize); _blockGroups[i] = bg; } var journalSuperBlock = new JournalSuperBlock(); if (superblock.JournalInode != 0) { var journalInode = GetInode(superblock.JournalInode); var journalDataStream = journalInode.GetContentBuffer(Context); var journalData = StreamUtilities.ReadExact(journalDataStream, 0, 1024 + 12); journalSuperBlock.ReadFrom(journalData, 0); Context.JournalSuperblock = journalSuperBlock; } RootDirectory = new Directory(Context, 2, GetInode(2)); }
private static DiscFileSystem Open(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { return(new ExFatFileSystem(stream)); }
/// <summary> /// Initializes a new instance of the ExtFileSystem class. /// </summary> /// <param name="stream">The stream containing the ext file system.</param> /// <param name="parameters">The generic file system parameters (only file name encoding is honoured).</param> public ExtFileSystem(Stream stream, FileSystemParameters parameters) : base(new VfsExtFileSystem(stream, parameters)) { }
/// <summary> /// Initializes a new instance of the ExtFileSystem class. /// </summary> /// <param name="stream">The stream containing the ext file system.</param> /// <param name="parameters">The generic file system parameters (only file name encoding is honoured).</param> public XfsFileSystem(Stream stream, FileSystemParameters parameters) : base(new VfsXfsFileSystem(stream, parameters)) { }
private DiscFileSystem Open(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { return(new SquashFileSystemReader(stream)); }
private DiscFileSystem Open(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { return(new HfsPlusFileSystem(stream)); }
private DiscFileSystem Open(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { return new NtfsFileSystem(stream); }
private DiscFileSystem Open(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { return new SquashFileSystemReader(stream); }
private DiscFileSystem Open(Stream stream, VolumeInfo volInfo, FileSystemParameters parameters) { return(new MyFileSystem()); }
private DiscFileSystem Open(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { return(new FatFileSystem(stream, Ownership.None, parameters)); }
private DiscFileSystem Open(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { return new FatFileSystem(stream, Ownership.None, parameters); }
/// <summary> /// Initializes a new instance of the FatFileSystem class. /// </summary> /// <param name="data">The stream containing the file system.</param> /// <param name="ownsData">Indicates if the new instance should take ownership /// of <paramref name="data"/>.</param> /// <param name="parameters">The parameters for the file system.</param> public FatFileSystem(Stream data, Ownership ownsData, FileSystemParameters parameters) : base(new FatFileSystemOptions(parameters)) { _dirCache = new Dictionary<uint, Directory>(); if (parameters != null && parameters.TimeConverter != null) { _timeConverter = parameters.TimeConverter; } else { _timeConverter = DefaultTimeConverter; } Initialize(data); _ownsData = ownsData; }
private DiscFileSystem OpenIso(Stream stream, VolumeInfo volumeInfo, FileSystemParameters parameters) { return(new CDReader(stream, true, true)); }