internal static bool Detect(Stream stream) { if (stream.Length < 264) { return(false); } stream.Position = 0; byte[] superblockData = StreamUtilities.ReadFully(stream, 264); SuperBlock superblock = new SuperBlock(); superblock.ReadFrom(superblockData, 0); return(superblock.Magic == SuperBlock.XfsMagic); }
public AllocationGroupFreeBlockInfo(SuperBlock superBlock) { SbVersion = superBlock.SbVersion; Size = SbVersion >= 5 ? 92 : 64; }
public BlockDirectory(SuperBlock sb) { SuperBlock = sb; sb_ok = true; }
/// <summary> /// https://github.com/torvalds/linux/blob/2a610b8aa8e5bd449ba270e517b0e72295d62c9c/fs/xfs/libxfs/xfs_format.h#L587 /// </summary> private long XFS_FSB_TO_BB(SuperBlock sb, long fsbno) { return(fsbno << (sb.BlocksizeLog2 - BBSHIFT)); }
/// <summary> /// https://github.com/torvalds/linux/blob/2a610b8aa8e5bd449ba270e517b0e72295d62c9c/fs/xfs/libxfs/xfs_format.h#L716 /// </summary> private long XFS_AGF_DADDR(SuperBlock sb) { return(1 << (sb.SectorSizeLog2 - BBSHIFT)); }
/// <summary> /// https://github.com/torvalds/linux/blob/2a610b8aa8e5bd449ba270e517b0e72295d62c9c/fs/xfs/libxfs/xfs_format.h#L829 /// </summary> private long XFS_AGB_TO_DADDR(SuperBlock sb, int agno, int agbno) { return(XFS_FSB_TO_BB(sb, agno * sb.AgBlocks) + agbno); }
/// <summary> /// https://github.com/torvalds/linux/blob/2a610b8aa8e5bd449ba270e517b0e72295d62c9c/fs/xfs/libxfs/xfs_format.h#L832 /// </summary> private long XFS_AG_DADDR(SuperBlock sb, int agno, long d) { return(XFS_AGB_TO_DADDR(sb, agno, 0) + d); }
public AllocationGroupInodeBtreeInfo(SuperBlock superBlock) { SbVersion = superBlock.SbVersion; Size = SbVersion >= 5 ? 334 : 296; }
public LeafDirectory(SuperBlock sb) { superblock = sb; }
public BlockDirectoryDataUnused(SuperBlock sb) { SuperBlock = sb; sb_ok = true; }