104 lines · 3.2 KB · C
RawDownload
/* Copyright (c) Russ Cox, MIT; see src/libdiskfs/COPYRIGHT */ AUTOLIB(diskfs) typedef struct Block Block;typedef struct Disk Disk;typedef struct Fsys Fsys; #define DEFAULT_BLOCKSIZE 4096 #ifndef _NFS3H_	/* in case sunrpc.h, nfs3.h are not included */typedef struct SunAuthUnix SunAuthUnix;typedef struct Nfs3Attr Nfs3Attr;typedef struct Nfs3Entry Nfs3Entry;typedef struct Nfs3Handle Nfs3Handle;typedef int Nfs3Status;#endifstruct VtCache; struct Disk{	Block *(*_read)(Disk *disk, u32int count, u64int offset);	int (*_sync)(Disk*);	void (*_close)(Disk*);	u64int (*_size)(Disk*);	void *priv;}; struct Block{	Disk *disk;	u32int len;	uchar *data;	void (*_close)(Block*);	void *priv;}; struct Fsys{	u32int blocksize;	u32int nblock;	char *type; 	Disk *disk;	Block *(*_readblock)(Fsys *fsys, u64int blockno);	int (*_sync)(Fsys *fsys);	void (*_close)(Fsys *fsys); 	Nfs3Status (*_root)(Fsys*, Nfs3Handle*);	Nfs3Status (*_access)(Fsys*, SunAuthUnix*, Nfs3Handle*, u32int, u32int*, Nfs3Attr*);	Nfs3Status (*_lookup)(Fsys*, SunAuthUnix*, Nfs3Handle*, char*, Nfs3Handle*);	Nfs3Status (*_getattr)(Fsys*, SunAuthUnix*, Nfs3Handle*, Nfs3Attr*);	Nfs3Status (*_readdir)(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, u32int count, u64int cookie, uchar**, u32int*, uchar*);	Nfs3Status (*_readfile)(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, u32int count, u64int offset, uchar**, u32int*, uchar*);	Nfs3Status (*_readlink)(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, char **link); 	void *priv;		u64int (*fileblock)(Fsys *fsys, Nfs3Handle *h, u64int offset);}; struct Handle{	uchar h[64];	int len;}; void		blockdump(Block *b, char *desc);void		blockput(Block *b); Disk*	diskcache(Disk*, uint, uint);Disk*	diskopenventi(struct VtCache*, uchar*);Disk*	diskopenfile(char *file);Disk*	diskpart(Disk*, u64int offset, u64int count);void		diskpartabandon(Disk*); Disk*	diskopen(char *file);void		diskclose(Disk *disk);Block*	diskread(Disk *disk, u32int, u64int offset);int		disksync(Disk *disk); Fsys*	fsysopenffs(Disk*, u32int blocksize, u64int offset);Fsys*	fsysopenhfs(Disk*, u32int blocksize, u64int offset);Fsys*	fsysopenkfs(Disk*, u32int blocksize, u64int offset);Fsys*	fsysopenext2(Disk*, u32int blocksize, u64int offset);Fsys*	fsysopenfat(Disk*, u32int blocksize, u64int offset);Fsys*	fsysopenraw(Disk*, u32int blocksize, u64int offset); Fsys*	fsysopen(Disk *disk);Fsys*	fsysopen_new(Disk *disk, u32int blocksize, u64int offset);Block*	fsysreadblock(Fsys *fsys, u64int blockno);int		fsyssync(Fsys *fsys);void		fsysclose(Fsys *fsys); Nfs3Status		fsysroot(Fsys *fsys, Nfs3Handle *h);Nfs3Status		fsyslookup(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, char *name, Nfs3Handle *nh);Nfs3Status		fsysgetattr(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, Nfs3Attr *attr);Nfs3Status		fsysreaddir(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, u32int count, u64int cookie, uchar **e, u32int *ne, uchar*);Nfs3Status		fsysreadfile(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, u32int, u64int, uchar**, u32int*, uchar*);Nfs3Status		fsysreadlink(Fsys *fsys, SunAuthUnix*, Nfs3Handle *h, char **plink);Nfs3Status		fsysaccess(Fsys *fsys, SunAuthUnix*, Nfs3Handle*, u32int, u32int*, Nfs3Attr*);void*	emalloc(ulong size);	/* provided by caller */ extern int allowall;