All pastes #206093 Raw Edit

Macca

public text v1 · immutable
#206093 ·published 2006-10-17 07:03 UTC
rendered paste body
using 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;
			}
		}
	}
}