All pastes #365396 Raw Edit

Miscellany

public java v1 · immutable
#365396 ·published 2007-02-20 22:37 UTC
rendered paste body
/** *	SmallFS.java - template for a file-system driver for the "small file-system" * *	@author Gurtac Yemiscioglu *	gy4@kent.ac.uk */public class SmallFS implements FSIF{	private DiskScheduler dsched;	private byte sblk[];	private int nblocks;	public static final int SFS_NTABLES = 16;	/**	 * called to initialise the file-system driver	 *	 * @param dsched disk scheduler used to interface with the underlying device	 *	 * @return 0 on success, non-zero on failure	 */	public int initFS (DiskScheduler dsched)	{		int i;		int itotal, iused;		int imagic;		this.dsched = dsched;		sblk = dsched.readBlock (0);		if (sblk == null) {			System.err.println ("failed to read superblock!");			return -1;		}		nblocks = (int)BM.read_uint32 (sblk, 12);		imagic = (int)BM.read_uint32 (sblk, 0);		if (imagic != 0xefbeadde) {			System.err.println ("bad file-system magic!  expected [deadbeef], found [" + BM.tohexbuf (sblk, 0, 4) + "]");			return -1;		}		System.out.println ("File-system magic   : " + BM.tohexbuf (sblk, 0, 4));		System.out.println ("File-system version : " + BM.read_uint16 (sblk, 4) + "." + BM.read_uint16 (sblk, 6));		System.out.println ("Superblock age      : " + BM.read_uint32 (sblk, 8));		System.out.println ("Total blocks        : " + nblocks);		System.out.println ("Block bitmap at     : " + BM.read_uint32 (sblk, 16));		System.out.print ("Inode tables at     : ");		for (i=0; i<SFS_NTABLES; i++) {			int itblk = (int)BM.read_uint32 (sblk, 20 + (i * 4));			int itlen = (int)BM.read_uint32 (sblk, 20 + (SFS_NTABLES * 4) + (i * 4));			System.out.print ("(" + itblk + "-" + (itblk + (itlen - 1)) + ") ");		}		System.out.println ("");		itotal = (int)BM.read_uint32 (sblk, 20 + (SFS_NTABLES * 8));		iused = (int)BM.read_uint32 (sblk, 24 + (SFS_NTABLES * 8));		System.out.println ("Total inodes        : " + itotal);		System.out.println ("Used inodes         : " + iused);		System.out.println ("Free inodes         : " + (itotal - iused));		System.out.println ("Root inode          : " + BM.read_uint32 (sblk, 28 + (SFS_NTABLES * 8)));		return 0;	}	/**	 * prints out a block summary for the small file-system by examining	 * the contents of the block bitmap and counting up the 4 states.  Only	 * examines physically present blocks (i.e. not those in the bitmap which	 * are past the end of the file-system).  Assumes that the file-system has	 * already been initialised (by calling initFS() above)	 *	 * @return 0 on success, non-zero on failure	 */		public int fsBlockSummary ()	{		//variables declared		int unused = 0;		int reserved = 0;		int used = 0;		int valid = 0;		byte gblk[];		int bits;		//reading block				gblk = dsched.readBlock((int)BM.read_uint32(sblk,16));				for(int i = 0; i<nblocks*2; i=i+2)		{			//read bits from block			   bits = read_ubits(gblk,i,2);			switch(map)			{				case 0: unused++;			//0x00				break;				case 1: reserved++;		//0x01				break;				case 2: used++;			//0x02				break;				case 3: invalid++;		//0x03				break;				default:System.out.println("Wrong block\n"); 				return -1;							}				}				//prints Block summary		System.out.println("Block summary:" +unused+ "unused, " +reserved+ "reserved," +used+ "used," +invalid+ "invalid");				return 0;	}}