rendered paste bodyusing System;
using System.Collections.Generic;
using System.Text;
namespace ExploreUFS
{
class FS
{
internal const int MAXMNTLEN = 464;
internal const int MAXVOLLEN = 32;
internal const int FSMAXSNAP = 20;
internal const int NOCSPTRS = ((124 / 4 - 4));
private Dictionary<string, int> FieldSize = new Dictionary<string, int>();
private Dictionary<string, byte[]> FieldData = new Dictionary<string, byte[]>();
public FS(byte[] Buffer)
{
FieldSize.Add("fs_firstfield", sizeof(int));
FieldSize.Add("fs_unused_1", sizeof(int));
FieldSize.Add("fs_sblkno", sizeof(int));
FieldSize.Add("fs_cblkno", sizeof(int));
FieldSize.Add("fs_iblkno", sizeof(int));
FieldSize.Add("fs_dblkno", sizeof(int));
FieldSize.Add("fs_old_cgoffset", sizeof(int));
FieldSize.Add("fs_old_cgmask", sizeof(int));
FieldSize.Add("fs_old_time", sizeof(int));
FieldSize.Add("fs_old_size", sizeof(int));
FieldSize.Add("fs_old_dsize", sizeof(int));
FieldSize.Add("fs_ncg", sizeof(int));
FieldSize.Add("fs_bsize", sizeof(int));
FieldSize.Add("fs_fsize", sizeof(int));
FieldSize.Add("fs_frag", sizeof(int));
FieldSize.Add("fs_minfree", sizeof(int));
FieldSize.Add("fs_old_rotdelay", sizeof(int));
FieldSize.Add("fs_old_rps", sizeof(int));
FieldSize.Add("fs_bmask", sizeof(int));
FieldSize.Add("fs_fmask", sizeof(int));
FieldSize.Add("fs_bshift", sizeof(int));
FieldSize.Add("fs_fshift", sizeof(int));
FieldSize.Add("fs_maxcontig", sizeof(int));
FieldSize.Add("fs_maxbpg", sizeof(int));
FieldSize.Add("fs_fragshift", sizeof(int));
FieldSize.Add("fs_fsbtodb", sizeof(int));
FieldSize.Add("fs_sbsize", sizeof(int));
FieldSize.Add("fs_spare1", sizeof(int) * 2);
FieldSize.Add("fs_nindir", sizeof(int));
FieldSize.Add("fs_inopb", sizeof(int));
FieldSize.Add("fs_old_nspf", sizeof(int));
FieldSize.Add("fs_optim", sizeof(int));
FieldSize.Add("fs_old_npsect", sizeof(int));
FieldSize.Add("fs_old_interleave", sizeof(int));
FieldSize.Add("fs_old_trackskew", sizeof(int));
FieldSize.Add("fs_id", sizeof(int) * 2);
FieldSize.Add("fs_old_csaddr", sizeof(int));
FieldSize.Add("fs_cssize", sizeof(int));
FieldSize.Add("fs_cgsize", sizeof(int));
FieldSize.Add("fs_spare2", sizeof(int));
FieldSize.Add("fs_old_nsect", sizeof(int));
FieldSize.Add("fs_old_spc", sizeof(int));
FieldSize.Add("fs_old_ncyl", sizeof(int));
FieldSize.Add("fs_old_cpg", sizeof(int));
FieldSize.Add("fs_ipg", sizeof(int));
FieldSize.Add("fs_fpg", sizeof(int));
FieldSize.Add("fs_old_cstotal", 16); // CSUM
FieldSize.Add("fs_fmod", sizeof(byte));
FieldSize.Add("fs_clean", sizeof(byte));
FieldSize.Add("fs_ronly", sizeof(byte));
FieldSize.Add("fs_old_flags", sizeof(byte));
FieldSize.Add("fs_fsmnt", MAXMNTLEN * sizeof(char));
FieldSize.Add("fs_volname", MAXVOLLEN * sizeof(char));
FieldSize.Add("fs_swuid", sizeof(long));
FieldSize.Add("fs_pad", sizeof(int));
FieldSize.Add("fs_cgrotor", sizeof(int));
FieldSize.Add("fs_ocsp", NOCSPTRS * sizeof(int));
FieldSize.Add("fs_contigdirs", sizeof(int)); // ptr
FieldSize.Add("fs_csp", sizeof(int)); // CSUM ptr
FieldSize.Add("fs_maxcluster", sizeof(int));
FieldSize.Add("fs_active", sizeof(int));
FieldSize.Add("fs_old_cpc", sizeof(int));
FieldSize.Add("fs_maxbsize", sizeof(int));
FieldSize.Add("fs_sparecon64", sizeof(long) * 17);
FieldSize.Add("fs_sblockloc", sizeof(long));
FieldSize.Add("fs_cstotal", sizeof(long) * 5 + sizeof(long) * 3); // CSUM TOTAL
FieldSize.Add("fs_time", sizeof(long));
FieldSize.Add("fs_size", sizeof(long));
FieldSize.Add("fs_dsize", sizeof(long));
FieldSize.Add("fs_csaddr", sizeof(long));
FieldSize.Add("fs_pendingblocks", sizeof(long));
FieldSize.Add("fs_pendinginodes", sizeof(int));
FieldSize.Add("fs_snapinum", sizeof(int));
FieldSize.Add("fs_avgfilesize", sizeof(int));
FieldSize.Add("fs_avgfpdir", sizeof(int));
FieldSize.Add("fs_save_cgsize", sizeof(int));
FieldSize.Add("fs_sparecon32", sizeof(int));
FieldSize.Add("fs_flags", sizeof(int));
FieldSize.Add("fs_contigsumsize", sizeof(int));
FieldSize.Add("fs_maxsymlinklen", sizeof(int));
FieldSize.Add("fs_old_inodefmt", sizeof(int));
FieldSize.Add("fs_maxfilesize", sizeof(long));
FieldSize.Add("fs_qbmask", sizeof(long));
FieldSize.Add("fs_qfmask", sizeof(long));
FieldSize.Add("fs_state", sizeof(int));
FieldSize.Add("fs_old_postblformat", sizeof(int));
FieldSize.Add("fs_old_nrpos", sizeof(int));
FieldSize.Add("fs_spare5", sizeof(int));
FieldSize.Add("fs_magic", sizeof(int));
FieldData.Clear();
int Offset = 0;
foreach (KeyValuePair<string, int> kvp in FieldSize)
{
FieldData.Add(kvp.Key, new byte[kvp.Value]);
for (int i = Offset; i < kvp.Value; i++)
{
FieldData[kvp.Key][i - Offset] = Buffer[i];
}
Offset += kvp.Value;
}
}
}
}