75 lines · 1.4 KB · C
RawDownload
/* *  format of cache on disk */typedef struct Dptr	Dptr;typedef struct Dahdr	Dahdr;typedef struct Dalloc	Dalloc;typedef struct Fphdr	Fphdr;typedef struct Fptr	Fptr;typedef struct Inode	Inode;typedef struct Dihdr	Dihdr;typedef struct Dinode	Dinode; enum{	Amagic= 	0xbebeefed,	/* allocation block magic */	Imagic=		0xbadc00ce,	/* inode block magic */	BtoUL=		8*sizeof(ulong),/* bits in a ulong */	CACHENAMELEN=	128};#define	Indbno		0x80000000	/* indirect block */#define	Notabno		0xFFFFFFFF	/* not a block number */ /* *  Allocation blocks at the begining of the disk.  There are *  enough of these blocks to supply 1 bit for each block on the *  disk; */struct Dahdr{	ulong	magic;	ulong	bsize;		/* logical block size */	char	name[CACHENAMELEN];	short	nab;		/* number of allocation blocks */};struct Dalloc{	Dahdr;	ulong	bits[1];}; /* *  A pointer to disk data */struct Dptr{	ulong	fbno;		/* file block number */	ulong	bno;		/* disk block number */	ushort	start;		/* offset into block of valid data */	ushort	end;		/* offset into block after valid data */}; /* *  A file descriptor. */struct Inode{	Qid	qid;	vlong	length;	Dptr	ptr;		/* pointer page */		char	inuse;}; /* *  inode blocks (after allocation blocks) */struct Dihdr{	ulong	magic;	ulong	nino;		/* number of inodes */};struct Dinode{	Dihdr;	Inode	inode[1];};